OpenGL dışında bu kütüphaneleri hiç kullanmadım, ama wikipedia sayfalarını okuduğunuz gibi tahmin etmeye çalışacağım.
Mesa konusunda haklý görünüyorsun. İşte ek bilgiler:
"X pencere sistemi, ağa bağlı bilgisayarlar için bir temel GUI sağlayan bir bilgisayar yazılım sistemi ve ağ protokolüdür. Bir donanım soyutlama katmanı oluşturur."
"GLX, X Pencere Sistemi tarafından sağlanan bir pencerede bunu yapmak için OpenGL kullanmak isteyen programlara olanak tanır.
GLX üç bölümden oluşur:
- OpenGL işlevleri sağlayan bir API.
- İstemcinin 3D göndermesini sağlayan X protokolünün bir uzantısı. rendering komutları - X sunucusunun oluşturma komutlarını istemciden alan ve bunları yüklü OpenGL kütüphanesine aktaran bir uzantı
İstemci ve sunucu aynı bilgisayarda çalışıyorsa ve hızlandırılmış bir 3D grafik kartı varsa, eski iki bileşen İstemci programının grafik donanımına doğrudan erişmesine izin verilir. "
"Doğrudan Görüntü Oluşturma Altyapısı (DRI), X Pencere Sisteminde, kullanıcı uygulamalarının X sunucusundan veri aktarılmasına gerek kalmadan video donanımına erişmesine olanak tanıyan bir arabirimdir."
"Open Inventor, OpenGL için daha yüksek bir programlama katmanı sağlamak üzere tasarlanmış bir C ++ 3D grafik API'sıdır"
İşleri kolaylaştırmak için, bu API'ların her birinin giriş ve çıkışlarında gerçekleşen basitleştirilmiş bir veri akışı (ve komutları) düşünelim. En başta bilgisayarınızdan çalıştırdığınız uygulama programınız (derlenmiş kod) vardır. Sonunda ekranınızda görüntülenen görüntüler var.
Bu soruların cevaplarını kısıtlayacağım birkaç durum var: -
grafik fonksiyonlarını işlemek için bilgisayarınızda bir grafik kartı (GPU) veya sadece bir CPU var mı?
-Uygulamanız x-window sisteminin penceresine gömülü mü?
-x pencere sistemini kullanırsanız, "x sunucusu" bilgisayarınızda mı yoksa ağdaki başka bir bilgisayarda mı çalışıyor?
Varsa, GPU'nuz için sürücülere sahip olduğunuzu ve yazılım oluşturma için Mesa'ya sahip olduğunuzu varsayacağım).
İlk senaryo: X Pencere Sistemini kullanmadan OpenInventor ile yazılmış bir grafik uygulamasını çalıştırırsınız ve bir grafik kartınız yoktur. Program akışı şuna benzer:
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
Burada olanlara "yazılım oluşturma" denir: grafik komutu herhangi bir grafik donanımı tarafından değil, genel olarak yazılımınız olan işlemci tarafından kullanılır.
İkinci senaryo: Şimdi yukarıdaki koşullarla aynı şekilde bir grafik kartınız olduğunu hayal edin. Akış daha çok şöyle görünecektir:
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
Şimdi olanlara "donanım hızlandırma" denir, genellikle ilk senaryodan daha hızlıdır.
Üçüncü senaryo: Şimdi okuduğum birkaç Wikipedia satırına dayanarak X Pencere Sistemi akışını veya en azından nasıl düşündüğümü tanıtalım.
Bir süre grafik donanım ve API'yı unutalım. Akış şöyle görünmelidir:
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 Pencere Sistemini kullanırken ekranınızın ve uygulamanızı çalıştırdığınız bilgisayarın "doğrudan" bağlı olmayabileceğini, ancak bir ağ üzerinden bağlanabileceğini unutmayın.
Dördüncü senaryo: bir önceki örnekten X Client uygulamanıza süslü 3B grafik oluşturma eklemek istediğinizi varsayalım. Bana öyle geliyor ki X Pencere Sistemi başlangıçta bunu yapamıyor ya da en azından bir OpenGL API fonksiyonunun eşdeğerini gerçekleştirmek için çok kıvrımlı kod gerektiriyor.
Neyse ki, sisteme OpenGL komutları için destek eklemek için GLX'i kullanabilirsiniz. Artık sizde:
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)
...
Artık ilk senaryoda "OpenGL" den sonraki son oku yeniden bağlayabilirsiniz: Ekranınıza 3D görüntüler alabilirsiniz!
Sonunda DRI hakkında ne düşündüğümü hakkında:
Mesa GPU'ya erişmesine izin veriyor gibi görünüyor, böylece ilk senaryonun akışını şu şekilde değiştiririz:
...
↓
Mesa
↓ (forwards OpenGL commands)
DRI
↓ (converts OpenGL commands to GPU commands)
Graphic Card
↓
3D Images on your screen
Ayrıca, sunucusunun ve istemcisinin aynı bilgisayarda olması ve bir GPU'nuz olması koşuluyla, GLX kullanırken akışı kısa devre yapıyor gibi görünüyor. Bu durumda dördüncü senaryomuzun grafiği basitçe şöyle olur:
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
Bu kadar !
Şimdi Unix ortamlarında uzman olmadığımı unutmayın, bu yüzden en iyi tavsiyem, ne yapabileceğini tam olarak bilmek için bu API'ların her birinin belgelerini incelemek.
Önceki grafiği tek bir grafikle birleştirmek, işlerin daha kolay anlaşılmasını sağlayabilir. Bunu sana bir egzersiz olarak bıraktım!