OPENGL:如何使用blit将alpha移动到红色通道

时间:2017-03-07 22:46:12

标签: opengl graphics alpha framebuffer blit

我试图调试我的gbuffer帧缓冲区。我设法轻松地对RGB组件进行blit,但我想将alpha重新映射为红色或rgb为灰度,以便我可以调试alpha组件而不进行混合。有没有办法做到这一点?提前谢谢!

1 个答案:

答案 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,你可以使用帧缓冲区作为绑定纹理绘制全屏四边形。