目前我有一个简单的片段着色器,它返回一种颜色(红色)。如果我想用C代码改变它不同的RGBA颜色,我应该怎么做呢?
是否可以直接从C更改片段着色器中的属性,还是应该更改顶点着色器中的纯色属性,然后将该颜色传递给片段着色器?我正在画单个纯色矩形 - 没什么特别的。
void main()
{
gl_FragColor = vec4( 1.0, 0, 0, 1 );"
}
答案 0 :(得分:2)
如果您正在谈论在运行时生成着色器,那么您可以使用c字符串格式化函数将颜色插入“gl_FragColor ...”行
我不建议你这样做,因为这将是不必要的工作。这样做的标准方法是使用制服:
// fragment shader:
uniform vec3 my_color; // A UNIFORM
void main()
{
gl_FragColor.rgb = my_color;
gl_FragColor.a = 1; // the alpha component
}
// your rendering code:
glUseProgram(SHADER_ID);
....
GLint color_location = glGetUniformLocation(SHADER_ID, "my_color");
float color[3] = {r, g, b};
glUniform3fv(color_location, 1, color);
....
glDrawArrays(....);