OpenGL을 제외하고는 그 라이브러리를 사용한 적이 없지만, 위키 백과 페이지를 읽음으로써 추측하려고합니다.
당신은 메사에 대해 옳은 것 같습니다. 추가 정보는 다음과 같습니다.
"X 윈도우 시스템은 네트워크 컴퓨터에 기본 GUI를 제공하는 컴퓨터 소프트웨어 시스템 및 네트워크 프로토콜입니다. 하드웨어 추상화 계층을 만듭니다."
"GLX를 사용하면 X Window 시스템에서 제공하는 창 내에서 OpenGL을 사용하려는 프로그램이 그렇게 할 수 있습니다.
GLX는 다음 세 부분으로 구성됩니다
.
- OpenGL 기능을 제공하는 API- 클라이언트가 3D를 보낼 수있는 X 프로토콜의 확장 렌더링 명령-클라이언트에서 렌더링 명령을 수신하여 설치된 OpenGL 라이브러리로 전달하는 X 서버의 확장
클라이언트와 서버가 동일한 컴퓨터에서 실행되고 가속 3D 그래픽 카드를 사용할 수있는 경우, 이전 두 구성 요소는 클라이언트 프로그램은 그래픽 하드웨어에 직접 액세스 할 수 있습니다. "
"DRI (Direct Rendering Infrastructure)는 X 윈도우 시스템에서 사용되는 인터페이스로, 사용자 응용 프로그램이 X 서버를 통해 데이터를 전달하지 않고도 비디오 하드웨어에 액세스 할 수 있습니다."
"Open Inventor는 OpenGL에 더 높은 수준의 프로그래밍을 제공하도록 설계된 C ++ 3D 그래픽 API입니다."
일을 단순화하기 위해 각 API의 시작 및 종료에서 발생하는 단순화 된 데이터 흐름 (및 명령)을 상상해 봅시다. 맨 처음에는 컴퓨터에서 실행되는 응용 프로그램 (컴파일 된 코드)이 있습니다. 마지막으로 화면에 이미지가 표시됩니다.
이러한 질문에 대한 답변을 제한 할 수있는 몇 가지 경우가 있습니다
.-컴퓨터에 그래픽 기능을 처리하기 위해 그래픽 카드 (GPU) 또는 CPU 만 있습니까?
-응용 프로그램이 x- 창 시스템의 창에 포함되어 있습니까?
-x 윈도우 시스템을 사용하는 경우 "x 서버"가 컴퓨터 또는 네트워크의 다른 컴퓨터에서 실행되고 있습니까?
GPU 드라이버가 있으면 GPU 용 드라이버가 있고 소프트웨어 렌더링에 Mesa가 있다고 가정합니다.
첫 번째 시나리오 : X Window 시스템을 사용하지 않고 OpenInventor로 작성된 그래픽 응용 프로그램을 실행하며 그래픽 카드가 없습니다. 프로그램 흐름은 다음과 매우 유사합니다.
Your application
↓ (uses functions of)
OpenInventor
↓ (calls functions declared by)
OpenGL
↓ (redirects function calls to implementation defined by)
Mesa
↓ (implemented OpenGL functions to be run on the CPU)
[Probably] Operating System rendering API
↓
3D Images on your screen
여기서 발생하는 것을 "소프트웨어 렌더링"이라고합니다. graphics 명령은 그래픽 하드웨어가 아니라 일반적으로 소프트웨어를 실행하는 프로세서 인 일반적인 CPU에 의해 처리됩니다.
두 번째 시나리오 : 이제 위와 동일한 조건에서 그래픽 카드가 있다고 상상해보십시오. 흐름은 다음과 같습니다.
Your application
↓ (uses functions of)
OpenInventor
↓ (calls functions declared by)
OpenGL
↓ (redirects function calls to implementation defined by)
Proprietary Drivers
↓ (converts OpenGL commands to GPU commands)
Graphic Card
↓
3D Images on your screen
이제 발생하는 것을 "하드웨어 가속"이라고하며 일반적으로 첫 번째 시나리오보다 빠릅니다.
세 번째 시나리오 : 이제 내가 읽은 몇 개의 Wikipedia 라인을 기반으로 X Window System 흐름 또는 적어도 내가 생각하는 방식을 소개하겠습니다.
그래픽 하드웨어와 API는 잠시 잊어 버리자. 흐름은 다음과 같아야합니다.
Your application (X Window System sees it as an "X Client")
↓ (sends requests defined by the X Window System Core Protocol)
X Server
↓ (convert your request to graphic commands)
[Probably] Operating System rendering API
↓
Windows or 2D images on your screen
X Window System을 사용할 때 화면과 응용 프로그램을 실행하는 컴퓨터는 "직접"연결되어 있지 않지만 네트워크를 통해 연결될 수 있습니다.
네 번째 시나리오 : 이전 예제에서 X 클라이언트 애플리케이션에 멋진 3D 그래픽 렌더링을 추가하려고한다고 가정하십시오. X Window System은 원래이 작업을 수행 할 수 없거나 적어도 OpenGL API 함수와 동등한 기능을 수행하려면 많은 복잡한 코드가 필요합니다.
다행히 GLX를 사용하여 OpenGL 명령에 대한 지원을 시스템에 추가 할 수 있습니다. 당신은 지금 :
Your application
↓ (sends graphic requests defined by the "GLX extension to the X Protocol")
X Server with the GLX extension
↓ (convert your request to OpenGL commands)
OpenGL
↓ (redirects function calls to implementation defined by)
...
이제 첫 번째 시나리오에서 마지막 화살표를 "OpenGL"다음 화살표로 다시 연결할 수 있습니다. 화면에서 3D 이미지를 얻을 수 있습니다!
마지막으로 내가 DRI에 대해 이해하는 것에 대해 :
Mesa가 GPU에 액세스 할 수있게하여 첫 번째 시나리오의 흐름을 다음과 같이 수정합니다.
...
↓
Mesa
↓ (forwards OpenGL commands)
DRI
↓ (converts OpenGL commands to GPU commands)
Graphic Card
↓
3D Images on your screen
또한 서버와 클라이언트가 동일한 컴퓨터에 있고 GPU가 있다는 조건에서 GLX를 사용할 때 흐름을 단락시키는 것처럼 보입니다. 이 경우 네 번째 시나리오의 그래프는 단순히 다음과 같습니다.
Your application
↓ (sends graphic requests defined by the "GLX extension to the X Protocol")
DRI
↓ ("catches" OpenGL commands and converts them to GPU commands)
Graphic Card
↓
3D Images on your screen
그게 다야!
이제 유닉스 환경의 전문가는 아니라는 점을 명심하십시오. 따라서 각 API의 문서를 연구하여 수행 할 수있는 작업을 정확하게 아는 것이 좋습니다.
이전 차트를 하나의 차트로 결합하면 이해하기가 더 쉬워 질 수 있습니다. 나는 당신에게 연습으로 보자!