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