OpenGL 2 e vice-versa vs 3 e diante: Quais são as principais diferenças para gráficos 2D? [fechadas]

7

Os contextos do OpenGL antes e depois do OpenGL 3.0 são bastante diferentes. Até agora, eu realmente só trabalhei com buffers de ambos os lados, sei que a diferença mais notável é a falta do Modo Imediato.

Jogando fora as considerações do Modo Imediato, que diferenças importantes devo procurar especificamente ao codificar operações bidimensionais de baixo nível em um mecanismo de gráficos 2-D?

Garet Claborn
fonte
As respostas até agora têm sido úteis, no entanto, apenas uma observação: estou realmente mais confortável com o GL3 + no momento e estou pensando em voltar à versão 2.1 para compatibilidade. O que mais importa é, na verdade, qual versão será mais compatível com o OpenGL ES.
Garet Claborn
2
Estou curioso para saber por que você reverteu a edição anterior ...
Vaillancourt
isso ocorre porque este título faz referência a uma grande mudança específica na metodologia principal do OpenGL. Antes da versão 3, a arquitetura OpenGL estava profundamente ligada à arquitetura OpenGL 1.1 e 1.0. A razão pela qual esse é um ponto significativo na história / método do OpenGL é um domínio específico do OpenGL. Após esta versão, a compatibilidade com versões anteriores é interrompida pela primeira vez desde 97 ou mais. É também um grande cisma em termos de tornar o padrão mais prático para o hardware moderno. É importante, para o significado desta pergunta, que ela represente essa quebra na arquitetura.
Garet Claborn

Respostas:

8

Em termos de contextos especificamente, há pouca diferença. A maioria das implementações do OpenGL possui a maioria dos recursos do OpenGL 3.0+, mesmo ao usar um contexto legado, devido à maneira como as extensões do OpenGL funcionam.

Se você está perguntando especificamente sobre quais recursos do OpenGL 3.0 valem a pena usar, alguns dos melhores são shaders e instanciamento de geometria, os quais são úteis mesmo para gráficos 2D em determinadas circunstâncias. No entanto, na maioria dos casos, para 2D simples, tudo o que você fará é preencher um buffer de vértice de fluxo contínuo a cada quadro e fazer uma única chamada de empate, para que você realmente faça muito pouco.

Em termos de 2D no OpenGL em geral, verifique se você possui um atlas de textura (folha de sprite), para que raramente precise alterar os estados da textura. Você deseja evitar fazer uma chamada de desenho por sprite, pois isso é incrivelmente ineficiente, e prefere agrupar vários sprites e desenhá-los todos de uma vez. Renderize com o algoritmo do pintor, onde "render" significa empurrar a geometria para um buffer de vértice e desenhá-la no final. Pós-processo como achar melhor.

Sean Middleditch
fonte
3

Você pode encontrar muitas informações aqui: Registro OpenGL . Existem muitas extensões. Cada seção (ARB, EXT, ...) é ordenada de acordo com a data de adição. Novas extensões são gravadas em versões mais recentes do OpenGL. Por exemplo - se eu olhar a seção ARB, quase todas as extensões em ARB_timer_query (inclusive) são escritas no OpenGL 3.2 ou mais recente.

Você também mencionou buffers, para tentar a extensão GL_NV_vertex_buffer_unified_memory. Algumas informações podem ser encontradas aqui (também há um link para a apresentação).

Também shader_buffer_load deve ser útil, se você estiver usando shaders, mas ainda não li a especificação.

zacharmarz
fonte