Dicas de otimização do OpenGL [fechado]


26

Que dicas ou truques você tem para tornar o OpenGL mais eficiente?

Respostas:


16

Use VBO em vez de glStart () / glEnd (). Isso economiza ciclos na transferência dos dados para a memória da GPU.


7
Mais do que isso, o glBegin e o glEnd foram descontinuados nas revisões posteriores e foram completamente removidos (e, portanto, não funcionarão) nas versões 3.xe superiores. Se você solicitar um contexto do OpenGL 3.x, não poderá usá-los completamente.
Slurps Mad Rips

O DirectX realmente força isso sobre você, ele não tem equivalente glStart()/glEnd().
knight666

@SAHChandler Eu não sabia disso. Não percebi que estava obsoleto.
MrValdez

3
@SAHChandler: Isso é péssimo! Aprendi todo o meu desenho com glBegin () e glEnd (). Nããão !!!

8

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.


2
Só queria acrescentar que agora é gratuito.
precisa

8

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)


7

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.


6

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.


4
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.


4

Não use glGet * quando puder acessar variáveis ​​locais, por exemplo:

  • Não consulte o tamanho das texturas do OpenGL, guarde-as ao carregar variáveis
  • Não consulte larguras de linhas / tamanhos de pontos do OpenGL quando puder armazenar as alterações em seu aplicativo

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.


3

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.


Seja cuidadoso. Lotes menores e maiores são úteis, mas, dependendo da plataforma de destino, lotes "muito grandes" diminuirão o desempenho.
Andreas

3

Lote, lote, lote !! (Ab) use a GPU para renderizar o máximo possível em cada chamada de empate. Os jogos são limitados principalmente pela quantidade de mudanças de estado, não pela quantidade de triângulos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.