Я испытываю странное поведение в своем приложении OpenGL. Я генерирую несколько программ GLSL во время инициализации программы. Шейдерные программы читаются из текстовых файлов, а программы скомпилированы и связаны. Тем не менее, я случайно сталкиваюсь с ошибками компиляции для одной из шейдерных программ (проходной вершинный шейдер). Я не могу понять, почему программа загружается отлично, и программа шейдеров успешно компилируется несколько раз, но не может делать в другие моменты!Программа GLSL Shader случайно не компилируется
Вот код шейдера:
#version 330
// vertex position in the model space
layout(location = 0) in vec3 inPosition;
layout(location = 1) in vec2 inTexCoord;
// will be interporlated for each fragment
smooth out vec2 vTexCoord;
// uniforms
uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
void main(void) {
gl_Position = projectionMatrix * modelViewMatrix * vec4(inPosition, 1.0);
vTexCoord = inTexCoord;
}
А вот код для компиляции шейдеров (passThroughVertShader является QString):
this->passThroughVertShader = glCreateShader(GL_VERTEX_SHADER);
const char *passThroughVertShaderCodeC = passThroughVertShaderCode.toStdString().c_str();
sourceCode = passThroughVertShaderCodeC;
glShaderSource(this->passThroughVertShader, 1, &sourceCode, NULL);
glCompileShader(this->passThroughVertShader);
glGetShaderiv(this->passThroughVertShader, GL_COMPILE_STATUS, &isCompiled);
if(isCompiled == GL_FALSE)
{
qDebug("ERROR compiling pass-through vertex shader..");
exit(-1);
}
glAttachShader(this->shaderProgram, this->passThroughVertShader);
И функция, которая загружает ее:
QString MyClass::readShaderFile(const QString &filename) {
QString content;
QFile file(filename);
if (file.open(QIODevice::ReadOnly)) {
QTextStream tStream(&file);
content = tStream.readAll();
}
return content;
}
Обновление:
Следующее предложение Андона, я дважды проверил, и я не проверял журнал после сбоя. Вот что говорит журнал:
Error: 0(17) : error C0000: syntax error, unexpected '!', expecting "::" at token "!"
Вы знаете, что было бы действительно полезно? Фактический журнал ошибок для вашей случайной ошибки: P –
@ AndonM.Coleman Вот и все. Журнал ничего не показывает! – informer2000
Собственно, позвольте мне проверить это. – informer2000