OpenGL / SDL2:模板缓冲区位在 PC 上始终为 0

Posted

技术标签:

【中文标题】OpenGL / SDL2:模板缓冲区位在 PC 上始终为 0【英文标题】:OpenGL / SDL2 : stencil buffer bits always 0 on PC 【发布时间】:2015-08-16 12:53:00 【问题描述】:

我正在使用 SDL2 / OpenGL 编写应用程序,并进行一些模板操作。

在 Mac 上一切正常,但在 PC 上,模板无法正常工作。

经过仔细检查,我意识到以下代码在我的 Mac 和 PC 上提供了不同的结果:

SDL_Init(SDL_INIT_VIDEO);

SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);

SDL_CreateWindow( ... );

SDL_CreateRenderer( ... )

...做事...

当我在 Mac 上打印出模板位 (SDL_GL_STENCIL_SIZE) 时,我得到 8。当我在 PC 上执行相同操作时,我得到 0。

无论我是在实际 PC 上还是在 Mac 上的 PC 模拟器上运行它,都会发生同样的情况。

我错过了什么?如何强制 SDL2 使用模板缓冲区请求上下文?

在我看来,Mac 的 OpenGL 实现与 PC 的默认值不同,所以我可能忘记做某事来专门请求模板缓冲区,但我在网上找不到任何好的信息......

帮助^_^' ?

【问题讨论】:

所以即使opengl可用并且我在创建窗口时使用了SDL_WINDOW_OPENGL,PC上的SDL2也默认为direct3d。是否有其他方法可以强制 SDL 使用 OpenGL? 【参考方案1】:

没关系,我找到了答案:

在 PC 上,SDL2 默认为 Direct3D(我想这可以解释为什么我的 opengl 模板缓冲区不存在 ^_^')。

要强制 SDL2 使用特定的驱动程序,可以使用 SDL_CreateRenderer 中的第二个参数。

问题解决了:D

***,最大的橡皮鸭... ^-^'

【讨论】:

以上是关于OpenGL / SDL2:模板缓冲区位在 PC 上始终为 0的主要内容,如果未能解决你的问题,请参考以下文章

模板缓冲区似乎无法正常工作

Android NDK SDL2 OpenGL ES 2 阴影映射(定向)- 可能吗?

OpenGL中的乱序Z缓冲区

OpenGL:清除模板缓冲区,除了某些位?

将模板渲染缓冲区绑定到opengl中的帧缓冲区

opengl 模板缓冲区 - 不太好用