За винятком OpenGL, я ніколи не використовував ці бібліотеки, але спробую здогадатися, читаючи сторінки вікіпедії, як ви.
Вам здається правильним щодо Меси. Ось додаткова інформація, яку ми маємо:
"Система вікон X - це система комп'ютерного програмного забезпечення та мережевий протокол, що забезпечує основні графічні інтерфейси для мережевих комп'ютерів. Вона створює апаратний рівень абстракції."
"GLX дозволяє програмам, які бажають використовувати OpenGL, зробити це у вікні, передбаченому системою X Window.
GLX складається з трьох частин:
- API, що забезпечує функції OpenGL.
- Розширення протоколу X, що дозволяє клієнту надсилати 3D команди візуалізації - розширення X-сервера, який отримує команди візуалізації від клієнта і передає їх у встановлену бібліотеку OpenGL.
Якщо клієнт і сервер працюють на одному комп’ютері і доступна прискорена графічна карта 3D, попередні два компоненти можуть обхід DRI. Потім клієнтській програмі дозволяється безпосередньо отримувати доступ до графічного обладнання ".
"Інфраструктура прямого рендерінгу (DRI) - це інтерфейс, що використовується в системі X Window, щоб користувацькі програми могли отримати доступ до відео апаратного забезпечення, не вимагаючи передачі даних через X-сервер."
"Open Inventor - це C ++ 3D графічний API, призначений для забезпечення вищого рівня програмування для OpenGL"
Щоб зробити це простішим, давайте уявимо спрощений потік даних (і команд), що відбувається при входах і виходах кожного з цих API. На самому початку у нас є ваша прикладна програма (скомпільований код), яку ви запускаєте зі свого комп'ютера. В кінці у нас є зображення, які відображаються на вашому екрані.
Є кілька випадків, які я стриму на відповіді на ці запитання: - чи має
ваш комп'ютер графічну карту (GPU) або лише процесор для обробки графічних функцій?
-ваша програма вбудована у вікно системи x-window?
-якщо ви використовуєте x-віконну систему, чи працює "x-сервер" на вашому комп'ютері чи на іншому комп'ютері в мережі?
Я припускаю, що у вас є драйвери для вашого GPU, якщо у вас є, і у вас є Mesa для візуалізації програмного забезпечення).
Перший сценарій: ви запускаєте графічну програму, написану на OpenInventor, без використання X Window System, і у вас немає графічної картки. Потік програми був би досить схожий на:
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
Що відбувається тут, називається "рендеринг програмного забезпечення": графічна команда обробляється не будь-яким графічним обладнанням, а натомість звичайним процесором, процесором, який зазвичай працює з програмним забезпеченням.
Другий сценарій: тепер уявіть, що з тими ж умовами, що і вище, у вас є відеокарта. Потік виглядатиме приблизно так:
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
Те, що відбувається зараз, називається "апаратним прискоренням", як правило, швидшим, ніж перший сценарій.
Третій сценарій: тепер давайте введемо потік 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, ваш екран та комп'ютер, з якого ви запускаєте свою програму, можуть бути не «підключені» безпосередньо, але можуть бути підключені через мережу.
Четвертий сценарій: припустимо, ви хочете додати фантазійні 3D-графічні візуалізації до своєї програми X Client із попереднього прикладу. Мені здається, що система X Window спочатку не спроможна цього зробити, або, принаймні, це вимагало б багато перекрученого коду для виконання еквівалента функції 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
А також, схоже, це коротке замикання потоку при використанні 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
Це воно !
Тепер майте на увазі, що я не є експертом у середовищі Unix, тому моя найкраща порада - вивчити документацію кожного з цих API, щоб точно знати, що вони можуть зробити.
Поєднання попереднього діаграми в єдиний може полегшити розуміння. Я дозволю це як вправу для вас!