GLSL - 统一错误

时间:2015-02-04 00:37:03

标签: opengl glsl

我在#version 150写了着色器。我有制服的问题。如果我使用任何轻型制服(vec4),我的场景就会消失。

设置制服的提取:

typedef struct { float x, y, z, w; } vec4;
//...
class MyClass {
    GLuint _id;
    vec4 light_diffuse;
};
//...
void MyClass::setUniforms {
    //...
    GLint location = glGetUniformLocation(_id, "in_light_diffuse");
    //...
    glUseProgram(_id);
    //...
    glUniform4fv(location, 1, (const GLfloat *)&light_diffuse);
    //...
}

这项工作:

#version 150

in vec4 in_vertex;
in vec3 in_normal;
in vec4 in_color;

uniform mat4 in_mvp_matrix;

uniform vec4 in_light_position;
uniform vec4 in_light_ambient;
uniform vec4 in_light_diffuse;
uniform vec4 in_light_specular;

out vec4 v_color;

void main() {
    //vec4 a = in_light_position + in_light_ambient + in_light_diffuse + in_light_specular;
    v_color = in_color;
    gl_Position = in_mvp_matrix * in_vertex;
}

工作:

#version 150

in vec4 in_vertex;
in vec3 in_normal;
in vec4 in_color;

uniform mat4 in_mvp_matrix;

uniform vec4 in_light_position;
uniform vec4 in_light_ambient;
uniform vec4 in_light_diffuse;
uniform vec4 in_light_specular;

out vec4 v_color;

void main() {
    vec4 a = in_light_position + in_light_ambient + in_light_diffuse + in_light_specular;
    v_color = in_color;
    gl_Position = in_mvp_matrix * in_vertex;
}

在第一种情况下,我可以看到彩色物体,但在第二种情况下,一切都消失了。我甚至不使用这些制服进行计算out_flag_color,结果是空屏幕。

这很简单。如果我使用其中一个(无论什么),它就是空的。

有人帮忙吗?

1 个答案:

答案 0 :(得分:0)

解决。我将vec4设置为uniform mat4位置。