РУсскоязычный Архив Электронных СТатей периодических изданий
Инженерный журнал: наука и инновации/2014/№ 11/

Методы оптимизации под 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) и параметров обработки самой текстуры (режимы фильтрации, отсечения текстурных координат и др.) <...> Возникают ситуации, когда набор таких параметров одинаков для множества текстур и задание их для каждой текстуры может быть неэффективным. <...> В этом случае необходимо использовать расширение <...>
** - вычисляется автоматически, возможны погрешности

Похожие документы: