现在我正在写一个基本的OpenGL封装使用Visual Studio 2015,我遇到了这种非常奇怪的现象,当我构建和运行调试时,我的立方体未呈现模式。然而,在发布模式下,一切看起来都很完美。OpenGL呈现在发布模式,但不是调试模式
值得注意的是,程序在调试模式下执行运行,并且它清除了我设置的绿色的屏幕。所以看起来OpenGL在某种程度上正在工作。问题是它不像渲染模式那样渲染我的立方体网格。我已经通过调试确认我的资源(着色器和图像文件)在调试模式下正确加载,所以看起来不是问题。
代码明智的,以下是该计划的有趣的部分:
在Main.cpp:
renderer.Clear(0.2f, 0.3f, 0.3f, 1.0f);
for(GLuint i = 0; i < 10; ++i) {
renderer.PushMatrix();
renderer.Translate(cubePositions[i].x, cubePositions[i].y, cubePositions[i].z);
renderer.Rotate(20.0f * i, glm::vec3(1.0f, 0.3f, 0.5f));
renderer.Render(cube);
renderer.PopMatrix();
}
window.SwapBuffers();
void Renderer::updateMVP() const {
glm::mat4 _proj = camera.GetProjectionMatrix();
glm::mat4 _view = camera.GetViewMatrix();
glm::mat4 _model = model.top();
glUniformMatrix4fv(glGetUniformLocation(shader.GetProgram(), "projection"), 1, GL_FALSE, glm::value_ptr(_proj));
glUniformMatrix4fv(glGetUniformLocation(shader.GetProgram(), "view"), 1, GL_FALSE, glm::value_ptr(_view));
glUniformMatrix4fv(glGetUniformLocation(shader.GetProgram(), "model"), 1, GL_FALSE, glm::value_ptr(_model));
}
void Renderer::Clear(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) const {
glClearColor(red, green, blue, alpha);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void Renderer::Render(const Mesh& mesh) const {
shader.Use();
updateMVP();
mesh.Render(this->shader);
}
在Mesh.cpp:
void Mesh::Render(const Shader& shader) const {
assert(this->VAO);
for (GLuint i = 0; i < this->textures.size(); ++i) {
shader.BindTexture(this->textures[i], i);
}
glBindVertexArray(this->VAO);
glDrawElements(GL_TRIANGLES, this->indices.size(), GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
for (GLuint i = 0; i < this->textures.size(); ++i) {
shader.UnbindTexture(i);
}
}
我也是用的只有头库:GLM
在构建静态库,我保证他们都使用Visual建Studio的v140平台工具集。我在Debug和Release中都构建了每个静态库。 Debug版本全部使用/ MDd CRT构建,Release版本使用/ MD CRT构建。
我所有的代码和项目配置文件都是开源的位置:Github
任何帮助,不胜感激!谢谢。
编辑在一张[MCVE]。 – genpfault