基本上,我的程序使用帧缓冲区对象渲染到3D纹理。 如果我附加到fbo的3D纹理是GL_RGB8格式,即每个纹素24位,则没有问题。它们只使用了8位。 当我尝试使用GL_ALPHA8(每个纹素8位)作为3D纹理的内部格式时,会出现问题,渲染结果为空白。 我用来呈现给fbo的cg片段着色器看起来像这样:
void F_PureDecoder(
float3 vIndexCoord : TEXCOORD0,
out float color :COLOR)
{
... ...
color=float4(fL3,fL3,fL3,fL3);
}
我做错了什么或者fbo不支持渲染到8位纹理纹理?我主要不确定片段着色器的输出格式是否正确。因为帧缓冲是8位,但输出是24位。我应该从片段着色器修改输出格式吗?如果是这样,我应该使用什么格式?
非常感谢任何意见!
答案 0 :(得分:1)
要渲染到一个/两个组件纹理,必须使用GL_ARB_texture_rg扩展名,它不能与任何其他格式一起使用。请参阅extension specification了解其无效的原因:
It is also desirable to be able to render to one- and two- component format textures using capabilities such as framebuffer objects (FBO), but rendering to I/L/LA formats is under-specified (specifically how to map R/G/B/A values to I/L/A texture channels).
因此,请使用GL_R8 internalFormat。要写入它,只需写入完整的RGBA输出,但只写入R组件。