2012-03-17 10 views
13

से डिफ़ॉल्ट फ्रेम बफर आईडी प्राप्त करना मैं अपने आईओएस ओपनजीएल ईएस 2.0 प्रोजेक्ट में जीएलकिट/जीएलकेवीव का उपयोग अपने ऐप के डिफ़ॉल्ट एफबीओ/जीवन चक्र को प्रबंधित करने के लिए करता हूं।GLKView/GLKit

डिफॉल्ट एफबीओ (फ्रंट बफर) को बांधने के लिए डेस्कटॉप ओपनजीएल में मैं केवल ग्लिंडफ्रेमबफर (GL_FRAMEBUFFER, 0) को कॉल कर सकता हूं लेकिन आईओएस ऐप में यह मामला नहीं है क्योंकि आपको डिफ़ॉल्ट एफबीओ स्वयं बनाना होगा और उसके पास होगा एक अद्वितीय आईडी;

समस्या GLKit/GLKView कोडिंग शैली GLKView के "bindDrawable" समारोह का उपयोग करने के लिए डिफ़ॉल्ट FBO जो मेरे क्रॉस प्लेटफॉर्म के डिजाइन प्रतिपादन प्रणाली बनाने को सक्रिय करने के लिए मुझे शक्ति है एक छोटे बदसूरत (स्टोर करने के लिए GLKView सूचक के रूप में मेरी ग में शून्य * है ++ इंजन क्लास और पुल इसे हर बार डाला जाता है जब मैं डिफ़ॉल्ट एफबीओ बाइंडिंग करना चाहता हूं)

क्या डिफ़ॉल्ट एफबीओ आईडी प्राप्त करने का कोई तरीका है जो GLKit/GLKView बनाते हैं ताकि मैं स्टोर कर सकूं और डिफ़ॉल्ट फ्रेम बफर को बांधने के लिए इसका उपयोग कर सकूं मेरे कोड में?

सबसे खराब मैं डिफ़ॉल्ट रूप से डिफ़ॉल्ट एफबीओ बनाने और जीएलकिट/जीएलकेवीव को भंग करने के लिए वापस लौट सकता हूं लेकिन यह एक अच्छा ढांचा है जिसे मैं इसका उपयोग करना जारी रखना चाहता हूं।

मेरे खराब अंग्रेजी के लिए खेद है और किसी भी उत्तर के लिए अग्रिम धन्यवाद।

GLint defaultFBO; 
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &defaultFBO); 

उत्तर

22

शायद आप "वर्तमान" फ्रेमबफर आईडी सिर्फ अपने bindDrawable कॉल के बाद, की तरह कुछ फोन करके प्राप्त कर सकते हैं एम्बेडेड सिस्टम के लिए मानक ओपनजीएल और ओपनजीएल के बीच वैचारिक अंतर की आपकी समझ में। // ----------------------------------------------- मुझे लगता है कि यह इंगित करना आवश्यक है कि glbindFramebuffer (GL_FRAMEBUFFER, 0) पर कॉल मुख्य फ्रेमबफर पर प्रतिपादन वापस नहीं करता है, हालांकि यह विंडोज़, यूनिक्स (मैक) या लिनक्स चलाने वाली मशीनों के लिए ऐसा प्रतीत होता है। डेस्कटॉप और लैपटॉप में मुख्य डिफ़ॉल्ट सिस्टम फ्रेमबफर की कोई अवधारणा नहीं है। यह विचार हैंडहेल्ड उपकरणों के साथ शुरू हुआ। जब आप पैरामीटर के रूप में शून्य के साथ ओपनजीएल बाइंड कॉल करते हैं तो आप जो कर रहे हैं वह इस फ़ंक्शन को न्यूल पर सेट कर रहा है। इस तरह आप इस फ़ंक्शन को अक्षम करते हैं। यह glbindTexture (GL_TEXTURE_2D, 0) के साथ समान है; यह संभव है कि कुछ हैंडहेल्ड डिवाइस पर ड्राइवर स्वचालित रूप से मुख्य सिस्टम फ्रेमबफर को सक्रिय करता है जब आप फ्रेमबफर को किसी अन्य को सक्रिय किए बिना NULL पर सेट करते हैं। यह निर्माता द्वारा बनाई गई एक पसंद होगी और ऐसा कुछ नहीं है जिस पर आपको भरोसा करना चाहिए, यह ओपनजीएल ईएस स्पेक का हिस्सा नहीं है। डेस्कटॉप और लैपटॉप के लिए, यह बिल्कुल जरूरी है क्योंकि फ्रेमबफर को अक्षम करने के लिए सामान्य ओपनजीएल प्रतिपादन पर लौटने की आवश्यकता होती है। लेकिन याद रखें! यह किसी भी मुख्य फ्रेमबफर पर वापस नहीं है, आप सक्रिय फ्रेम बफर को बंद कर रहे हैं।

+0

यह काम खूबसूरती से, आपके उत्तर के लिए धन्यवाद (क्षमा करें अभी तक वोट नहीं दे सकता)। –

+0

बहुत बढ़िया, खुशी है कि यह आपके लिए काम करता है। –

0

जवाब यह है कि निश्चित रूप से दिया जाता है उचित समाधान है, लेकिन यह त्रुटि का समाधान नहीं करता:

0

जीएलकिट में डिफ़ॉल्ट फ्रेमबफर को बांधने का सही तरीका पर bindDrawable विधि को कॉल करना है। संदर्भ के आधार पर

[self bindDrawable] या [myglkview bindDrawable]

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

  • कोई संबंधित समस्या नहीं^_^