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?
opengl
2d
graphics-programming
Garet Claborn
fonte
fonte
Respostas:
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.
fonte
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.
fonte