Opengl ES 2.0:为什么RenderBufferStorage采用与TexImage2D不同的internalFormat

时间:2016-12-10 08:08:01

标签: c++ opengl-es

因此,在Opengl ES 2.0中,Renderbuffers或Textures都可以用作Framebuffer附件。但是,如果我希望深度附件是纹理,那么文档让我对要指定的内部格式感到困惑。

以下是glCheckFramebufferStatus文档的片段:

  

颜色可渲染格式包括GL_RGBA4,GL_RGB5_A1和GL_RGB565。 GL_DEPTH_COMPONENT16是唯一可深度渲染的格式。

现在,如果我检查glRenderBufferStorage,它会列出以下内部格式:

  

指定渲染缓冲区的颜色可渲染,深度渲染或模板可渲染格式。必须是以下符号常量之一:GL_RGBA4,GL_RGB565,GL_RGB5_A1,GL_DEPTH_COMPONENT16或GL_STENCIL_INDEX8。

其中一些很好地符合Framebuffer附件所需的格式。但是,如果我检查TexImage2D格式完全不同。 InternalFormat:

  

指定纹理的内部格式。必须是以下符号常量之一:GL_ALPHA,GL_LUMINANCE,GL_LUMINANCE_ALPHA,GL_RGB,GL_RGBA

和texel组件的类型:

  

指定纹素数据的数据类型。接受以下符号值:GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4和GL_UNSIGNED_SHORT_5_5_5_1

因此不清楚要传递给TexImage2D以创建适合Framebuffer深度附件的纹理。根据glCheckFramebufferStatus文档,我必须使用RenderBuffer。我读得对吗?

1 个答案:

答案 0 :(得分:1)

OpenGL ES 2.0不支持深度纹理。它们是在ES 3.0中引入的。除了参考文档之外,您还可以在press release(强调添加)中看到这一点:

  

极大增强的纹理功能,包括保证支持浮点纹理,3D纹理,深度纹理,顶点纹理,NPOT纹理,R / RG纹理,不可变纹理,2D阵列纹理,调配,LOD和mip级别夹具,无缝立方体贴图和采样器对象

要在ES 2.0中使用深度纹理,您的设备需要支持您已找到的OES_depth_texture扩展程序。