2012-09-18 19 views
5

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

तर्क हिस्सेदारी के लिए कहते हैं कि चलो समारोह लगता है कि

void createSpecialTexture(GLuint textureID) 
{ 
    MyOpenGLState state; 
    saveOpenGLState(state); 
    setStateToDefault(); 
    doMyDrawing(); 
    restoreOpenGLState(state); 
} 

क्या MyOpenGLState, saveOpenGLState(state), setStateToDefault() और restoreOpenGLState(state) सुनिश्चित करना है कि doMyDrawing सही ढंग से व्यवहार करेंगे और कि कुछ भी नहीं है कि मैं doMyDrawing में क्या कुछ और को प्रभावित करेगा की तरह दिखना चाहिए कि एक तीसरा पार्टी डेवलपर कर सकता है?

समस्या यह है कि कर दिया गया है मुझे काट ओपन निहित राज्य का एक बहुत है और मुझे यकीन है कि मैं यह सब पर कब्जा व्यक्ति हूं कि है।

अद्यतन: मेरी मुख्य चिंता ओपन ES 2.0 है, लेकिन मैंने सोचा कि मैं सवाल अधिक आम तौर पर

उत्तर

1

फ्रेमबफर चीज़ का इस्तेमाल अपने बनावट प्रस्तुत करना है। इसके बजाय एक नया ईजीएल कोंटेक्स्ट और ईजीएलएसफ़ेस बनाएं। फिर आप अपने ईजीएलएसफ़ेस को बनावट में बदलने के लिए eglBindTexImage का उपयोग कर सकते हैं। इस तरह से आप की गारंटी है कि doMyDrawing से राज्य मुख्य जीएल प्रसंग को दूषित नहीं होगा और वीजा विपरीत।

0

पूछना होगा बचत और बहाल करने, glPushAttrib और glPopAttrib आप बहुत दूर हो जाएगा के रूप में।

हालांकि, आप जीएल को डिफ़ॉल्ट स्थिति में पुनर्स्थापित नहीं कर सकते हैं। हालांकि, बाद से doMyDrawing() का उपयोग करता है और/या केवल राज्य है कि आप करने के लिए पता होना चाहिए संशोधित करता है, तो आप सिर्फ मूल्यों कि आप की आवश्यकता करने के लिए सेट कर सकते हैं।

+2

उन पदावनत नहीं कर रहे हैं? – KillianDS

+0

प्रश्न मुख्य रूप से ओपनजीएल ईएस 2.0 से संबंधित है, जो न तो 'glPushAttrib' या' glPopAttrib' का हिस्सा है (देखें http://www.khronos.org/opengles/sdk/docs/man/)। – Caterpillar

0

यह आपके doMyDrawing(); पर जो कुछ करता है उस पर बहुत निर्भर करता है, लेकिन मूल रूप से आपको सब कुछ (सभी राज्य) को पुनर्स्थापित करना होगा जो आप इस फ़ंक्शन में बदलते हैं। doMyDrawing(); के अंदर क्या हो रहा है, इस पर ध्यान दिए बिना यह अनुमान लगाना असंभव है कि आपको क्या पुनर्स्थापित करना है।

प्रक्षेपण या modelview मैट्रिक्स पर संशोधनों doMyDrawing() अंदर किया जाता है, तो शुरू में जाना glPushMatrix के माध्यम से दोनों GL_PROJECTION और GL_MODELVIEW मैट्रिक्स धक्का और glPopMatrix के माध्यम से ड्राइंग के बाद उन्हें बहाल करने के लिए याद है। glPushAttrib और सही विशेषता के बावजूद आपके द्वारा संशोधित कोई अन्य राज्य पुश और पॉप हो सकता है। किसी भी बनावट, एफबीओ, पीबीओ, आदि को अनबिंड करने के लिए भी याद रखें .. कि आप doMyDrawing() के अंदर बाध्य हो सकते हैं;

+1

ध्यान दें कि GlPush/Pop * OpenGLES 2.0 में मौजूद नहीं है – Tim

संबंधित मुद्दे