Какие у вас есть советы или рекомендации по повышению эффективности OpenGL?
opengl
optimization
тиргл
источник
источник
glStart()/glEnd()
.Стандартный наконечник профиля, профиля, профиля применяется здесь также хорошо, хотя инструменты немного отличаются.
gDEBugger отлично помогает вам точно понять, что происходит под капотом. Это дорого, хотя.
источник
Они взяты из документации Apple по OpenGL, но каждый немного помогает, не так ли? ;)
Оптимизация производительности OpenGL: основы
Оптимизация пропускной способности данных OpenGL в OS X
(Это последний пример приложения)
Оптимизация вершин
Существует также очень большое количество видео по этой теме (также от Apple), в которых рассказывается о расширениях OpenGL. Некоторые из них специфичны для OS X, но некоторые другие более обобщены и, скорее всего, могут быть применены к Windows и Linux.
Вы можете найти видео здесь . Тем не менее, вам требуется iTunes и учетная запись Apple для их просмотра (но они бесплатны!: D)
источник
Ну, это действительно очень зависит от того, что вы планируете делать, но вот основы:
Ваш процессор очень ценен, а ваш графический процессор - голодный зверь. Смещайте как можно больше к графическому процессору. В настоящее время вы можете сделать это с отличными библиотеками, такими как OpenCL, CUDA и Thrust.
Делай свое освещение в шейдере. Это не только поможет сохранить ваше здравомыслие, но и позволит вам очень крутые вещи, такие как шейдеры Toon и отложенное освещение .
Частицы сосут. Даже при использовании точечных спрайтов OpenGL.
источник
Минимизируйте изменения вашего состояния. На многих платформах каждое изменение состояния потенциально сбрасывает конвейер. Гораздо лучше собирать похожие вещи вместе и менять состояние один раз.
источник
Простой один лайнер, который применяет отбраковку лицевой стороны. Это отлично подходит для сокращения количества полигонов. Также обратите внимание на отбор Frustum / Occlusion для уменьшения числа поли.
Еще одна вещь, на которую стоит обратить внимание, это SIMD для ваших векторов и кватернионов (в основном используется при поворотах камеры). Если вы не хотите связываться с ASM, посмотрите libSIMD, которая является отличной библиотекой для обработки SIMD на C.
источник
Не используйте glGet *, когда вы можете получить доступ к локальным переменным, например:
Эти звонки очень медленные
Переместите неиспользуемый материал за пределы предложения glBegin - glEnd (будь то glColor или glNormal или что-либо еще), если он не изменяется внутри. OpenGL - это конечный автомат, он использует последнее значение.
источник
Минимизация команд OpenGL - это ключ. Таким образом, вы должны пакетировать все команды рисования. Для 2D-игр рекомендуется использовать Altas Texture и рисовать все спрайты с одинаковой текстурой в одной команде opengl.
источник
Партия, партия, партия !! (Ab) использовать графический процессор для максимально возможного рендеринга при каждом вызове отрисовки. Игры в основном ограничены количеством изменений состояния, не столько количеством треугольников.
источник