我有提示:
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
答案 0 :(得分:1)
根据GLFW指南[1],GLFW_DEPTH_BITS
不能用于启用或禁用深度测试,而是用于设置深度缓冲区的大小。
glfwWindowHint(GLFW_DEPTH_BITS, GL_TRUE);
的作用是,它将深度缓冲区大小设置为1位,因为GL_TRUE
定义为1
。 OpenGL实现甚至可能不支持1位深度缓冲区大小,您可以使用glGetError
[2]进行检查。
在Windows上,您通常不必设置深度缓冲区格式,它只是开箱即用的GLFW。但是,我记得在iOS上配置framebuffer是必要的。因此,只需删除行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