在片段着色器中仅更改一个颜色通道

Change only one color channel in fragment shader

我想知道如何只更改一个颜色通道并使其他 2 个颜色通道保持其初始值。

#version 410
layout(location = 0) out vec3 color_out;
precision highp float;


void main()
{
        float z = 0.3f;
        color_out = vec3(z, my actual value , my actual value)
}

如何检索实际值或仅更改一个通道(红色通道)?

我试过这个绘图代码

glColorMask(true,true ,true, true);
glDrawArrays(GL_TRIANGLES, 0, totalconnectedtriangles_);
glColorMask(true,false,false,false);

此解决方案有效,但当我移动 window 时会产生非常奇怪的伪像。片段着色器是在 glDrawArrays 之后(在我的第二个颜色蒙版之后)还是在 glDrawArrays 期间发生?

glColorMask 允许您 select 每个频道为您的片段更新什么。所以你可以决定只更新 R glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE);