2017-02-07 77 views
0

我下载了这个苹果示例代码GLEssentials sample code。我想用深度缓冲区执行一些实验,所以起初我决定检查BUFFER_BITS。OpenGLES 2.0错误的深度缓冲位

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

// 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); 

它为什么发生?它是错误吗?

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

回答

1

spec说:

一个OpenGL ES实现可以变化基于任何RenderbufferStorage参数(除了目标)内部分量分解的其分配,但分配和选择的内部格式不能是的任何一个功能其他国家,一旦建立就不能改变。可以使用GetRenderbufferParameteriv来查询已分配映像的每个组件的实际分辨率。

所以基本上,OpenGLES被允许选择不同于要求的位深度。

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

+0

感谢OpenGLES链接规范,我完全忘了它。 – frankWhite