因此,在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。我读得对吗?
答案 0 :(得分:1)
OpenGL ES 2.0不支持深度纹理。它们是在ES 3.0中引入的。除了参考文档之外,您还可以在press release(强调添加)中看到这一点:
极大增强的纹理功能,包括保证支持浮点纹理,3D纹理,深度纹理,顶点纹理,NPOT纹理,R / RG纹理,不可变纹理,2D阵列纹理,调配,LOD和mip级别夹具,无缝立方体贴图和采样器对象
要在ES 2.0中使用深度纹理,您的设备需要支持您已找到的OES_depth_texture扩展程序。