【问题标题】:OpenGLES 2.0 wrong depth buffer bitsOpenGLES 2.0 错误的深度缓冲区位
【发布时间】:2017-02-07 23:52:15
【问题描述】:

我下载了这个 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设备。

【问题讨论】:

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


    【解决方案1】:

    spec 说:

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

    所以基本上,OpenGLES 可以选择与请求不同的位深度。

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

    【讨论】:

    • 感谢 OpenGLES 链接规范,我完全忘记了。
    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多