Методы оптимизации под OPENGL
Рассмотрены основные методы оптимизации графических приложений, написанных с использованием OpenGL. Описаны методы низкоуровневой оптимизации, в том числе использующие различные расширения OpenGL. Приведены улучшенные методы отрисовки графических объектов. Изложены методы изменения формата графических объектов для повышения производительности конечных приложений.
Авторы
Тэги
Тематические рубрики
Предметные рубрики
В этом же номере:
Резюме по документу**
Описаны методы низкоуровневой оптимизации, в том числе
использующие различные расширения OpenGL. <...> Изложены методы изменения формата графических
объектов для повышения производительности конечных приложений. <...> Оптимизация рендеринга является важным этапом разработки
конечного приложения, поскольку позволяет увеличить число кадров
в секунду, снизить требования к аппаратному обеспечению в приложениях
реального времени, а для рендеров — уменьшить время, затрачиваемое
на отрисовку конечной сцены. <...> Однако одними расширениями
не обойтись — спектр проблем, которые необходимо решить,
слишком велик и затрагивает множество подсистем рендеринга. <...> Рассмотрим основные методы оптимизации приложений: низкоуровневые,
рисования моделей и оптимизации моделей. <...> Использование старых функций
OpenGL, например Begin-End, серьезно уменьшает производительность,
поскольку они имеют большие накладные расходы. <...> От
них следует отказаться в пользу новых расширений типа
ARB_vertex_buffer_object (VBO), позволяющих хранить вертексы в
одном буфере в памяти GPU. <...> По
аналогии с display lists VAO позволяет «записать» последовательность
команд для рендеринга и затем «воспроизвести» их, т. е.
2
Методы оптимизации под OPENGL
уменьшить накладные расходы. <...> Приведенный ниже пример демонстрирует
это:
uint createVAO(uint vboId) {
uint id;
// с этого момента OpenGL будет «записывать» всю
// последовательность изменений конвейера
BindVertexArray(id);
bindVBO(vboId); // привязка VBO
BindVertexArray(0); // окончание «записи»
unbindVBO();
return id;
GenVertexArrays(1, &id);
}
void drawVAO(uint id, uint count) { // VAO дает возможность
использовать
// всего три команды
BindVertexArray(id);
}
DrawArrays(GL_TRIANGLES, 0, count);
BindVertexArray(0); // отвязка VAO
Текстуры в OpenGL состоят из изображения, мип-уровней (miplevel)
и параметров обработки самой текстуры (режимы фильтрации,
отсечения текстурных координат и др.) <...> Возникают ситуации, когда набор таких
параметров одинаков для множества текстур и задание их для
каждой текстуры может быть неэффективным. <...> В этом случае необходимо
использовать расширение <...>
** - вычисляется автоматически, возможны погрешности
Похожие документы: