ओपनजीएल एक राज्य मशीन है। एक OpenGL संदर्भ उस स्थिति को रखता है। राज्य में ऐसी जानकारी होती है जैसे कौन सी बनावट बनावट इकाइयों से जुड़ी होती है, जो वर्तमान एफबीओ के साथ संलग्न होती है, और इस तरह की चीजें।
जब आप वर्तमान संदर्भ सेट करते हैं, तो आप सभी राज्य को पुराने संदर्भ से नए संदर्भ में बदल रहे हैं। यहाँ एक उदाहरण है:
glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);
glfwMakeContextCurrent(window2);
यह क्या करता है window1
वर्तमान का संदर्भ बनाता है । यह तब 2 डी बनावट इकाई को सक्षम करता है और texture1
इसे बांधता है।
आगे यह window2
करंट का संदर्भ बनाता है । यदि आप इसकी सक्षम स्थिति की जांच करने के GL_TEXTURE_2D
लिए झूठे थे (जब तक कि आपने इसे window2
संदर्भ में पहले सक्षम नहीं किया था )। इसी तरह, यदि आप जांचते हैं कि कौन सी बनावट 2 डी बनावट इकाई से बंधी है, तो आप पाएंगे कि कोई बनावट बंधी नहीं थी, या कुछ बनावट बाकी थी texture1
।
मूल रूप से सभी ड्राइंग वर्तमान संदर्भ में होते हैं। यदि आप एक अलग संदर्भ को चालू करते हैं, तो सभी ड्राइंग अब उस संदर्भ में होंगे।
बहु-सूत्रित ओपनजीएल अनुप्रयोग में प्रति थ्रेड के लिए एक ही संदर्भ होना आम है। इस तरह से प्रत्येक थ्रेड अपने संदर्भ में आ रहा है और अन्य थ्रेड्स पर संदर्भों की स्थिति को गड़बड़ नहीं करता है।