GLSL - 统一误差

GLSL - Uniform error

我在 #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 结果是空屏幕。

很简单。如果我使用其中之一(不管是为了什么)它是空的。

有人帮忙吗?

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