我有一个奇怪的问题,我的程序只会在第二次运行后正确绘制我的OpenGL图形。据我所知,这与Windows缓存的数据有关。
我第一次运行程序(等待或更改网格的形状后),屏幕上没有任何内容显示。然而,在第二次运行后,我的体素(使用PolyVox)正确显示。这是在多线程游戏结构中运行的,尽管据我所知,这对这个问题没有任何影响。有没有人有解决这样的问题的经验?下面的代码是否正确用于绘制此类网格? (这是在渲染循环中。它取自PolyVox教程,虽然该教程已经过时了。我正在尝试使用OpenGL 3+。还只有1个块大气压。)
如果我能够将程序“bugged”状态中的所有变量值与其工作状态中的所有变量值进行比较,我认为我可能能够隔离问题。有没有办法让我在调试期间转储程序中所有变量的值,以便我可以将两个转储与winmerge进行比较?
_gs->_mainCamera.lock();
glUniformMatrix4fv(_viewMatrixLoc, 1, GL_FALSE, _gs->_mainCamera.getViewMatrixPtr());
glUniformMatrix4fv(_projMatrixLoc, 1, GL_FALSE, _gs->_mainCamera.getProjMatrixPtr());
_gs->_mainCamera.unlock();
for(std::vector<Chunk*>::size_type i = 0; i != _gs->_chunkList.size(); ++i){
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _gs->_chunkList[i]->_indexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _gs->_chunkList[i]->_vertexBuffer);
//glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(PolyVox::PositionMaterialNormal), 0);
glVertexPointer(3, GL_FLOAT, sizeof(PolyVox::PositionMaterialNormal), 0);
glNormalPointer(GL_FLOAT, sizeof(PolyVox::PositionMaterialNormal), (GLvoid*)12);
glDrawRangeElements(GL_TRIANGLES, _gs->_chunkList[i]->_meshBeginIndex, _gs->_chunkList[i]->_meshEndIndex-1, _gs->_chunkList[i]->_meshEndIndex-1 - _gs->_chunkList[i]->_meshBeginIndex, GL_UNSIGNED_INT, 0);
}