現在我正在寫一個基本的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