45 QByteArray vertHeader, QByteArray fragHeader)
52 QByteArray vertSource;
55 vertSource.append(
"#version 300 es\n");
59 vertSource.append(
"#define texture2D texture\n");
60 vertSource.append(
"#define texture3D texture\n");
65 vertSource.append(vertHeader);
66 QFile vertexShaderFile(
":/" + vertPath);
67 if (!vertexShaderFile.open(QIODevice::ReadOnly)) {
68 throw ShaderLoaderException(QString(
"%1: %2 - Cause: %3").arg(
"Failed to open vertex shader source file", vertPath, vertexShaderFile.errorString()));
70 vertSource.append(vertexShaderFile.readAll());
72 result = shader->addShaderFromSourceCode(QOpenGLShader::Vertex, vertSource);
74 throw ShaderLoaderException(QString(
"%1: %2 - Cause: %3").arg(
"Failed to add vertex shader source from file", vertPath, shader->log()));
77 QByteArray fragSource;
80 fragSource.append(
"#version 300 es\n");
82 fragSource.append(
"#extension GL_EXT_shader_texture_lod : enable\n");
85 "precision mediump float;\n"
86 "precision mediump sampler3D;\n");
89 fragSource.append(
"#define texture2D texture\n");
90 fragSource.append(
"#define texture3D texture\n");
93 "#if __VERSION__ < 300\n"
94 "#define textureLod texture2DLodEXT\n"
101 fragSource.append(
"#define texture2D texture\n");
102 fragSource.append(
"#define texture3D texture\n");
107 fragSource.append(fragHeader);
108 QFile fragmentShaderFile(
":/" + fragPath);
109 if (!fragmentShaderFile.open(QIODevice::ReadOnly)) {
110 throw ShaderLoaderException(QString(
"%1: %2 - Cause: %3").arg(
"Failed to open fragment shader source file", fragPath, fragmentShaderFile.errorString()));
112 fragSource.append(fragmentShaderFile.readAll());
114 result = shader->addShaderFromSourceCode(QOpenGLShader::Fragment, fragSource);
116 throw ShaderLoaderException(QString(
"%1: %2 - Cause: %3").arg(
"Failed to add fragment shader source from file", fragPath, shader->log()));
123 result = shader->link();
127 Q_ASSERT(shader->isLinked());
140 QByteArray fragHeader;
143 fragHeader.append(
"#define DIRECT_LOD_FETCH\n");
144 if (useHiQualityFiltering) {
145 fragHeader.append(
"#define HIGHQ_SCALING\n");
151 bool haveDisplayFilter = displayFilter && !displayFilter->program().isEmpty();
152 if (haveDisplayFilter) {
153 fragHeader.append(
"#define USE_OCIO\n");
154 fragHeader.append(displayFilter->program().toLatin1());
157 QString vertPath, fragPath;
160 vertPath =
"matrix_transform.vert";
161 fragPath =
"highq_downscale.frag";
163 vertPath =
"matrix_transform_legacy.vert";
164 fragPath =
"simple_texture_legacy.frag";