OpenGL ES 2.0: использование glBufferData с новым размером данных вершин - PullRequest
1 голос
/ 04 сентября 2011

У меня есть массив атрибутов вершин GLfloat *vxData. Я связал GL_ARRAY_BUFFER и GL_ELEMENT_ARRAY_BUFFER с vxData и правильными данными индекса, и начальные вершины успешно отрисовываются.

На каждом шаге рендеринга я делаю:

glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
glBufferData(GL_ARRAY_BUFFER, vxDataSize, vxData, GL_STATIC_DRAW);
glDrawElements(...)

На каком-то этапе vxData изменяет размер для размещения меньшего или большего количества вершин, данные индекса воссоздаются для отражения этого, и vxDataSize обновляется. Для рендера, следующего сразу за этим изменением данных, правильно ли просто вызывать те же строки выше?

Я знаю об альтернативных возможностях, например используя glMapBufferOES, я просто хотел бы знать, является ли приведенное выше технически правильным для этого сценария.

1 Ответ

5 голосов
/ 05 сентября 2011

Это правильно? Да, вы можете сделать это, и вы должны получить функциональный код, который отображает то, что вы ожидаете. Это хорошо ?

номер

Во-первых, вы врете реализации OpenGL. Вы сказали, что делаете СТАТИЧЕСКИЕ данные. STATIC означает, что вы загружаете на него один раз . Если вы делаете это каждый кадр, то вы должны использовать STREAM, а не STATIC.

Во-вторых, вы не должны делать буферы больше и меньше. Одно дело вычистить старые данные, но если вы говорите OpenGL, что буфер должен быть больше, то он должен фактически выделить память. Это не хорошо. Выберите размер и придерживайтесь его. Выберите самый большой размер, который вы можете использовать, и оставайтесь там.

...