OpenGL 확장이란 무엇이며, 이를 사용하면 어떤 이점/단점이 있습니까?

StackOverflow https://stackoverflow.com/questions/17352

  •  08-06-2019
  •  | 
  •  

문제

이 질문과 관련하여 OpenGL 확장 사용, 이러한 확장 기능의 목적은 무엇입니까?왜 그것을 사용하고 싶습니까?또한 이를 사용하는 것과 관련된 장단점이나 문제가 있습니까?

도움이 되었습니까?

해결책

OpenGL 표준을 사용하면 개별 공급업체는 새로운 기술이 개발됨에 따라 확장을 통해 추가 기능을 제공할 수 있습니다.확장은 새로운 기능과 새로운 상수를 도입할 수 있으며 기존 OpenGL 기능에 대한 제한을 완화하거나 제거할 수 있습니다.

각 공급업체에는 새 기능과 상수의 이름을 지정하는 데 사용되는 알파벳 약어가 있습니다.예를 들어, NVIDIA의 약어(NV)는 독점 함수 glCombinerParameterfvNV()와 상수 GL_NORMAL_MAP_NV를 정의하는 데 사용됩니다.

둘 이상의 공급업체가 동일한 확장 기능을 구현하는 데 동의하는 경우도 있습니다.이 경우 약어 EXT가 사용됩니다.또한 아키텍처 검토 위원회가 확장을 "축복"하는 일이 발생할 수도 있습니다.그런 다음 표준 확장으로 알려지며 약어 ARB가 사용됩니다.첫 번째 ARB 확장은 버전 1.2.1에 도입된 GL_ARB_multitexture였습니다.공식 확장 승격 경로에 따라 멀티텍스처링은 더 이상 선택적으로 구현되는 ARB 확장이 아니지만 버전 1.3부터 ​​OpenGL 코어 API의 일부였습니다.

확장 기능을 사용하기 전에 프로그램은 먼저 확장 기능의 가용성을 확인한 다음 확장 기능이 정의하는 새로운 기능에 대한 포인터를 얻어야 합니다.이를 수행하는 메커니즘은 플랫폼마다 다르며 프로세스를 단순화하기 위해 GLEW 및 GLEE와 같은 라이브러리가 존재합니다.

다른 팁

OpenGL 확장 새로운 기능이 추가되었습니다 OpenGL 사양, OpenGL 표준 기관과 다양한 그래픽 카드 공급업체에 의해 추가되었습니다.이는 프로그래머에게 새로운 함수 호출이나 변수로 노출됩니다.OpenGL 사양의 모든 새 버전에는 새로운 기능이 포함되어 있으며 (일반적으로) 이전 기능과 확장이 모두 포함되어 있습니다.

OpenGL 확장의 실제 문제는 Windows에만 존재합니다.Microsoft는 이후 출시된 확장 프로그램을 지원하지 않습니다. OpenGL v1.1.그래픽 카드 공급업체는 헤더 파일과 라이브러리를 통해 이 기능의 자체 버전을 제공하여 이 문제를 극복합니다.그러나 이것을 사용하면 연결된 질문에서 알 수 있듯이 약간 고통스러울 수 있습니다.하지만 이 문제는 인기가 높아지면서 대부분 사라졌습니다. 글로우, 이 모든 것을 사용하기 쉬운 패키지로 포장합니다.

최신 OpenGL 확장을 사용하는 경우 이전 그래픽 하드웨어에서는 지원되지 않을 수 있다는 점에 유의하세요.이 외에는 이러한 확장 프로그램을 사용하는 데 따른 다른 단점이 없습니다.표준이 되는 대부분의 확장 기능은 매우 훌륭합니다. 유용한 그리고 그것들을 사용하지 않을 논리는 거의 없습니다.

확장은 일반적으로 그래픽 카드 공급업체가 OpenGL 사양의 다음 개정판이 나올 때까지 기다리지 않고도 OpenGL에 새로운 기능을 추가할 수 있는 방법입니다.다양한 유형의 확장이 있습니다.

  1. 공급업체 확장 - 단 하나의 공급업체만이 특정 유형의 기능을 제공합니다.
    • 예: NV_vertex_program
  2. 다중 공급업체 확장 - 여러 공급업체가 함께 모여 해당 기능에 동의했습니다.
    • 예: EXT_vertex_program
  3. ARB 확장 - OpenGL Architecture Review Board가 확장을 축복했습니다.이러한 유형의 확장이 한동안 지속될 것이라는 합리적인 기대가 있습니다.
    • 예: ARB_vertex_program

확장 프로그램은 이러한 단계를 모두 거칠 필요는 없습니다.때로는 하드웨어 설계가 다른 방식으로 진행되어 확장이 폐기되기 전에 한 공급업체에서만 확장을 구현하는 경우도 있습니다.다른 경우에는 모든 사람이 더 나은 방법을 결정하기 전에 확장을 통해 ARB 상태까지 도달할 수도 있습니다.(그만큼 ARB_vertex_program 예를 들어 접근 방식은 다음의 고급 셰이딩 언어 접근 방식을 선호하여 제외되었습니다. ARB_vertex_shader 핵심 OpenGL 사양에 셰이더를 추가할 때가 되었을 때.) ARB 확장도 영원히 지속되지는 않습니다.오늘은 꼭 필요한 글은 쓰지 않겠습니다 ARB_matrix_palette, 예를 들어.

이상으로 확장 기능, 특히 최신 ARB 및 EXT 확장 기능에 대한 최신 정보를 유지하는 것은 매우 좋은 생각입니다.과거에는 하드웨어를 통한 '빠른 경로' 중 일부가 확장을 통해서만 액세스할 수 있었던 것이 사실이었습니다.마찬가지로, 하드웨어가 수행할 수 있는 모든 기능이 무엇인지 알고 싶다면 공급업체별 확장 프로그램보다 더 좋은 곳은 없습니다.

OpenGL을 막 시작했다면 다음을 조사해 보는 것이 좋습니다.

  • ARB_vertex_buffer_object (정점)
  • ARB_vertex_shader / ARB_fragment_shader / ARB_shader_objects / GLSL 사양(셰이더)

고급:

  • ARB/EXT_framebuffer_object (오프스크린 렌더링)

이것은 모두 핵심에 포함된 기능이지만, 경계가 어디에 있는지 더 잘 느낄 수 있도록 분리하여 보는 것이 좋습니다.(핵심 OpenGL 사양은 이전 버전과 새 버전을 원활하게 혼합하므로 빠른 경로를 유지하고 레거시를 피하고 때로는 소프트웨어 경로에서 구현하려는 경우 매우 중요할 수 있습니다.)

무엇을 하든 사용하기로 결정한 확장 프로그램과 필요한 경우 대체 기능을 적절하게 검사했는지 확인하세요.귀하의 카드에 특정 확장 기능이 있더라도 해당 확장 기능이 다른 공급업체의 카드나 동일한 카드를 사용하는 다른 운영 체제에 있을 것이라는 보장은 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top