यहां और अन्य जगहों के बहुत सारे उत्तरों के विपरीत, glUseProgram (0) सुरक्षित नहीं है। आप प्रतिपादन स्थिति को किसी अमान्य प्रोग्राम ऑब्जेक्ट पर सेट करने के लिए इसका उपयोग कर सकते हैं, लेकिन यदि प्रतिपादन होने पर यह अभी भी बाध्य है, तो व्यवहार अपरिभाषित है।
यह गलती से गलत प्रोग्राम का उपयोग करने से बचने में मदद के लिए उपयोगी हो सकता है, लेकिन आपको इसका उपयोग "फिक्स्ड-फ़ंक्शन मोड का उपयोग" करने के लिए नहीं करना चाहिए। ज्यादातर मामलों में यह होता है, लेकिन यह spec द्वारा परिभाषित नहीं किया गया है और इस पर भरोसा नहीं किया जाना चाहिए।
से
doc:
"अगर कार्यक्रम शून्य है, तो मौजूदा प्रतिपादन राज्य एक अवैध कार्यक्रम वस्तु को संदर्भित करता है और शेडर निष्पादन के परिणामों undefined
हैं" इसलिए
परिणाम ओएस, ड्राइवर और ग्राफिक्स कार्ड के लिए पूरी तरह से विशिष्ट हैं। कई मामलों में यह फिक्स्ड-फ़ंक्शन मोड पर वापस आता है। हालांकि, यह बस के रूप में आसानी से पिछले शेडर, रखने कचरा प्रस्तुत करना, या एक segfault कारण बन सकता है (मैंने देखा है ऐसा)।
तो दूसरे शब्दों में मुझे सिर्फ 'glUseProgram (0)' कॉल नहीं करना चाहिए? – user11171
@ user11171: नहीं। जब आप प्रोग्राम को बाध्य नहीं करना चाहते हैं तो आपको इसे कॉल करना चाहिए। ऐसा करके, आप गलती से ऐसे प्रोग्राम के साथ प्रतिपादन को रोकते हैं जिसका इरादा नहीं था (यानी: आप इच्छित प्रोग्राम के साथ 'ग्लूसेप्रोग्राम' को कॉल करना भूल गए थे)। जब आप रेंडरिंग समाप्त कर लेंगे तो आप आमतौर पर इसे कॉल करेंगे। –