Вершинный буфер OpengGL ES - PullRequest
1 голос
/ 29 июня 2010

У меня сложилась следующая ситуация с использованием буферов вершин в OpenGL на iPad: - рендеринг некоторых объектов с 30 FPS - удаление объектов и создание новых (уничтожение всех объектов и порождение других) - рендеринг новых объектов

FPS падает до 10 в течение нескольких секунд и медленно восстанавливается до 30. Я использовал некоторые таймеры и увидел, что время рендеринга увеличивается с 30 мс до 100 мс в течение нескольких секунд.Время обновления увеличивается только при загрузке новых объектов (один кадр) и времени отправки на рендеринг.Я думаю, что проблема с кэшированием вершинных буферов.Есть ли способ заставить кеширование вместо того, чтобы ждать, пока OpenGL сделает это?У вас есть другие мнения по этой проблеме?

1 Ответ

2 голосов
/ 29 июня 2010

Другой возможный вариант - не уничтожать объекты и воссоздавать их, а обновлять данные в них, используя glBufferSubData().

Это может все еще не решить проблему кэширования, потому что вы по-прежнему помещаете новые данные в буфер, но я думаю, что это гарантированно быстрее, чем уничтожение и воссоздание буфера.

После этого изменения вы можете попробовать сыграть с параметром usage, равным glBufferData(), и изменить его на GL_DYNAMIC_DRAW или GL_STREAM_DRAW. предполагается, что они дают OpenGL подсказку о том, что буферы часто меняются и, возможно, это приведет к соответствующей оптимизации кэширования.

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