Opengl GSL glUniform4fv颜色不起作用

时间:2014-03-28 16:28:22

标签: c++ opengl shader gsl

我试图做一个简单的3D引擎,但是我扯掉头发徘徊为什么我不能改变一点3d线的颜色。以下工作但始终呈现白色。我想把它画成绿色:

...
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以及我不理解的答案。他的意思是多个着色器?我只是使用一个着色器。

1 个答案:

答案 0 :(得分:2)

您应该使用glUniformMatrix4fv时使用glUniform4fv(因为colorvec4,而不是mat4)。

如果有疑问,请在有疑问时始终检查glGetError()状态。更好的是,使用KHR_debug扩展名。

并且在之前不要假设驱动程序中的错误,而不是检查代码中的所有内容:-)。这是非常罕见的情况。