Извините, я никогда не использовал OpenGL, и я действительно понятия не имел, что я делаю, но я нашел решение (и сейчас работаю над этим!).Также спасибо, Джек, за ответ!Я определенно использую массивы вершин сейчас, я обнаружил, что glBegin () и glEnd () устарели.Я мог бы даже попробовать объекты буфера вершин.
Проблема была в том, что каждый Renderable
вызывал glBegin () и glEnd (), когда RenderManager
вызывает render () для каждого Renderable
каждого цикла.Это вызывает большую нагрузку на GPU.
На момент написания этого ответа у меня в RenderManager
было sendVertices(GLfloat vertices[]);
, которое добавляет все вершины к std::vector<GLfloat>
.Во время цикла для RenderManager
я создаю указатель на вершину
glVertexPointer(2, GL_FLOAT, 0, &vertices[0]);
, затем вызываю
glDrawArrays(GL_QUADS, 0, vertices.size() / 2);
Таким образом, вместо рендеринга для каждогоОбъект, который визуализирует все сразу на основе вершин.Теперь я начинаю видеть замедление на 800+ объектах.Хотя и не очень, но мне еще предстоит много работы.Потому что сейчас вектор vertices
воссоздает каждый цикл, а не модифицируется.Кроме того, это не учитывает цвета, но я на правильном пути!
Первоначально переключаясь на массивы вершин, это не имело большого значения, потому что оно все еще визуализировалось для каждого отдельного объекта, поэтомуglDrawArrays()
вызывали для каждого из 200+ Renderable
.
РЕДАКТИРОВАТЬ:
Также извините за то, что не предоставил достаточно информации, я предполагаю, что проблема очевидна.Какая уверенность в себе, да?Ха-ха.