【问题标题】:depth buffer not working with GLFW深度缓冲区不适用于 GLFW
【发布时间】:2017-12-01 06:15:01
【问题描述】:

我有提示:

glfwWindowHint(GLFW_DEPTH_BITS, GL_TRUE);

然后我有:

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);

在画画的时候我有

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

但结果显然没有使用深度缓冲区...

我觉得

glfwWindowHint(GLFW_DEPTH_BITS, GL_TRUE);

可能不正确?


我正在使用 GLFW 3、OpenGL 4.1、macOS El Capitan 10.11.6

【问题讨论】:

    标签: opengl glfw


    【解决方案1】:

    根据 GLFW 指南 [1],GLFW_DEPTH_BITS 不能用于启用或禁用深度测试,而是以位为单位设置深度缓冲区的大小。

    glfwWindowHint(GLFW_DEPTH_BITS, GL_TRUE); 所做的是将深度缓冲区大小设置为 1 位,因为 GL_TRUE 被定义为 1。 OpenGL 实现可能甚至不支持 1 位的深度缓冲区大小,您可以使用 glGetError [2] 进行检查。

    在 Windows 上,您通常根本不需要设置深度缓冲区格式,它只适用于 GLFW。但是,我记得在 iOS 上配置帧缓冲区是必要的。所以,只需删除行 glfwWindowHint(GLFW_DEPTH_BITS, GL_TRUE); 看看会发生什么。

    [1]http://www.glfw.org/docs/latest/window_guide.html

    [2]https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glGetError.xml

    【讨论】:

    • 是的,该提示是最近添加的,因此删除它仍然无法使其正常工作...不过,我可能会尝试将其更改为 1 以外的其他数字
    • 好的,我将 GL_TRUE 更改为 81632 然后 64 仍然无法正常工作
    • 默认值为24。如果它不适用于该值,则可能存在其他问题。
    • :( 你也不能使用 24,可能只是制作我自己的深度缓冲区而忘记这个麻烦
    • 您是否在某处明确设置了帧缓冲区深度附件的格式 (GL_DEPTH_ATTACHMENT)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多