我正在 OpenGL 中实现深度预通。在 Intel HD Graphics 5500 上,此代码可以正常工作,但在 Nvidia GeForce GTX 980 上却不行(下图显示了由此产生的 z-fighting)。我正在使用以下代码生成图像。(与问题无关的所有内容都被省略了。)
// ----------------------------------------------------------------------------
// Depth Prepass
// ----------------------------------------------------------------------------
glEnable(GL_DEPTH_TEST);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glDepthFunc(GL_LESS);
glDepthMask(GL_TRUE);
glUseProgam(program1); // The problem turned out to be here!
renderModel(...);
// ----------------------------------------------------------------------------
// Scene Rendering
// ----------------------------------------------------------------------------
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glDepthMask(GL_FALSE);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glUseProgam(program2); // The problem turned out to be here!
renderModel(...);
似乎 glDepthFunc 没有更改为GL_LEQUAL
. 但是,当我单步执行 RenderDoc 中的 GL 调用时,glDepthFunc
设置正确。
这听起来像驱动程序错误还是您有建议我可能做错了什么?当这是一个驱动程序错误时,我该如何实现深度预通?