Dicas de otimização do OpenGL [fechado]

26

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

thyrgle
fonte

Respostas:

16

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

MrValdez
fonte
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.

Tetrad
fonte
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)

Slurps Mad Rips
fonte
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.

knight666
fonte
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.

Dennis Munsie
fonte
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.

Krankzinnig
fonte
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.

Kromster diz apoio Monica
fonte
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.

Ellis
fonte
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.

Hannesh
fonte