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 vertexShaderFile.open(QIODevice::ReadOnly);
68 vertSource.append(vertexShaderFile.readAll());
70 result = shader->addShaderFromSourceCode(QOpenGLShader::Vertex, vertSource);
72 throw ShaderLoaderException(QString(
"%1: %2 - Cause: %3").arg(
"Failed to add vertex shader source from file", vertPath, shader->log()));
75 QByteArray fragSource;
78 fragSource.append(
"#version 300 es\n");
80 fragSource.append(
"#extension GL_EXT_shader_texture_lod : enable\n");
83 "precision mediump float;\n"
84 "precision mediump sampler3D;\n");
87 fragSource.append(
"#define texture2D texture\n");
88 fragSource.append(
"#define texture3D texture\n");
91 "#if __VERSION__ < 300\n"
92 "#define textureLod texture2DLodEXT\n"
99 fragSource.append(
"#define texture2D texture\n");
100 fragSource.append(
"#define texture3D texture\n");
105 fragSource.append(fragHeader);
106 QFile fragmentShaderFile(
":/" + fragPath);
107 fragmentShaderFile.open(QIODevice::ReadOnly);
108 fragSource.append(fragmentShaderFile.readAll());
110 result = shader->addShaderFromSourceCode(QOpenGLShader::Fragment, fragSource);
112 throw ShaderLoaderException(QString(
"%1: %2 - Cause: %3").arg(
"Failed to add fragment shader source from file", fragPath, shader->log()));
119 result = shader->link();
123 Q_ASSERT(shader->isLinked());
136 QByteArray fragHeader;
139 fragHeader.append(
"#define DIRECT_LOD_FETCH\n");
140 if (useHiQualityFiltering) {
141 fragHeader.append(
"#define HIGHQ_SCALING\n");
147 bool haveDisplayFilter = displayFilter && !displayFilter->program().isEmpty();
148 if (haveDisplayFilter) {
149 fragHeader.append(
"#define USE_OCIO\n");
151 fragHeader.append(
"#define USE_OCIO_V2\n");
153 fragHeader.append(displayFilter->program().toLatin1());
156 QString vertPath, fragPath;
159 vertPath =
"matrix_transform.vert";
160 fragPath =
"highq_downscale.frag";
162 vertPath =
"matrix_transform_legacy.vert";
163 fragPath =
"simple_texture_legacy.frag";