Я создаю средство рендеринга, подобное Minecraft, с помощью C++ и OpenGL.
Это означает, что я разделяю мир на фрагменты и загружаю/выгружаю новые фрагменты при перемещении по миру.
Когда фрагмент загружается, я создаю сетку для него и загрузите сетку во VRAM с помощью glBufferData.
Проблема в том, что использование OpenGL значительно увеличивает использование оперативной памяти (удаление вызова glBufferData позволяет избежать увеличение использования памяти). Я также заметил, что увеличение использования оперативной памяти равно использованию видеопамяти моей программы. Это действительно очень много, учитывая, что я знаю, что мне никогда не понадобятся данные вершин обратно в ЦП. Я просто рендерю его, пока он не будет удален из VRAM.
На всякий случай вот код:
Я создаю средство рендеринга, подобное Minecraft, с помощью C++ и OpenGL. Это означает, что я разделяю мир на фрагменты и загружаю/выгружаю новые фрагменты при перемещении по миру. Когда фрагмент загружается, я создаю сетку для него и загрузите сетку во VRAM с помощью glBufferData. Проблема в том, что использование OpenGL значительно увеличивает использование оперативной памяти (удаление вызова glBufferData позволяет избежать увеличение использования памяти). Я также заметил, что увеличение использования оперативной памяти равно использованию видеопамяти моей программы. Это действительно очень много, учитывая, что я знаю, что мне никогда не понадобятся данные вершин обратно в ЦП. Я просто рендерю его, пока он не будет удален из VRAM. На всякий случай вот код: [code]struct ChunkMesh { GLuint vao{}; GLuint vbo{}; int vertexCount{}; };
class ChunkMeshManager { ChunkStorage &m_chunkStorage; ChunkMesher &m_mesher;
void forEachMesh(const std::function &cb) { for (auto &[pos, mesh]: m_meshes) { cb(mesh); } } }; [/code] Можно ли что-нибудь сделать (или исправить), чтобы он не использовал так много оперативной памяти?