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

OPENGL: How can I move alpha to red channel using blit

我正在尝试调试我的 gbuffer 帧缓冲区。我设法轻松地 blit 了 RGB 组件,但我想将 alpha 重新映射为红色或 rgb 以实现灰度,这样我也可以在不混合的情况下调试 alpha 组件。有没有办法做到这一点?提前致谢!

如果您只想按原样显示单个颜色通道,那么 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;
}

所以不是 blitting 帧缓冲区,而是使用帧缓冲区作为绑定纹理绘制全屏四边形。