具有单通道纹理附件的帧缓冲区对象? (颜色附件)

Framebuffer objects with single channel texture attachment? (Color attachment)

我希望片段着色器输出单个字节值。渲染到附加到帧缓冲区对象的单通道纹理。我只使用过默认的片段着色器来输出一个 vec4 颜色。这可能吗?如果我像这样将绑定到 fbo 的纹理初始化为颜色附件:

glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, NULL);

如果是这样,我会更改片段着色器输出变量吗:

输出 vec4 颜色

至:

输出颜色?

(我正在尝试渲染高度图)

好吧,您的渲染目标不是整数纹理;它是一种规范化的整数格式,算作一个浮点数。因此,着色器的相应输出变量应该是 floating-point 类型。

但如果您愿意,可以使用 vec4;任何不属于渲染目标的组件都将被丢弃。