2014-03-28 371 views
1

我正在嘗試做一個簡單的3D引擎,但我把我的頭髮徘徊,爲什麼我不能改變一個小3d線的顏色。以下的作品,但總是呈現白色。我試圖讓它吸取綠色:Opengl GSL glUniform4fv顏色無法正常工作

... 
float color[4] = { 0.5f, 1.0f, 0.0f, 1.0f }; 
glUseProgram(shader.id); 
//I ommitted the model matrix and stuff because it works fine 
glUniformMatrix4fv(glGetUniformLocation(shader.id, "color"), 1, GL_FALSE, color); 

glBegin(GL_LINES); 
    glVertex3f(x, y, z); 
    glVertex3f(x, y+10, z); 
glEnd(); 
... 

頂點着色器:

#version 330 

in vec3 vertexPosition_modelspace; 
uniform mat4 mvp; 

void main(){ 
    vec4 v = vec4(vertexPosition_modelspace,1); 
    gl_Position = mvp*v; 
} 

片段着色器:

#version 330 

uniform vec4 color = vec4(1.0,1.0,1.0,1.0); 
out vec4 frag; 

void main(){ 
     frag = color; 
} 

我看了一些文件說,有時制服得到優化,成爲無形但事實並非如此,因爲我使用統一的顏色來選擇像素的顏色。 glGetUniform的返回值也是(0),它是有效的,因此它存在。那爲什麼它搞砸了?我的司機死了嗎?

唯一的其他相關或類似的問題是從GLSL Shader will not render color from uniform variable和我不明白的答案。他是指多個着色器?我只使用一個着色器。

回答

2

您使用glUniformMatrix4fv時,你應該使用glUniform4fv(因爲colorvec4,不mat4)。

給出的,總是檢查glGetError()狀態時有疑問。更好的是,使用KHR_debug擴展名。

並且不要假設驅動程序之前的錯誤比檢查代碼中的所有內容:-)。這是極其罕見的情況。

+0

上帝全能。我很愚蠢,甚至沒有看到「矩陣」關鍵字的區別。謝謝一堆。 – user3473422