Распределение памяти в OpenGL

Это больше вопрос для обсуждения, чем тот, на который есть прямой ответ. Я разрабатываю довольно простую сцену в OpenGL и столкнулся с проблемой со структурой классов, которую я использую. У меня есть базовый класс «Примитив», из которого я создаю производные классы, такие как Cube, Tetrahedron, Sphere и т. Д. Базовый класс содержит все данные об объекте, такие как его вершины и нормали. Отсюда у меня есть несколько классов, производных от класса Model, такого как Fence, который затем содержит несколько кубов, упорядоченных для создания правильной структуры. Я храню все вершины и нормали в куче, и мне нужен способ освободить память. Однако при попытке освободить память в конструкторе Примитива я сталкиваюсь с ошибкой.

Я думаю, это потому, что при использовании GLUT модели определяются вне glutMainLoop (), и поэтому они выходят за рамки, прежде чем программа будет выполнена с их использованием. Есть ли более эффективный способ управления памятью с помощью массивов вершин в OpenGL? Или есть решение этой проблемы?

0

Решение

Вместо использования клиентских буферов для вашей модели, используйте серверный буфер. Они связаны с использованием glGenBuffer glBindBuffer and glBufferData, Эти API загружают ваши буферы в память сервера, и после загрузки вы можете сразу же освободить ваши данные.

Более новые версии OpenGL имеют объекты Vertex Array (VAO), которые также могут вам помочь.

1

Другие решения

Других решений пока нет …