2013-04-10 112 views
0

我目前正在嘗試Qt 5中的一些opengl組件,我正在使用QtCreator 2.6.2編譯Mac OSX 10.8中,編輯4.2 我寫了一個非常基本的GLSL着色器在OpenGl Shader Builder中編譯和鏈接良好,但是當我嘗試使用QGLShader加載它時,它無法編譯,並且日誌函數不返回任何錯誤消息。使用QGLShaderProgram時GLSL編譯錯誤

頂點着色器:

attribute vec4 in_position; 
attribute vec3 in_normal; 
attribute vec3 in_color; 
attribute vec2 in_tex; 

uniform vec4 lightPosition; 

varying vec2 texCoords; 
varying vec3 normal; 
varying vec3 vertToLightDir; 

void main(void) 
{ 
    gl_Position = gl_ModelViewProjectionMatrix * in_position; 
    vec4 worldVert = gl_ModelViewMatrix * in_position; 
    vertToLightDir = normalize(vec3(lightPosition - worldVert)); 
    normal = gl_NormalMatrix * in_normal; 
    texCoords = in_tex; 
} 

片段着色器:

uniform sampler2D texture0; 
uniform vec4 lightColor; 

varying vec2 texCoords; 
varying vec3 normal; 
varying vec3 vertToLightDir; 

void main(void) 
{ 
    float lightIntensity = clamp(dot(normal, vertToLightDir), 0.0, 1.0); 
    gl_FragColor = (texture2D(texture0, texCoords) + (lightColor * lightIntensity)) * 0.5; 
} 

加載着色器代碼:

QGLShader fragShader(QGLShader::Fragment); 
bool success = fragShader.compileSourceFile("Fragment.glsl"); 
qDebug() << fragShader.log(); 

我用調試器看到compileSourceFile函數返回false ,我還使用access(「Fragment.glsl」,F_OK)來查看程序是否設法找到該文件它的確如此,頂點着色器文件也是這樣,我似乎無法找到它們不會編譯的原因。有什麼我做錯了嗎?

+0

你的'#版本'指令在哪裏? – genpfault 2013-04-10 19:17:17

+0

@genpfault自從我上次寫了着色器以來,我一直都不知道#version指令,但是添加#version 140並不會改變任何內容 – 2013-04-10 19:25:11

回答

1

經過一些調試後,我意識到我正在嘗試在創建有效上下文之前編譯着色器。我的錯。