2011-10-20 7 views
6

का आकार बदलना जब GLKView का आकार बदलता है, तो GLKView के बफर और संदर्भ पर होने वाले कुछ पीछे के दृश्य संचालन होते हैं। उस समय के दौरान इन दृश्यों को करने के लिए, GLKView पर ड्राइंग करने के दौरान सही परिणाम नहीं मिलते हैं।एक GLKView

मेरी परिदृश्य में, मैं इतना है कि कभी भी मैं इसे स्क्रीन पर सामग्री है अद्यतन करने की आवश्यकता है, मैं सिर्फ इतना है कि GLKView पर -setNeedsDisplay फोन, एक GLKView है कि setNeedsDisplay सक्षम है। मैं छवियों को आकर्षित करने के लिए GLKView का उपयोग कर रहा हूं, इसलिए यदि मुझे एक अलग आकार के साथ एक छवि खींचने की आवश्यकता है, तो मुझे GLKView के आकार को भी बदलने की आवश्यकता है।

समस्या: जब मैं GLKView का आकार बदलता हूं और उस दृश्य पर setNeedsDisplay पर कॉल करता हूं, तो स्क्रीन पर परिणाम सही नहीं होता है। ऐसा इसलिए है क्योंकि GLKView नई छवि को आकर्षित करने की कोशिश करने से पहले नए आकार के परिवर्तन द्वारा लगाए गए पीछे के दृश्यों को परिष्कृत नहीं किया गया है।

मुझे पर setNeedsDisplay की बजाय performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0 पर कॉल करके यह एक कार्य-आसपास मिला। यह मूल रूप से मुख्य धागे को setNeedsDisplay पर कॉल करने से पहले सभी पीछे के दृश्यों के लिए ओपनजीएल ऑपरेशंस को पूरा करने के लिए मजबूर करता है। हालांकि यह ठीक काम करता है, मैं सोच रहा हूं कि कोई बेहतर समाधान है या नहीं। उदाहरण के लिए, क्या ओपनजीएल कॉल जारी रखने से पहले सभी ओपनजीएल ऑपरेशंस को पूरा करने के लिए थ्रेड इंतजार करने के लिए एक ओपनजीएल कॉल है?

उत्तर

9

समाधान CIContext ऑब्जेक्ट को GLKView के आकार के बाद रीसेट करना था।
कुछ भी नहीं, सबके लिए धन्यवाद!

+2

मैं आपको गले लगा सकता हूं – dxb

+0

आपने इसे कैसे रीसेट किया? इसे खरोंच से दोबारा बनाना? या कॉल करने के लिए एक विशिष्ट विधि है। – flainez

+1

मेरे मामले में, आकार बदलने के बाद मैं अपनी 'सीआईसीएन्टेक्स्ट' ऑब्जेक्ट को इस प्रकार सेट कर रहा था: 'ci_context = [CIContext संदर्भ WithEAGLContext: glkView.context] 'और फिर' [glkView display] 'को कॉल करना। ध्यान दें कि यह बहुत समय पहले था और मैंने इसके बारे में सीखने का प्रयास नहीं किया, इसलिए मान लें कि यह सही दृष्टिकोण नहीं है। – spybart

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