OpenGL 버전을 3.0에서 3.1로 업그레이드해야 합니다. Stackexchange에는 특정 상황을 다루는 게시물이 넘쳐나는데, 숲 속의 나무를 보는 것은커녕 나이를 가늠하는 것조차 힘든 것으로 나타났습니다.
그래서 사례별로 또 다른 질문을 드리고자 제 상황을 바탕으로 다음과 같은 정보를 모았습니다. 문제는
- 업그레이드가 가능한가요?
- 이를 위해 어떤 조치를 취해야 하거나 취할 수 있습니까? (최대한 구체적으로 기재해주세요)
세부 사항은 다음과 같습니다.
- 운영 체제: 우분투 14.04 LTS
- 커널
uname -vr
: 4.4.0-96-generic #119~14.04.1-Ubuntu SMP Wed Sep 13 08:40:48 UTC 2017 - 장치, 출처
lshw -c video
: VGA 호환 컨트롤러 GT218 [GeForce 210] NVIDIA --- OpenGL 3.1을 지원합니다.공급업체 사양 - 드라이버 출처
lshw -c video
: nouveau 신선한 공기 정보는 다음에서 제공됩니다.
dpkg -l | grep nouveau
ii libdrm-nouveau2:amd64 2.4.67-1ubuntu0.14.04.2 amd64 [...] ii libdrm-nouveau2:i386 2.4.67-1ubuntu0.14.04.2 i386 [...] ii xserver-xorg-video-nouveau-lts-xenial 1:1.0.12-1build2~trusty1 amd64 [...]
OpenGL 정보
glxinfo | grep OpenGL
OpenGL vendor string: nouveau OpenGL renderer string: Gallium 0.4 on NVA8 OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.2.0 OpenGL core profile shading language version string: 3.30 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 3.0 Mesa 11.2.0 OpenGL shading language version string: 1.30 OpenGL context flags: (none) OpenGL extensions:
요청하시면 더 많은 정보를 얻으실 수 있습니다. 예를 들어 시냅틱은 "mesa"라는 검색어에 대한 응답으로 설치된 패키지 28개를 나열하지만 어느 패키지가 관련되어 있는지 알 수 없습니다.
답변1
결론: 적용아마도버릇 없음.
OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.2.0
이는 Mesa 11.2가 설치되어 있고 지원되는 가장 높은 OpenGL 버전이 3.3임을 의미합니다.
그런데 왜 앱에서 다르게 말합니까? OpenGL 버전을 쿼리하는 가장 일반적인 방법은 를 호출하는 것이었고 glGetString(GL_VERSION)
, 이것이 바로 응용 프로그램에서 사용된 방식입니다.
이것을 사용한다는 것을 증명하시겠습니까? 환경 MESA_GL_VERSION_OVERRIDE
변수는 보고된 버전을 사용자가 설정한 버전으로 변경합니다. 3.1
애플리케이션이 불평을 멈추도록 설정합니다 .
이제 모든 OpenGL 기능과 마찬가지로 glGetString
OpenGL 컨텍스트를 활성화해야 합니다. 그러나 이후OpenGL 3.2 출시, OpenGL 컨텍스트를 생성하려면 선언해야 합니다.전진원하는 버전. 이를 통해 프로그램이 이전 버전 (*) 을 사용할 때 최신 버전과의 호환성을 얻을 수 있습니다 .
흥미로운 사실: 보고되는 버전은 glGetString
컨텍스트를 생성할 때 선택한 버전에 따라 달라집니다. 이로 인해 제대로 구현되지 않은 오래된 애플리케이션이 프로필을 명시적으로 선택하지 않고 필요한 버전이 지원되는 최고 버전이라고 믿는 결과가 발생합니다. 애플리케이션이 버전을 선택하지 않으면 이전 버전과의 호환성 컨텍스트가 자동으로 생성됩니다. 내 생각에 이 줄은 다음과 같습니다.
OpenGL version string: 3.0 Mesa 11.2.0
이것이 실제 문제인 경우 업그레이드해도 아무 것도 변경되지 않습니다. 하지만 이 트릭을 유지할 수 있습니다 MESA_GL_VERSION_OVERRIDE=3.1
. 3.1 구성 파일을 로드하고 수정을 기다리는 동안 프로그램이 만족스러운 상태를 유지해야 합니다.
(*) 구성 파일 관련. OpenGL 3.2의 새로운 기능으로 OpenGL 기능 세트는 프로그램이 OpenGL 버전을 요청하고 OpenGL 구현이 해당 버전으로 "다운그레이드"되도록 하여 런타임에 선택할 수 있습니다. 이는 버전 3.2부터 작동하며, 남은 문제는 모든 이전 항목을 어떻게 처리해야 하는가입니다. 특히 OpenGL3이 API에서 크게 개선된 경우(glBegin/gVector 및 항목이 사라졌습니다). API를 핵심 프로필과 호환성 프로필로 분할하도록 선택합니다. 호환성 컨텍스트는 오래되고 사용되지 않는 호출을 유지하는 반면 핵심 컨텍스트는 이를 제거합니다.
그러나 호환성 컨텍스트에 대한 지원은 전적으로 선택 사항이며 대부분의 공급업체는 분할 시점(3.0에서 3.2로)과 대략 일치하는 호환성 컨텍스트를 제공하지만 최신 버전의 호환성 컨텍스트를 만드는 데 신경을 쓰는 사람은 거의 없습니다. @Ruslan이 그의 답변에서 제안한 내용은 다음과 같습니다. Mesa는 OpengGL 3.0에 대한 호환성 프로필만 지원하지만 nVidia는 더 높은 버전도 지원합니다. 이렇게 하면 프로그램을 속이지 않고도 프로그램을 행복하게 유지할 수 있습니다.
답변2
응용 프로그램에 호환성 프로필의 지원이 필요한 경우 Mesa를 사용하면 운이 좋지 않습니다. Mesa는 Core 프로필만 지원하고 OpenGL 3.3 지원을 보여줍니다.
이 애플리케이션을 실행해야 하는 경우 nouveau 대신 공식 독점 nvidia 드라이버를 설치해 볼 수 있습니다. 코어 및 호환성 프로필은 물론 다양한 NVIDIA 관련 확장도 완벽하게 지원합니다.
공식 드라이버를 설치하려면 nvidia-340
Ubuntu(nvidia.com에서 권장하는 GeForce 210 버전)에 패키지된 340 시리즈 드라이버가 필요합니다.