Ir puro OpenGL ou GLSL? [fechadas]

11

Fiquei interessado em estudar programação gráfica, então o ponto de entrada óbvio era aprender OpenGL. Mas, reunindo informações dispersas em fóruns e sites, parece que uma implementação pura do OpenGL está desaparecendo, já que a maioria das coisas anteriores ao 3.0 está sendo reprovada e citando uma revisão na Amazon, "já que 3.0 é tudo uma questão de shaders". Também dos livros que eu vi, parece que apenas o soberbo cobre a versão mais recente, mas apenas parcialmente porque boa parte do livro ensina funções obsoletas e existem livros especificamente para o GLSL.

Foi aqui que encontrei o meu primeiro problema. Alguns hardwares não suportam o GLSL, incluindo o notebook com gráficos integrados intel que eu planejava usar. A função

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

causa uma falha de segmentação e, pelo que parece, meu driver não suporta shaders

Então, minha pergunta é: qual é a viabilidade de criar um jogo apenas no OpenGL? sentirei falta de bons recursos insubstituíveis da linguagem shader? E que tipo de hardware (antiga geração i3, i5, i7, VGAs antigas) posso esperar para executar um jogo com shaders corretamente?

ibrabeicker
fonte
1
GLSL é OpenGL, acho que sua pergunta está relacionada à questão de saber se o hardware que você pretende usar é compatível com OpenGL 3, não especificamente GLSL.
Deceleratedcaviar
@ Daniel, então se um hardware / driver é compatível com OpenGL 3.0, é compatível com GLSL?
Ibrabeicker
1
O GLSL faz parte da especificação do OpenGL 3.0; portanto, esse é o caso.
Deceleratedcaviar
1
Você diz, "pelo que parece, meu motorista não suporta shaders". Qual versão do OpenGL você está recebendo? Você está carregando corretamente todas as funções OpenGL disponíveis?
Nicol Bolas
1
@Apavoikos: se retornar NULL, você terá problemas muito maiores do que usar shaders. Você está criando seu contexto OpenGL corretamente? Lembre-se: você não pode chamar nenhuma função GL até ter um contexto válido criado e atualizado.
Nicol Bolas

Respostas:

9

O código de sombreador é definitivamente mais claro e fácil de entender do que uma bagunça de glTexEnv, glTexGen e chamadas de matriz de textura, e tem o bônus de que você pode expressar qualquer operação matemática mais ou menos arbitrária usando-o (o que você não pode fazer com o fixo pipeline - o que você chama de "OpenGL puro"). A única desvantagem potencial é que você precisa escrever uma certa quantidade de infraestrutura de suporte em seu código antes de poder usá-las, enquanto que, da maneira antiga, você pode se aprofundar. Eu chamo isso de desvantagem "potencial" porque eu na verdade, pense que isso faz você preparar as coisas e aprender um pouco mais antecipadamente - o OpenGL tem uma reputação de ser "fácil" e, ocasionalmente, você vê pessoas sendo enganadas por isso e mergulhando sem saber o que estão fazendo primeiro,

Em termos de hardware, você pode confiar em quase tudo lançado nos últimos 5/6/7 anos para ter algum grau de suporte ao shader, mas - no caso de Intels mais antigos (algumas das séries 9xx) - não será GLSL, mas serão as extensões GL_ARB_vertex_program e GL_ARB_fragment_program mais antigas . Eles usam uma linguagem shader semelhante à linguagem assembly, mas - tempo de confissão - eu pessoalmente gosto bastante disso. Na verdade, é bastante fácil de usar, se não houver alguns recursos mais modernos (como ramificação) e exigir mais linhas de código de sombreador para fazer a mesma coisa. A infraestrutura de suporte necessária no seu programa principal para essas extensões é muito mais leve do que para o GLSL também.

No entanto, isso não quer dizer que eu os recomende pelo GLSL, mas eles são uma opção que existe se você realmente precisar rodar nessa classe de hardware e é útil estar ciente de que eles existem, o que me leva ao ponto final . Você está realmente certo de que realmente precisa rodar nessa classe de hardware (por exemplo, no caso do seu notebook, você pode simplesmente ter esquecido de obter os pontos de entrada)?

Maximus Minimus
fonte
Negligenciei completamente o fato de o Mesa3d ainda estar na especificação opengl 2.1. Eu vou consertar isso
Ibrabeicker
6

Deve-se notar também que não existe mais "OpenGL puro".

O OpenGL ES 2.0 descartou todas as coisas que não são sombreadores e, como o WebGL é baseado nele, ele também funciona apenas com sombreadores. O OpenGL 3.0 reprovou todo o material de função fixa e o 3.1 o removeu (nos perfis principais. A maioria das implementações suporta perfis de compatibilidade, mas o MacOSX não suporta a implementação 3.2).

Portanto, eu não sugeriria aprender OpenGL não-shader.

Nicol Bolas
fonte
6

Se você já fez alguma programação no passado, escrever seu próprio código de sombreador usando GLSL será muito mais agradável. Originalmente, tentei aprender o OpenGL de função fixa e era mais difícil para mim porque não fazia sentido. Então tentei aprender o GLSL usando o livro laranja e ficou muito mais fácil e fez mais desde então. Apenas meus 2 centavos.

Eu definitivamente iria para o GLSL por causa do poder de escrever programas para a GPU.

Joey Green
fonte