इस सवाल का जवाब देना लगभग असंभव है क्योंकि ओपनजीएल केवल एक फ्रंट एंड एपीआई है, और जब तक एक कार्यान्वयन विनिर्देश का पालन करता है और परिणाम इसके अनुरूप होता है, इसे किसी भी तरह से किया जा सकता है।
सवाल यह हो सकता है: एक ओपनजीएल ड्राइवर न्यूनतम स्तर पर कैसे काम करता है। अब यह सामान्य रूप से जवाब देने के लिए फिर से असंभव है, क्योंकि एक ड्राइवर हार्डवेयर के कुछ टुकड़े के करीब है, जो फिर से चीजें कर सकता है, हालांकि डेवलपर ने इसे डिज़ाइन किया है।
तो सवाल यह होना चाहिए था: "यह ओपेन के दृश्यों और ग्राफिक्स सिस्टम के पीछे औसतन कैसे दिखता है?"। आइए नीचे से इसे देखें:
सबसे निचले स्तर पर कुछ ग्राफिक्स डिवाइस हैं। आजकल ये GPU हैं जो अपने ऑपरेशन को नियंत्रित करने वाले रजिस्टरों का एक सेट प्रदान करते हैं (जो कि वास्तव में डिवाइस पर निर्भर है) shaders के लिए कुछ प्रोग्राम मेमोरी, इनपुट डेटा के लिए बल्क मेमोरी (कोने, बनावट आदि) और बाकी हिस्सों के लिए एक I / O चैनल है। उस प्रणाली पर, जिस पर वह डेटा और कमांड स्ट्रीम भेजता / भेजती है।
ग्राफिक्स ड्राइवर GPU स्टेट्स और सभी रिसोर्स एप्लिकेशन प्रोग्राम का ट्रैक रखता है जो GPU का उपयोग करते हैं। इसके अलावा यह रूपांतरण या अनुप्रयोगों द्वारा भेजे गए डेटा को संसाधित करने के लिए ज़िम्मेदार है (जीपीयू द्वारा समर्थित पिक्सेलफॉर्मेट में ग्रंथों को परिवर्तित करें, GPU के मशीन कोड में शेड्स को संकलित करें)। इसके अलावा यह आवेदन कार्यक्रमों के लिए कुछ सार, ड्राइवर पर निर्भर इंटरफ़ेस प्रदान करता है।
फिर ड्राइवर पर निर्भर OpenGL क्लाइंट लाइब्रेरी / ड्राइवर है। विंडोज पर यह प्रॉक्सी द्वारा opengl32.dll के माध्यम से लोड हो जाता है, यूनिक्स सिस्टम पर यह दो स्थानों पर रहता है:
- X11 GLX मॉड्यूल और ड्राइवर निर्भर GLX ड्राइवर
- और /usr/lib/libGL.so में सीधे रेंडरिंग के लिए कुछ ड्राइवर पर निर्भर सामान हो सकते हैं
MacOS X पर यह "OpenGL फ्रेमवर्क" होता है।
यह वह हिस्सा है जो OpenGL कॉल का अनुवाद करता है कि आप इसे कैसे (2) में वर्णित ड्राइवर के हिस्से में ड्राइवर विशिष्ट कार्यों में कॉल करते हैं।
अंत में विंडोज में वास्तविक OpenGL API लाइब्रेरी, opengl32.dll, और Unix /usr/lib/libGL.so पर; यह ज्यादातर ओपनजीएल कार्यान्वयन के लिए उचित आदेशों को पूरा करता है।
वास्तविक संचार कैसे होता है इसका सामान्यीकरण नहीं किया जा सकता है:
यूनिक्स में 3 <-> 4 कनेक्शन सॉकेट्स के ऊपर भी हो सकते हैं (हाँ, यह हो सकता है, और यदि आप चाहते हैं तो नेटवर्क पर जा सकते हैं) या साझा मेमोरी के माध्यम से। विंडोज में इंटरफ़ेस लाइब्रेरी और ड्राइवर क्लाइंट दोनों को प्रोसेस एड्रेस स्पेस में लोड किया जाता है, इसलिए यह इतना संचार नहीं है लेकिन सरल फ़ंक्शन कॉल और चर / पॉइंटर पासिंग है। MacOS X में यह Windows के समान है, केवल यह कि OpenGL इंटरफ़ेस और ड्राइवर क्लाइंट के बीच कोई अलगाव नहीं है (यही कारण है कि MacOS X नए OpenGL संस्करणों के साथ रखने के लिए इतना धीमा है, इसे हमेशा नया वितरित करने के लिए पूर्ण ऑपरेटिंग सिस्टम अपग्रेड की आवश्यकता होती है ढांचा)।
कम्यूनिकेशन betwen 3 <-> 2 ioctl के माध्यम से जा सकते हैं, पढ़ सकते हैं / लिख सकते हैं, या कुछ मेमोरी को प्रोसेस एड्रेस स्पेस में मैप कर सकते हैं और जब भी उस मेमोरी में बदलाव होते हैं तो कुछ ड्राइवर कोड को ट्रिगर करने के लिए MMU को कॉन्फ़िगर किया जा सकता है। यह किसी भी ऑपरेटिंग सिस्टम पर काफी समान है क्योंकि आपको हमेशा कर्नेल / यूजरलैंड सीमा को पार करना पड़ता है: आखिरकार आप कुछ सिसली के माध्यम से जाते हैं।
सिस्टम और GPU के बीच संचार परिधीय बस और इसे परिभाषित करने वाली एक्सेस विधियों के माध्यम से होता है, इसलिए PCI, AGP, PCI-E, आदि, जो पोर्ट- I / O, मेमोरी मैप्ड I / O, DMA, IRQ के माध्यम से काम करते हैं।