Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Opengl ES 2.0:为什么RenderBufferStorage采用与TexImage2D不同的内部格式_C++_Opengl Es - Fatal编程技术网

C++ Opengl ES 2.0:为什么RenderBufferStorage采用与TexImage2D不同的内部格式

C++ Opengl ES 2.0:为什么RenderBufferStorage采用与TexImage2D不同的内部格式,c++,opengl-es,C++,Opengl Es,因此,在Opengl ES 2.0中,渲染缓冲区或纹理都可以用作帧缓冲区附件。然而,如果我希望深度附件是一个纹理,文档让我对指定什么内部格式感到困惑 以下是glCheckFramebufferStatus的文档片段: 颜色可渲染格式包括GL_RGBA4、GL_RGB5_A1和GL_RGB565。GL_DEPTH_COMPONENT16是唯一的深度渲染格式 现在,如果我选中glRenderBufferStorage,它将列出以下内部格式: 指定renderbuffer的颜色可渲染、深度可渲染或模具

因此,在Opengl ES 2.0中,渲染缓冲区或纹理都可以用作帧缓冲区附件。然而,如果我希望深度附件是一个纹理,文档让我对指定什么内部格式感到困惑

以下是glCheckFramebufferStatus的文档片段:

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

现在,如果我选中glRenderBufferStorage,它将列出以下内部格式:

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

很好,其中一些匹配帧缓冲区附件所需的格式。但是,如果我选中TexImage2D,则格式完全不同。 内部格式:

指定纹理的内部格式。必须是以下符号常量之一:GL_ALPHA、GL_亮度、GL_亮度、GL_ALPHA、GL_RGB、GL_RGBA

以及texel组件的类型:

指定texel数据的数据类型。接受以下符号值:GL_无符号_字节、GL_无符号_短_5_6_5、GL_无符号_短_4_4_4和GL_无符号_短_5_5_1


因此,不清楚如何传递到TexImage2D以创建适合帧缓冲区深度附件的纹理。根据glCheckFramebufferStatus文档,我必须使用RenderBuffer。我读对了吗?

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

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


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

嗯,看来我可能读对了。opengl ES 2.0中有一个使用深度纹理的扩展。因此,在没有该扩展的情况下,似乎无法使用纹理作为帧缓冲区深度附件。