OpenGLES 2.0错误的深度缓冲位

时间:2017-02-07 23:52:16

标签: ios opengl-es-2.0 depth-buffer bit-depth

我下载了这个Apple示例代码GLEssentials sample code。我想用深度缓冲区进行一些实验,所以一开始我决定检查BUFFER_BITS。

我在 -initWithDefaultFBO 方法中向OpenGLRenderer.m添加了下一个代码:

// code from sample
NSLog(@"%s %s\n", glGetString(GL_RENDERER), glGetString(GL_VERSION));

// buffer bits check
GLint depthBits;
glGetIntegerv(GL_DEPTH_BITS, &depthBits);
printf("depthBits: %d\n", depthBits);

我有下一个输出:

 GLEssentials[3630:112826] Apple Software Renderer OpenGL ES 2.0 APPLE-12.4.2 
 depthBits: 24

但在ES2Renderer.m中,我看到下一行:

// using 16-bit depth buffer
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, backingWidth, backingHeight);

为什么会这样?是bug吗?

PS:我只在iOS模拟器中测试过,因为我没有ios设备。

1 个答案:

答案 0 :(得分:1)

spec说:

  

OpenGL ES实现可以根据任何RenderbufferStorage参数(目标除外)改变其内部组件分辨率的分配,但分配和选择的内部格式不能是任何其他状态的函数,并且一旦建立就不能更改。可以使用GetRenderbufferParameteriv查询分配的图像的每个组件的实际分辨率。

基本上,允许OpenGLES根据请求选择不同的位深度。

我怀疑在设备上,会使用一个实际的16位深度缓冲区。