Respostas:
Use VBO em vez de glStart () / glEnd (). Isso economiza ciclos na transferência dos dados para a memória da GPU.
glStart()/glEnd()
.
A dica padrão de perfil, perfil, perfil também se aplica aqui, embora as ferramentas sejam um pouco diferentes.
O gDEBugger é ótimo para ajudar você a ver exatamente o que está acontecendo sob o capô. É caro, no entanto.
Essas são as referências de documentação da Apple no OpenGL, mas um pouquinho ajuda, certo? ;)
Otimização de desempenho do OpenGL: o básico da
otimização da taxa de transferência de dados do OpenGL no OS X
(Este último é um aplicativo de amostra)
Otimização de Vertex
Também há um número muito grande de vídeos disponíveis sobre o assunto (também da Apple) que falam sobre extensões OpenGL. Alguns deles são específicos do OS X, mas outros são mais generalizados e provavelmente poderiam ser aplicados ao Windows e Linux.
Você pode encontrar os vídeos aqui . No entanto, você precisa do iTunes e de uma conta da Apple para visualizá-los (mas eles são gratuitos!: D)
Bem, isso realmente depende do que você está planejando fazer, mas aqui estão os princípios básicos:
Sua CPU é muito preciosa, enquanto sua GPU é uma fera faminta. Desloque o máximo possível para a GPU. Atualmente você pode fazer isso com excelentes bibliotecas como OpenCL, CUDA e Thrust.
Faça sua iluminação em um shader. Isso não apenas ajudará a manter sua sanidade mental, mas também permitirá que você esfrie coisas muito legais, como sombreadores e iluminação diferida .
Partículas sugam. Mesmo ao usar sprites de ponto OpenGL.
Minimize suas alterações de estado. Em muitas plataformas, cada alteração de estado potencialmente libera o pipeline. É muito melhor agrupar itens semelhantes e alterar o estado uma vez.
glEnable(GL_CULL_FACES);
Um revestimento simples que aplica o descarte da face traseira. Isso é excelente para reduzir a contagem de polígonos. Observe também o descarte de Frustum / Oclusão para reduzir a contagem de polissacarídeos.
Outra coisa a considerar é o SIMD para seus vetores e quaternions (principalmente usados em rotações de câmera). Se você não quiser mexer com o ASM, verifique o libSIMD, que é uma ótima biblioteca para lidar com o SIMD em C.
Não use glGet * quando puder acessar variáveis locais, por exemplo:
Essas chamadas são muito lentas
Mova o material não utilizado para fora da cláusula glBegin - glEnd (seja glColor ou glNormal ou qualquer outra coisa) se ele não mudar por dentro. O OpenGL é uma máquina de estado, usa o último valor.
Minimizar comandos OpenGL é a chave. Portanto, você deve agrupar todos os comandos de desenho. Para jogos em 2D, é uma boa ideia usar o Altas Texture e desenhar todos os sprites que compartilhem a mesma textura em um comando opengl.