2016-05-11 3 views
0

Я получаю следующее сообщение об ошибке при попытке связать мой фрагмент шейдера,QGLShaderProgram OpenGL шейдеры

QGLShader :: компилировать (фрагмент): 0 (4): ошибка C0000: синтаксическая ошибка, неожиданный '' , ожидая «::» в токене ».

Я просто пытаюсь реализовать простой шейдер фрагмента, который устанавливает цвет в зеленый цвет.

Код для моих вершинных шейдеров (который работает) имя файл shader.vert

#version 430 

in layout(location=0) vec2 position; 

void main() 
{ 
    gl_Position = vec4(position, 0.0, 1.0); 
} 

Код для моего пиксельного шейдера shader.frag

#version 430 

out vec4 finalColour; 

void main() 
{ 
    finalColour = vec4(0.0, 1.0, 0.0, 1.0); 
} 

Код, который связывает QGLShaderProgram mProgram

//Add Shaders 
if (!mProgram.addShaderFromSourceFile(QGLShader::Vertex, "shader.vert")) { 
    error_msg("Vertex shader load failed"); 
} 
if (!mProgram.addShaderFromSourceCode(QGLShader::Fragment, "testShader.frag")) { 
    error_msg("Fragment shader load failed"); 
} 
if (!mProgram.link()) { 
    error_msg("Cannot link shaders"); 
} 
mProgram.bind() 

ответ

1

Второй параметр o е addShaderFromSourceCode (, код)

вы должны обеспечить содержание файла не имя самого файла здесь вы можете поместить этот код в функцию и использовать его для загрузки файла

Read whole ASCII file into C++ std::string

+0

для второй параметр запрашивает имя файла, вы можете посмотреть спецификации, [QGLShaderProgram :: addShaderFromSourceFile] (http://doc.qt.io/qt-4.8/qglshaderprogram.html#addShaderFromSourceFile). Также shader.vert загружает штраф. фрагментарный шейдер - это не так. –

+0

вы загружаете вершинный шейдер из файла и фрагментарный шейдер из кода .. измените имя функции .. из addShaderFromSourceCode в addShaderFromSourceFile – mofed8461