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