Mesa v18.0.5를 사용하지만 OpenGL v3.0만 가져옴

Mesa v18.0.5를 사용하지만 OpenGL v3.0만 가져옴

OpenGL을 사용하여 C/C++ 응용 프로그램을 개발하려고 합니다. 안타깝게도 OpenGL 3.0 이후에는 어떤 기능에도 액세스할 수 없습니다. Mesa 버전 18.0.5, Linux Mint 18 64비트, 4.18.1 커널 및 Intel 통합 그래픽이 있습니다.

터미널 출력:

 ~ $ 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:

내 하드웨어는 OpenGL 4.4까지 지원한다고 확신합니다. MS가 최신 업데이트를 푸시/강제하기 전에는 이 컴퓨터가 Windows 10 컴퓨터였고 그 기간 동안 OpenGL 4.4 및 GLSL 440으로 개발하고 있었기 때문입니다.

또한 JOGL을 통해 Java에서 OpenGL 4.4 프로그램을 실행할 수 있습니다. 이 프로그램은 필요한 모든 OpenGL 라이브러리를 함께 패키지하고 시스템 버전과 완전히 독립적인 것으로 보입니다.

그렇다면 기본적으로 Mesa는 왜 코어 버전이 4.5라고 말하면서 버전 문자열을 3.0으로 제공합니까? (동일한 버전의 glGetString(GL_VERSION)이 반환됩니다.) OpenGL 4.4에 다시 액세스하려면 어떻게 해야 합니까? (4.5가 아니라면!)

답변1

내가 아는 한 중요한 값은 "OpenGL 버전 문자열"이 아니라 "최대 코어 프로필 버전"입니다. 컨텍스트를 생성할 때 핵심 구성 파일을 지정하지 않았거나 다음과 같이 작성한 경우

glfwOpenWindowHint(GLFW_OPENGL_PROFILE, 0);

Mesa는 OpenGL 3.0 컨텍스트를 제공합니다(프로필이 OpenGL 3.0에 도입되었기 때문에 이것은 애플리케이션이 프로필에 대해 알지 못했던 마지막 버전이었기 때문에 의미가 있습니다). 최신 버전의 OpenGL을 원할 경우 해당 구성 파일을 지정해야 합니다.

glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

또는

glutInitContextProfile(GLUT_CORE_PROFILE);

그리고 사용된 버전 glutInitContext().

이런 방식으로 OpenGL 버전을 강제하면 강력한 제약이 발생한다는 점에 유의하세요. 일부 개발자는 비교적 낮은 버전(예: OpenGL 3.2)을 대상으로 한 다음 필요한 확장을 요청하려고 합니다. 인기 있는 확장은 해당 OpenGL 버전에서 완전히 지원되기 전에 어느 정도 사용 가능한 경향이 있기 때문에 일반적으로 이 방법이 더 잘 작동합니다. 드라이버.

MESA_GL_VERSION_OVERRIDE디버깅 또는 Mesa 개발 도구일 뿐이며, 보고된 OpenGL 버전을 강제로 무시하고 Mesa가 실제로 지원하지 않는 값으로 설정할 수 있습니다!

관련 정보