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 3.0

哪些 OpenGL ES 2.0 纹理格式可进行颜色、深度或模板渲染?

OpenGL 中的反射和深度

在 OpenGL ES 中为帧缓冲区使用深度和模板渲染缓冲区附件

◮OpenGL-模板测试