小编JWk*_*Wki的帖子

OpenGL:Radeon驱动程序似乎搞乱了深度测试

我在这里遇到了一个非常奇怪的深度测试问题.我在Windows上的OpenGL 3.3核心配置文件上下文中渲染一个简单的网格,启用深度测试并将glDepthFunc设置为GL_LESS.在我的机器上(配备nVidia Geforce GTX 660M的笔记本电脑),一切都按预期工作,深度测试正在运行,这就是它的样子:

在此输入图像描述

现在,如果我在不同的PC上运行程序,一个带有Radeon R9 280的塔,它看起来更像是这样的:

在此输入图像描述

奇怪的是,真正奇怪的是,当我在绘制之前每帧调用glEnable(GL_DEPTH_TEST)时,结果在两台机器上都是正确的.当我这样做时,我认为在两台机器上都正确创建了深度缓冲区,看起来深度测试在渲染之前以某种方式被禁用,当我在初始化时只启用它一次.以下是可能以某种方式成为问题一部分的最小代码:

在创建上下文并使其成为当前之后,在初始化时调用代码:

glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
Run Code Online (Sandbox Code Playgroud)

代码在缓冲区交换之前调用每个帧:

glClearColor(0.4f, 0.6f, 0.8f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// mShaderProgram->getID() simply returns the handle of a simple shader program
glUseProgram(mShaderProgram->getID());  

glm::vec3 myColor = glm::vec3(0.7f, 0.5f, 0.4f);
GLuint colorLocation = glGetUniformLocation(mShaderProgram->getID(), "uColor");
glUniform3fv(colorLocation, 1, glm::value_ptr(myColor));

glm::mat4 modelMatrix = glm::mat4(1.0f);
glm::mat4 viewMatrix = glm::lookAt(glm::vec3(0.0f, 3.0f, 5.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
glm::mat4 projectionMatrix = glm::perspectiveFov(60.0f, (float)mWindow->getProperties().width, (float)mWindow->getProperties().height, 1.0f, 100.0f);
glm::mat4 inverseTransposeMVMatrix = glm::inverseTranspose(viewMatrix*modelMatrix);

GLuint mMatrixLocation = glGetUniformLocation(mShaderProgram->getID(), "uModelMatrix"); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl nvidia opengl-3 depth-testing

4
推荐指数
1
解决办法
393
查看次数

标签 统计

c++ ×1

depth-testing ×1

nvidia ×1

opengl ×1

opengl-3 ×1