У меня странная проблема, когда моя программа будет правильно рисовать мою графику OpenGL только после второго запуска. Насколько я понимаю, это как-то связано с кэшированием данных Windows.
При первом запуске программы (после ожидания или изменения формы сетки) на экране ничего не отображается. Однако после второго запуска мои вокселы (используя PolyVox) отображаются правильно. Это работает внутри многопоточной игровой структуры, хотя, насколько я могу судить, это никак не влияет на эту проблему. У кого-нибудь есть опыт решения такой проблемы? Правильный ли приведенный ниже код для рисования таких сеток? (Это внутри цикла рендеринга. Оно взято из руководства PolyVox, хотя это руководство уже устарело. Я пытаюсь работать в OpenGL 3+. Также есть только 1 блок атм).
Я думаю, что смогу изолировать проблему, если бы смог сравнить все значения переменных в состоянии «ошибки» моих программ со всеми значениями переменных в рабочем состоянии. Есть ли способ для меня сбросить значения всех переменных в моей программе во время отладки, чтобы я мог сравнить два дампа с чем-то вроде 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);
}
Задача ещё не решена.
Других решений пока нет …