"MakeContextCurrent" वास्तव में क्या करता है?


12

मैं उस फंक्शन को लेकर काफी उलझन में हूं। GLFW संदर्भ संदर्भ इस प्रकार है :

यह फ़ंक्शन कॉलिंग थ्रेड पर OpenGL या OpenGL ES को निर्दिष्ट विंडो करंट का संदर्भ बनाता है। एक संदर्भ को एक बार में केवल एक ही धागे पर वर्तमान बनाया जा सकता है और प्रत्येक सूत्र में एक बार में केवल एक ही वर्तमान संदर्भ हो सकता है।

लेकिन इससे मुझे ज्यादा मदद नहीं मिलती।
क्या यह glBind-तरीकों की तरह काम कर सकता है ? (glBindBuffer, glBindVertexArray और इतने पर)

जवाबों:


21

ओपनजीएल एक राज्य मशीन है। एक OpenGL संदर्भ उस स्थिति को रखता है। राज्य में ऐसी जानकारी होती है जैसे कौन सी बनावट बनावट इकाइयों से जुड़ी होती है, जो वर्तमान एफबीओ के साथ संलग्न होती है, और इस तरह की चीजें।

जब आप वर्तमान संदर्भ सेट करते हैं, तो आप सभी राज्य को पुराने संदर्भ से नए संदर्भ में बदल रहे हैं। यहाँ एक उदाहरण है:

glfwMakeContextCurrent(window1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture1);

glfwMakeContextCurrent(window2);

यह क्या करता है window1वर्तमान का संदर्भ बनाता है । यह तब 2 डी बनावट इकाई को सक्षम करता है और texture1इसे बांधता है।

आगे यह window2करंट का संदर्भ बनाता है । यदि आप इसकी सक्षम स्थिति की जांच करने के GL_TEXTURE_2Dलिए झूठे थे (जब तक कि आपने इसे window2संदर्भ में पहले सक्षम नहीं किया था )। इसी तरह, यदि आप जांचते हैं कि कौन सी बनावट 2 डी बनावट इकाई से बंधी है, तो आप पाएंगे कि कोई बनावट बंधी नहीं थी, या कुछ बनावट बाकी थी texture1

मूल रूप से सभी ड्राइंग वर्तमान संदर्भ में होते हैं। यदि आप एक अलग संदर्भ को चालू करते हैं, तो सभी ड्राइंग अब उस संदर्भ में होंगे।

बहु-सूत्रित ओपनजीएल अनुप्रयोग में प्रति थ्रेड के लिए एक ही संदर्भ होना आम है। इस तरह से प्रत्येक थ्रेड अपने संदर्भ में आ रहा है और अन्य थ्रेड्स पर संदर्भों की स्थिति को गड़बड़ नहीं करता है।


1
मेरे पास 15 से अधिक अंक नहीं हैं, इसलिए मैं आपके भयानक जवाब को वोट नहीं दे सकता। धन्यवाद!!!
एड्रियन

1
कोई चिंता नहीं। मैं खुशी से मदद कर सकता है।
user1118321

मैंने यह टिप्पणी पढ़ी इसलिए मैंने कंप्यूटरग्राफिक्स ज्वाइन किया और इस उत्तर को उकेरा।
जे मैडिसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.