将帧缓冲区对象附加到具有8位内部格式的3D纹理是否正确

时间:2010-09-10 19:50:10

标签: opengl cg

基本上,我的程序使用帧缓冲区对象渲染到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位。我应该从片段着色器修改输出格式吗?如果是这样,我应该使用什么格式?

非常感谢任何意见!

1 个答案:

答案 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组件。