Ngoại trừ OpenGL, tôi chưa bao giờ sử dụng các thư viện đó, nhưng tôi sẽ cố gắng đoán, bằng cách đọc các trang wikipedia, giống như bạn đã làm.
Bạn có vẻ đúng về Mesa. Dưới đây là thông tin bổ sung mà chúng tôi có:
"Hệ thống cửa sổ X là một hệ thống phần mềm máy tính và giao thức mạng cung cấp GUI cơ bản cho các máy tính nối mạng. Nó tạo ra một lớp trừu tượng phần cứng."
"GLX cho phép các chương trình muốn sử dụng OpenGL để thực hiện điều đó trong một cửa sổ được cung cấp bởi Hệ thống X Window.
GLX bao gồm ba phần:
- API cung cấp các chức năng OpenGL.
- Một phần mở rộng của giao thức X, cho phép máy khách gửi 3D lệnh kết xuất - Một phần mở rộng của máy chủ X nhận lệnh kết xuất từ máy khách và chuyển chúng đến thư viện OpenGL đã cài đặt
Nếu máy khách và máy chủ đang chạy trên cùng một máy tính và có sẵn thẻ đồ họa 3D, hai thành phần trước có thể được bỏ qua bởi DRI. Chương trình máy khách sau đó được phép truy cập trực tiếp vào phần cứng đồ họa. "
"Cơ sở hạ tầng kết xuất trực tiếp (DRI) là một giao diện được sử dụng trong Hệ thống cửa sổ X để cho phép các ứng dụng người dùng truy cập vào phần cứng video mà không yêu cầu dữ liệu được truyền qua máy chủ X."
"Open Inventor là API đồ họa 3D C ++ được thiết kế để cung cấp lớp lập trình cao hơn cho OpenGL"
Để làm cho mọi thứ đơn giản hơn, hãy tưởng tượng một luồng dữ liệu (và lệnh) được đơn giản hóa xảy ra tại các mục nhập và thoát của từng API đó. Lúc đầu, chúng tôi có chương trình ứng dụng của bạn (mã được biên dịch), mà bạn chạy từ máy tính của mình. Cuối cùng, chúng tôi có hình ảnh được hiển thị trên màn hình của bạn.
Có một số trường hợp tôi sẽ hạn chế trả lời cho những câu hỏi sau: -
máy tính của bạn có card đồ họa (GPU) hay chỉ CPU, để xử lý các chức năng đồ họa?
-Là ứng dụng của bạn được nhúng trong một cửa sổ của hệ thống x-window?
-Nếu bạn sử dụng hệ thống cửa sổ x, "máy chủ x" đang chạy trên máy tính của bạn hay trên một máy tính khác trên mạng?
Tôi sẽ cho rằng bạn có trình điều khiển cho GPU của mình nếu có, và bạn có Mesa để kết xuất phần mềm).
Kịch bản đầu tiên: bạn chạy một ứng dụng đồ họa được viết bằng OpenInventor mà không sử dụng Hệ thống X Window và bạn không có thẻ đồ họa. Luồng chương trình sẽ khá giống với:
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
Điều xảy ra ở đây được gọi là "kết xuất phần mềm": lệnh đồ họa không được xử lý bởi bất kỳ phần cứng đồ họa nào, mà thay vào đó là CPU thông thường của bạn, bộ xử lý thường chạy phần mềm.
Kịch bản thứ hai: bây giờ hãy tưởng tượng rằng với cùng điều kiện như trên, bạn có một card đồ họa. Dòng chảy sẽ trông giống như thế này:
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
Điều xảy ra bây giờ được gọi là "tăng tốc phần cứng", thường nhanh hơn kịch bản đầu tiên.
Kịch bản thứ ba: bây giờ hãy giới thiệu dòng X Window System, hoặc ít nhất là tôi nghĩ nó như thế nào, dựa trên vài dòng Wikipedia tôi đọc.
Hãy quên đi phần cứng đồ họa và API trong một thời gian. Dòng chảy sẽ trông như:
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
Lưu ý rằng khi sử dụng Hệ thống Cửa sổ X, màn hình của bạn và máy tính mà bạn chạy ứng dụng của bạn có thể không được kết nối "trực tiếp", nhưng có thể được kết nối qua mạng.
Kịch bản thứ tư: giả sử bạn muốn thêm kết xuất đồ họa 3D ưa thích vào ứng dụng X Client của mình từ ví dụ trước. Đối với tôi, dường như hệ thống X Window ban đầu không thể thực hiện được điều này hoặc ít nhất nó sẽ cần nhiều mã phức tạp để thực hiện tương đương với chức năng API OpenGL.
May mắn thay, bạn có thể sử dụng GLX để thêm hỗ trợ cho các lệnh OpenGL cho hệ thống. Bây giờ bạn có:
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)
...
Bây giờ bạn có thể kết nối lại mũi tên cuối cùng đó với mũi tên sau "OpenGL" trong kịch bản đầu tiên: bạn có thể nhận được hình ảnh 3D trên màn hình của mình!
Cuối cùng về những gì tôi nghĩ là hiểu về DRI:
Dường như cho phép Mesa có quyền truy cập vào GPU, do đó sẽ sửa đổi luồng kịch bản đầu tiên của chúng tôi thành:
...
↓
Mesa
↓ (forwards OpenGL commands)
DRI
↓ (converts OpenGL commands to GPU commands)
Graphic Card
↓
3D Images on your screen
Và nó dường như cũng làm chập mạch khi sử dụng GLX, với điều kiện máy chủ và máy khách của nó ở trên cùng một máy tính và bạn có GPU. Trong trường hợp đó, đồ thị của kịch bản thứ tư của chúng tôi sẽ trở thành:
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
Đó là nó !
Bây giờ hãy nhớ rằng tôi không phải là chuyên gia trong môi trường Unix, vì vậy lời khuyên tốt nhất của tôi là nghiên cứu tài liệu của từng API đó để biết chính xác những gì chúng có thể làm.
Kết hợp biểu đồ trước đó vào một biểu đồ duy nhất có thể giúp mọi thứ dễ hiểu hơn. Tôi để điều này như một bài tập cho bạn!