2012-07-23 27 views
10

[आईपैड -3] - [iOS 5.0] - [ऑब्जेक्टिव-सी] - [XCode 4.3.3] - [Cocos2D] - [ओपन | ES 2.0]क्यों glbindFramebuffer (GL_FRAMEBUFFER, 0) परिणाम cocos2D-iphone में रिक्त स्क्रीन में होगा?

मैं कैसे उपयोग करने के लिए सीख रहा हूँ ओपन | ES 2.0 और फ्रेम बफर वस्तुओं (FBO) रों

जानकारी पर ठोकर खाई है मैं Cocos2D जो ड्राइंग के लिए अतिरिक्त कल्पना से निपटने का एक बहुत है के साथ काम कर रहा हूँ। मुझे कल्पना है कि यह इस मुद्दे से जुड़ा हो सकता है। 'डिफ़ॉल्ट' कोकोस के लिए फ्रेम बफर वास्तविक डिफ़ॉल्ट फ्रेम बफर है कि स्क्रीन को ड्रॉ से अलग है, तो यह एक में परिणाम गलत आकर्षित

मेरे समस्या सकता है: मेरी "HelloWorld की init समारोह में । एम "कक्षा, अगर मैं" glbindFrameBuffer (GL_FRAMEBUFFER, 0) रखता हूं; " कहीं भी, मुझे बस एक खाली स्क्रीन मिलती है!

-(id) init 
{ 
if((self=[super init])) 
{ 

CGSize winSize = [CCDirector sharedDirector].winSize; 

glBindFramebuffer(GL_FRAMEBUFFER, 0); 


CCSprite * spriteBG = [[CCSprite alloc] initWithFile:@"cocos_retina.png"]; 
spriteBG.position = ccp(512,384); 
//[self addChild:spriteBG z:1]; 

[self scheduleUpdate]; 
_mTouchDown = NO; 


_mSprite = [CCSprite spriteWithTexture:_mMainTexture]; 
_mSprite.position = ccp(512,384); 
[self addChild:_mSprite]; 

self.isTouchEnabled = YES; 

} return self;} 

क्या मुझे कुछ बुनियादी और स्पष्ट याद आ रही है?

जहां तक ​​मैंने सीखा है, फ़ंक्शन "glBindFramebuffer (GL_FRAMEBUFFER, 0);" बस फ्रेमबफर को 0 पर सेट करने से डिफ़ॉल्ट फ्रेमबफर लागू होता है जो स्क्रीन पर खींचता है।

+0

मुझे लगता है कि आप यहां नए हैं। स्वागत हे! यह इंगित करने का तरीका है कि आपकी समस्या हल हो गई है, एक जवाब स्वीकार करना है, सवाल में जवाब न डालें और शीर्षक को "हल" शब्द जोड़ें। अपने स्वयं के प्रश्न का उत्तर पोस्ट करना और स्वीकार करना बिल्कुल ठीक है। (आपको ऐसा करने के लिए कुछ घंटों का इंतजार करना पड़ सकता है; नए उपयोगकर्ताओं पर कुछ अस्थायी प्रतिबंध हैं।) –

+0

मुझे पता नहीं था कि यह (हल) चीज करने के लिए खराब शिष्टाचार था। मैंने इसे पहले से ही ऐसा कई बार देखा है, इसलिए मुझे लगता है कि यह कैसे था pplz ने खुद के लिए यह किया था। मैंने खुद को जवाब देने की कोशिश की, 8 घंटे प्रतीक्षा करें। और मैं काम पर हूं और ऐसी चीजों के लिए कोई धैर्य नहीं है। मैं अब संपादित करूँगा और जवाब देने के लिए कल फिर कोशिश करूँगा। अगर यह अभी भी काम नहीं करता है, तो मैं इसे छोड़ दूंगा। – JThora

+0

मैंने आपकी आखिरी पंक्ति संपादित की है; जैसा लिखा है, यह दर्शाता है कि आपके पास समस्या का समाधान नहीं है। –

उत्तर

24

समस्या यह थी कि या तो आईओएस या कोकोस 2 डी (या दोनों) में एक अद्वितीय फ्रेमबफर हो सकता है। उस अद्वितीय फ्रेम बफर का हैंडल 0 से अलग होगा, और हर बार अलग हो सकता है।

इसे हल करने के लिए, मुझे वर्तमान एफबीओ के हैंडल को पकड़ना है, मेरी कस्टम फ्रेमबफर सामग्री करें और फिर पूरा होने के बाद एफबीओ के हैंडल को दोबारा लागू करें।

मूल फ्रेम बफर वस्तु

GLint oldFBO; 

सौंपें वर्तमान में उपयोग किया FBO के हैंडल चर 'oldFBO'

को (जो एक 'चमक' है) संदर्भ के लिए एक चर बनाता है
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO); 

//here is when you would create or manipulate custom framebuffers.// 

उसके बाद, आप मूल एफबीओ को वर्तमान फ्रेमबफ के रूप में सेट करते हैं फेर

glBindFramebuffer(GL_FRAMEBUFFER, oldFBO); 
+1

हाँ! धन्यवाद! यह एंड्रॉइड पर भी काम करता है। – Tyguy7

+0

यह मुझे पागल कर रहा था ... मुझे बचाने के लिए धन्यवाद! – Matferib

+0

GAH! इस मूर्खता के लिए आधा दिन खो गया ... महत्वपूर्ण सुराग के लिए बहुत धन्यवाद। –