假设我的着色器程序包含一个顶点着色器和一个片段着色器。
我怎样才能将信息直接传递给碎片着色器?
当我使用 gl_uniform... 并指定我想在片段着色器中寻址的变量时,它会抛出这样的错误:
Using ShaderProgram: The fragment shader uses varying myVarHere, but previous
shader doesnot write to it.
由于我首先附加了顶点着色器,我发现我需要使用 in 和 out 来“通过”顶点着色器“传递信息”。
我不确定这是否是要走的路,所以我的问题是:有没有办法告诉opengl在某个着色器中处理变量,或者我在做/理解什么可怕的错误?
顶点着色器:
#version 130
precision highp float;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
in vec3 vertexData;
in vec3 normalData;
out vec3 normal;
void main(void)
{
normal = (model * view * vec4(normalData, 0)).xyz;
gl_Position = projection * model * view * vec4(vertexData, 1);
}
分段:
#version 130
precision highp float;
in vec3 light0; // <- this is what i want to fill with data
const vec3 ambient = vec3(0.0, 0.0, 0.0);
const vec3 lightColor = vec3(0.6, 0.0, 0.0);
in vec3 normal;
out vec4 out_frag_color;
void main(void)
{
float diffuse = clamp(dot(normalize(light0), normalize(normal)), 0.5, 1.0);
out_frag_color = vec4(ambient + diffuse * lightColor, 1.0);
}