Usando o Mesa v18.0.5, mas obtendo apenas o OpenGL v3.0

0

Estou tentando desenvolver aplicativos C / C ++ usando o OpenGL. Infelizmente, não consegui acessar nenhuma funcionalidade após o OpenGL 3.0. Eu tenho o Mesa versão 18.0.5, o Linux Mint 18 de 64 bits, o Kernel 4.18.1 e o Intel Integrated Graphics.

Saída do terminal:

 ~ $ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U 
Integrated Graphics (rev 09)
 ~ $ glxinfo | grep OpenGL
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 5500 (Broadwell 
GT2) 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 18.0.5
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 18.0.5
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 18.0.5
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 
3.10
OpenGL ES profile extensions:

Estou certo de que o meu hardware suporta até OpenGL 4.4, já que esta máquina era anteriormente uma máquina Windows 10 antes do MS empurrar / forçar uma atualização quebrada, e eu desenvolvi usando OpenGL 4.4 e GLSL 440 durante esse tempo.

Além disso, posso rodar programas OpenGL 4.4 em Java através do JOGL, que tem todas as bibliotecas OpenGL necessárias juntas e não parece depender da versão do sistema.

Então, basicamente, por que a Mesa diz que a versão principal é 4.5, mas então fornece a string de versão 3.0? (A mesma versão glGetString (GL_VERSION) retorna.) E como posso recuperar o acesso ao OpenGL 4.4? (Se não for 4.5!)

    
por T. K. 21.08.2018 / 18:39

1 resposta

0

Pelo que entendi, o valor importante é a "versão do perfil do núcleo máximo", não a "string de versão do OpenGL". Se você não especificar um perfil principal ao criar seu contexto ou se escrever algo como

glfwOpenWindowHint(GLFW_OPENGL_PROFILE, 0);

O Mesa fornecerá um contexto do OpenGL 3.0 (esse tipo de sentido faz sentido desde que os perfis foram introduzidos no OpenGL 3.0, portanto essa é a última versão em que se espera que os aplicativos não saibam sobre eles). Se você quer uma versão mais nova do OpenGL, você precisa especificar o perfil correspondente:

glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

ou

glutInitContextProfile(GLUT_CORE_PROFILE);

junto com a versão usando glutInitContext() .

Observe que a imposição de uma versão do OpenGL dessa maneira cria uma strong restrição; Eu imagino que você sabe o que está fazendo ;-) Alguns desenvolvedores tentam segmentar uma versão tão baixa quanto razoável (OpenGL 3.2 por exemplo) e depois perguntar por quais extensões eles precisam - que geralmente funcionam melhor, já que extensões populares tendem a ficar disponíveis por um tempo antes que a versão correspondente do OpenGL seja totalmente suportada por os drivers.

MESA_GL_VERSION_OVERRIDE é apenas uma ferramenta de depuração ou de desenvolvimento do Mesa; Ele substitui à força a versão do OpenGL, e pode ser configurado para valores que o Mesa não suporta realmente!

    
por 22.08.2018 / 09:36