Resumindo os comentários: o aplicativo provavelmente se comporta mal.
OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.2.0
Isso significa que você tem o Mesa 11.2 instalado e a versão máxima suportada do OpenGL é 3.3.
Agora, por que o aplicativo diz o contrário? A maneira mais comum de consultar a versão do OpenGL costumava ser uma chamada para glGetString(GL_VERSION)
e é isso que o aplicativo usa.
Prova que usa isso? A variável de ambiente MESA_GL_VERSION_OVERRIDE
altera a versão relatada para o que você definiu. E defini-lo como 3.1
faz com que o aplicativo pare de reclamar.
Agora, como todas as funções OpenGL, glGetString
requer que um contexto OpenGL esteja ativo. No entanto, desde o lançamento do OpenGL 3.2 , para criar um contexto OpenGL, você deve declarar de antemão a versão que você deseja. Isso permite que as versões posteriores permitam compatibilidade quando os programas usam uma versão mais antiga (*) .
O mais divertido está aqui: a versão relatada por glGetString
depende de qual versão foi selecionada ao criar o contexto. Isso leva a aplicativos mal implementados e antigos que não selecionam um perfil explicitamente para acreditar que a versão solicitada é a versão máxima suportada.
E se o aplicativo não selecionar uma versão, um contexto de compatibilidade será criado automaticamente com uma versão mais antiga. Eu acho que isso é o que você vê nesta linha:
OpenGL version string: 3.0 Mesa 11.2.0
Se este for o problema real, a atualização não alterará nada. Mas você pode manter o truque MESA_GL_VERSION_OVERRIDE=3.1
. Ele deve carregar um perfil 3.1 e deixar o programa feliz enquanto aguarda a correção.
(*) Sobre perfis. Isso é algo novo com o OpenGL 3.2, o conjunto de recursos do OpenGL pode ser selecionado em tempo de execução, permitindo que o programa solicite uma versão do OpenGL, para a qual a implementação do OpenGL será “downgrade”. Isso funciona da versão 3.2 para frente, deixando a questão sobre o que fazer com todas as coisas antigas, especialmente porque o OpenGL3 é uma grande reformulação da API (o glBegin / glVector e outras coisas sumiram). A escolha foi feita para dividir a API em dois perfis: Core e Compatibility. O contexto de compatibilidade retém chamadas antigas e obsoletas enquanto o contexto principal as elimina.
O suporte a um contexto de compatibilidade é completamente opcional e, embora a maioria dos fornecedores ofereça um que corresponda aproximadamente ao tempo da divisão (de 3.0 a 3.2), poucos se incomodam em fazer versões mais recentes do contexto de compatibilidade. Foi o que sugeriu @Ruslan em sua resposta: O Mesa suporta apenas o perfil de compatibilidade do OpengGL 3.0, mas a nVidia também suporta versões superiores. Isso poderia deixar seu programa feliz sem ter que mentir para ele.