OSX OpenGL 深度模板组合
Posted
技术标签:
【中文标题】OSX OpenGL 深度模板组合【英文标题】:OSX OpenGL depth stencil combination 【发布时间】:2016-08-07 01:11:13 【问题描述】:我正在尝试使用 OpenGL 3.2 SDL 上下文在 OSX 10.11.5 上创建具有 GL_DEPTH_STENCIL_ATTACHMENT TEXTURE 的帧缓冲区。似乎以下行创建了 OpenGL 错误 1280:
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, depthTexture, 0);
这个纹理生成如下:
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH32F_STENCIL8, width, height, 0, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, 0);
我知道这是一个 OSX 问题,因为这段代码曾经在我的旧 Arch Linux 计算机上完美运行。我确实阅读了官方的tutorial,并没有提到组合深度和模板纹理附件。那么是不支持此功能还是我做错了?如果不支持此功能,那么我应该怎么做?创建 2 个单独的深度和模板纹理?
【问题讨论】:
【参考方案1】:从不为此感到抱歉,但事实证明我调试错了。 OSX 确实支持模板/深度混合,即使 Apple 的文档没有太多关于它的信息。我的错误实际上来自下一行,如下:
glDrawBuffers(textureCount, allColorBuffers);
这是错误的,因为 texCount 包括深度纹理以及我所有的颜色缓冲区。所以将 textureCount 改为 textureCount-1 就完全解决了这个问题。
【讨论】:
好奇,你是用 xcode 来构建你的 opengl 软件吗?以上是关于OSX OpenGL 深度模板组合的主要内容,如果未能解决你的问题,请参考以下文章
OpenGL如何在模板测试失败且深度测试成功时写入模板缓冲区?
哪些 OpenGL ES 2.0 纹理格式可进行颜色、深度或模板渲染?