OpenGL 片段着色器 - 更改固定颜色
OpenGL Fragment Shaders - Changing a fixed color
目前我有简单的片段着色器,returns 一种颜色(红色)。如果我想将它更改为不同于 C 代码的 RGBA 颜色,我应该怎么做?
是否可以直接从 C 更改片段着色器中的属性,或者我应该更改顶点着色器中的纯色属性,然后将该颜色传递给片段着色器?我正在绘制单一的纯色矩形 - 没什么特别的。
void main()
{
gl_FragColor = vec4( 1.0, 0, 0, 1 );"
}
如果您正在谈论在运行时生成着色器,那么您可以使用 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(....);
目前我有简单的片段着色器,returns 一种颜色(红色)。如果我想将它更改为不同于 C 代码的 RGBA 颜色,我应该怎么做?
是否可以直接从 C 更改片段着色器中的属性,或者我应该更改顶点着色器中的纯色属性,然后将该颜色传递给片段着色器?我正在绘制单一的纯色矩形 - 没什么特别的。
void main()
{
gl_FragColor = vec4( 1.0, 0, 0, 1 );"
}
如果您正在谈论在运行时生成着色器,那么您可以使用 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(....);