OpenGL: требуемое время жизни массивов вершин - PullRequest
5 голосов
/ 08 сентября 2011

Вопрос новичка OpenGL: если я сделаю что-то вроде этого:

GLfloat vertices[] = { .... };
glVertexPointer(3, GL_FLOAT, 0, vertices);
... set other stuff ...
glDrawArrays(...);

Каков требуемый срок жизни массива 'vertices'?(Или, другими словами, OpenGL возьмет копию соответствующей части и в какой момент?) Например, нормально ли для массива находиться в стеке, как это неявно будет, или он должен существовать после glDrawArrays () называется?

[Для чего это стоит, я специально программирую для iOS, и на данный момент работаю с кодом внутри метода drawFrame, созданного в проекте OpenGL, как установлено по умолчанию в XCode.]

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Ваш массив должен жить до glDrawArrays, впоследствии он может быть уничтожен и, как следует из этого, он может находиться в стеке.

1 голос
/ 09 сентября 2011

Содержимое массива вершин будет копироваться каждый раз, когда вы вызываете glDrawArrays/Elements, и, следовательно, должно существовать в данный момент времени (пока вы больше не вызываете glDrawArrays/Elements или не измените массив вершин с помощью вызова gl...Pointer).

Для фактического хранения вершинных (и других) данных на графическом процессоре и предоставления драйверу возможности управлять его памятью (вместе с улучшением производительности, когда нет необходимости передавать данные при каждом вызове отрисовки), вы можете использовать объекты буфера вершин . После того, как вы скопировали свои данные в такой VBO, они находятся в памяти GPU (или там, где драйвер считает, что это подходит лучше всего), и вам больше не нужна копия вашего процессора. Но это упрощенные утверждения, обратитесь к материалам по VBO для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...