我试图调试我的gbuffer帧缓冲区。我设法轻松地对RGB组件进行blit,但我想将alpha重新映射为红色或rgb为灰度,以便我可以调试alpha组件而不进行混合。有没有办法做到这一点?提前谢谢!
答案 0 :(得分:1)
如果您只想按原样显示单个颜色通道,那么glColorMask
就足够了。
假设你只想显示红色频道,你可以这样做:
glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE);
如果您想切换2个颜色通道或应用灰度效果,那么通过着色器运行它可能是最简单的方法:
uniform sampler2D frame;
in vec2 uv;
out vec4 fragColor;
void main()
{
vec4 color = texture(frame, uv);
// Grayscale
color.rgb = vec3((color.r + color.g + color.b) * 0.33);
// Switch red and alpha channels
color.ra = color.ar;
fragColor = color;
}
因此,对于帧缓冲区进行blread,你可以使用帧缓冲区作为绑定纹理绘制全屏四边形。