ओपनजीएल को छोड़कर, मैंने कभी भी उन पुस्तकालयों का उपयोग नहीं किया, लेकिन मैं अनुमान लगाने की कोशिश करने जा रहा हूं, जैसे कि आपने विकिपीडिया पृष्ठों को पढ़ा है।
आप मेसा के बारे में सही लगते हैं। यहां हमारे पास अतिरिक्त जानकारी है:
"एक्स विंडो सिस्टम एक कंप्यूटर सॉफ्टवेयर सिस्टम और नेटवर्क प्रोटोकॉल है जो नेटवर्क वाले कंप्यूटरों के लिए एक आधार GUI प्रदान करता है। यह एक हार्डवेयर अमूर्त परत बनाता है।"
"GLX X विंडो सिस्टम द्वारा प्रदान की गई विंडो के भीतर OpenGL का उपयोग करने के इच्छुक कार्यक्रमों को सक्षम करता है।
GLX में तीन भाग होते हैं:
- एक एपीआई जो ओपनग्लग फ़ंक्शन प्रदान करता है।
- एक्स प्रोटोकॉल का एक विस्तार, जो क्लाइंट को 3D भेजने की अनुमति देता है। रेंडरिंग कमांड्स - एक्स सर्वर का एक एक्सटेंशन जो क्लाइंट से रेंडरिंग कमांड प्राप्त करता है और उन्हें इंस्टाल की गई ओपनजीएल लाइब्रेरी में भेजता है
यदि क्लाइंट और सर्वर एक ही कंप्यूटर पर चल रहे हैं और एक त्वरित 3 डी ग्राफिक्स कार्ड उपलब्ध है, तो पूर्व दो घटक कर सकते हैं DRI द्वारा बायपास किया जा सकता है। क्लाइंट प्रोग्राम को फिर सीधे ग्राफिक्स हार्डवेयर तक पहुंचने की अनुमति दी जाती है। "
"डायरेक्ट रेंडरिंग इंफ्रास्ट्रक्चर (DRI) एक्स विंडो सिस्टम में उपयोग किया जाने वाला एक इंटरफ़ेस है, जो उपयोगकर्ता को एक्स सर्वर के माध्यम से डेटा की आवश्यकता के बिना वीडियो हार्डवेयर का उपयोग करने की अनुमति देता है।"
"ओपन इन्वेंटर एक सी ++ 3 डी ग्राफिक्स एपीआई है जिसे ओपनजीएल के लिए प्रोग्रामिंग की एक उच्च परत प्रदान करने के लिए डिज़ाइन किया गया है"
चीजों को सरल बनाने के लिए, आइए डेटा (और आदेशों) के सरलीकृत प्रवाह की कल्पना करें जो उन प्रत्येक एपीआई की प्रविष्टियों और निकासों पर होता है। शुरुआत में हमारे पास आपका एप्लिकेशन प्रोग्राम (संकलित कोड) है, जिसे आप अपने कंप्यूटर से चलाते हैं। अंत में हमारे पास आपकी स्क्रीन पर प्रदर्शित होने वाली छवियां हैं।
ऐसे कई मामले हैं जो मैं इन सवालों के जवाबों पर रोक
लगाऊंगा : -क्या आपके कंप्यूटर में ग्राफिक फ़ंक्शंस को प्रोसेस करने के लिए ग्राफ़िक कार्ड (GPU), या केवल CPU है?
क्या आपका आवेदन एक्स-विंडो सिस्टम की एक विंडो में एम्बेडेड है?
-यदि आप x विंडो सिस्टम का उपयोग करते हैं, तो क्या "x सर्वर" आपके कंप्यूटर पर या नेटवर्क पर किसी अन्य कंप्यूटर पर चल रहा है?
मुझे लगता है कि अगर आपके पास एक है, और आपके पास सॉफ्टवेयर रेंडरिंग के लिए मेसा है) तो आपके पास आपके GPU के लिए ड्राइवर होंगे।
पहला परिदृश्य: आप बिना X विंडो सिस्टम का उपयोग किए बिना 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
यहां जो होता है उसे "सॉफ़्टवेयर रेंडरिंग" कहा जाता है: ग्राफिक्स कमांड को किसी भी ग्राफिक हार्डवेयर द्वारा नियंत्रित नहीं किया जाता है, बल्कि आपके सामान्य सीपीयू द्वारा, आमतौर पर सॉफ्टवेयर चलाने वाले प्रोसेसर द्वारा।
दूसरा परिदृश्य: अब कल्पना करें कि उपरोक्त शर्तों के साथ, आपके पास एक ग्राफिक कार्ड है। प्रवाह इस तरह दिखाई देगा:
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 विंडो सिस्टम फ्लो का परिचय दें, या कम से कम मैं इसे कैसे समझता हूं, यह मेरे द्वारा पढ़ी गई कुछ विकिपीडिया लाइनों पर आधारित है।
चलो ग्राफिक हार्डवेयर और एपीआई के बारे में कुछ समय के लिए भूल जाते हैं। प्रवाह जैसा दिखना चाहिए:
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 क्लाइंट एप्लिकेशन में फैंसी 3D ग्राफिक रेंडरिंग जोड़ना चाहते हैं। यह मुझे लगता है कि एक्स विंडो सिस्टम मूल रूप से ऐसा करने में सक्षम नहीं है, या कम से कम यह एक ओपनजीएल एपीआई फ़ंक्शन के बराबर प्रदर्शन करने के लिए बहुत जटिल कोड की आवश्यकता होगी।
सौभाग्य से आप सिस्टम में OpenGL कमांड के लिए समर्थन जोड़ने के लिए GLX का उपयोग कर सकते हैं। अब आपके पास है:
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)
...
अब आप पहले परिदृश्य में "ओपनजीएल" के बाद उस आखिरी तीर को फिर से जोड़ सकते हैं: आप अपनी स्क्रीन पर 3 डी छवियां प्राप्त कर सकते हैं!
अंत में मुझे लगता है कि डीआरआई के बारे में मुझे क्या समझ है:
यह मेसा को GPU तक पहुंच प्रदान करने की अनुमति देता है, ताकि हमारे पहले परिदृश्य के प्रवाह को संशोधित किया जा सके:
...
↓
Mesa
↓ (forwards OpenGL commands)
DRI
↓ (converts OpenGL commands to GPU commands)
Graphic Card
↓
3D Images on your screen
और यह GLX का उपयोग करते समय प्रवाह को शॉर्ट-सर्किट करने के लिए भी लगता है, इस शर्त को देखते हुए कि इसका सर्वर और क्लाइंट एक ही कंप्यूटर पर है, और आपके पास एक GPU है। उस स्थिति में हमारे चौथे परिदृश्य का ग्राफ बस बन जाएगा:
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
बस !
अब ध्यान रखें कि मैं यूनिक्स वातावरण में विशेषज्ञ नहीं हूं, इसलिए मेरी सबसे अच्छी सलाह यह है कि वे प्रत्येक एपीआई के प्रलेखन का अध्ययन करके यह जान सकें कि वे क्या कर सकते हैं।
पिछले चार्ट को एक में जोड़कर चीजों को समझना आसान हो सकता है। मैं इसे आप के लिए एक अभ्यास के रूप में!