2012-02-22 18 views
31

मैं जीएलकिट का उपयोग करने के लिए एप्पल जीएलपीेंट उदाहरण पोर्ट बंद करने की कोशिश कर रहा हूं। UIView का उपयोग करके, दृश्य के CAEAGLLayer को वापस करना संभव है और खींचने योग्य प्रॉपर्टीज को KEAGLDrawablePropertyRetainedBacking को शामिल करने के लिए सेट करें। इसके रूप में रेंडर बफर प्रस्तुत करने के बाद, खींचने योग्य सामग्रियों को बनाए रखने का प्रभाव पड़ता है। इस संपत्ति को हटाने के परिणामस्वरूप ड्रॉ कॉल के बाद ड्रॉ कॉल के बाद अलग-अलग बफर के लिए खींचा जा रहा है।GLKView सेट करने योग्य गुण

समस्या यह है कि यह वास्तव में मेरा मुद्दा है जो अब मैं अपने जीएलके व्यू में कर रहा हूं, लेकिन ऐसा लगता है कि आकर्षित करने योग्य गुणों को सेट करने का कोई तरीका नहीं है। एक CAEAGLLayer लौटने और गुणों को सेट करने का कोई प्रभाव नहीं पड़ता है और मुझे बनाए रखने के लिए GLKView के किसी भी प्रासंगिक गुण नहीं दिखते हैं।

क्या कोई और इस पर आ गया है या कोई समाधान है?

+0

मेरे पास कोई समाधान नहीं है, लेकिन ध्यान रखें कि रेटिना मोड में नए आईपैड में एक ड्राइवर बग है जहां बैकिंग मोड को बरकरार रखा गया है। यहां चर्चा और कार्यवाही है: http://stackoverflow.com/questions/9753230/ipad-3-opengl-bug-with-keagldrawablepropertyretainedbacking-and-retina –

+0

क्या आप प्रतिनिधि विधि में चित्रित कर रहे हैं? क्या आप एक स्पष्ट कदम का उपयोग कर रहे हैं? – nielsbot

+0

मुझे ईमानदार होने की याद नहीं है। मैं सिर्फ एक CAEAGLLayer का उपयोग कर समाप्त हुआ लेकिन मैट्रिक्स गणित और बनावट लोडिंग के लिए जीएलकिट का इस्तेमाल किया। – Brett

उत्तर

2

सुनिश्चित नहीं हैं कि अगर यह काम करेगा, लेकिन यहाँ कुछ कोड हमारे पास है:

GLKView * const view = (GLKView *)self.view; 
view.context = self.context; 
view.delegate = self; 
view.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888; 
view.drawableDepthFormat = GLKViewDrawableDepthFormat24; 
view.drawableMultisample = GLKViewDrawableMultisampleNone; 
self.preferredFramesPerSecond = 30; 

[EAGLContext setCurrentContext:self.context]; 
CAEAGLLayer * const eaglLayer = (CAEAGLLayer*) view.layer; 
eaglLayer.opaque = YES; 

आप eaglLayer.drawableProperties उपयोग करने में सक्षम होना चाहिए। उम्मीद है कि आपको इच्छित पैरामीटर सेट करने देता है।

+0

उपहार के लिए धन्यवाद! – Liron

+0

यह उत्तर वास्तव में KEAGLDrawablePropertyRetainedBacking (कम से कम, आईपैड 3 पर) सेट करने के लिए काम नहीं करता है। GLKView परत गुणों को ओवरराइट करता है जब यह संदर्भ से रेंडरबफर स्टोरेज उत्पन्न करता है। मैंने नीचे एक उत्तर पोस्ट किया है जिससे आप इसे प्राप्त कर सकें। – simeon

-2

हाय यह एक

GLKView * const view = (GLKView *)self.view; 
view.context = self.context; 
view.delegate = self; 
view.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888; 
view.drawableDepthFormat = GLKViewDrawableDepthFormat24; 
view.drawableMultisample = GLKViewDrawableMultisampleNone; 
self.preferredFramesPerSecond = 10; 

[EAGLContext setCurrentContext:self.context]; 
CAEAGLLayer * const eaglLayer = (CAEAGLLayer*) view.layer; 
+1

यहां नई जानकारी क्या है? –

8

करने का प्रयास करें यदि आप एक GLKView में kEAGLDrawablePropertyRetainedBacking मिल अपनी परियोजना के लिए निम्न श्रेणी को जोड़ना चाहते हैं।

@interface CAEAGLLayer (Retained) 

@end 

@implementation CAEAGLLayer (Retained) 

- (NSDictionary*) drawableProperties 
{ 
    return @{kEAGLDrawablePropertyRetainedBacking : @(YES)}; 
} 

@end 

GLKView द्वारा बनाए रखा CAEAGLLayer पर drawableProperties स्थापना काम नहीं करता क्योंकि GLKView उन गुणों को अधिलेखित करता है जब वह अपने drawable बांधता है और इसके भंडारण प्रस्तुत करना उत्पन्न करता है। इस विधि का उपयोग करने से GLKView को आपकी श्रेणी के लौटे जाने योग्य प्रॉपर्टी का उपयोग करने के लिए मजबूर किया जाता है।

+0

क्या यह गहराई बफर पढ़ने के लिए भी काम करेगा? मैंने इस कोड के साथ और बिना कोशिश की, लेकिन जेड मान हमेशा पढ़े जाते हैं? – Bram

7

शिमोन का उत्तर काम करता है लेकिन किसी एप्लिकेशन में सभी ईएजीएल-आधारित विचारों के व्यवहार को बदलता है। मैं कुछ विचारों जो समर्थन के लिए मजबूर की जरूरत है और दूसरों को जो नहीं करते हैं, तो मैं GLKView और CEAGLLayer की उपवर्गों बनाने, इस तरह से एक अलग समाधान के साथ आया था:

@interface RetainedEAGLLayer : CAEAGLLayer 
@end 

@implementation RetainedEAGLLayer 
- (void)setDrawableProperties:(NSDictionary *)drawableProperties { 
    // Copy the dictionary and add/modify the retained property 
    NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] initWithCapacity:drawableProperties.count + 1]; 
    [drawableProperties enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop) { 
     // Copy all keys except the retained backing 
     if (![key isKindOfClass:[NSString class]] 
     || ![(NSString *)key isEqualToString:kEAGLDrawablePropertyRetainedBacking]) 
      [mutableDictionary setObject:object forKey:key]; 
    }]; 
    // Add the retained backing setting 
    [mutableDictionary setObject:@(YES) forKey:kEAGLDrawablePropertyRetainedBacking]; 
    // Continue 
    [super setDrawableProperties:mutableDictionary]; 
    [mutableDictionary release]; 
} 
@end 

और इस

@interface RetainedGLKView : GLKView 
@end 

@implementation RetainedGLKView 
+ (Class)layerClass { 
    return [RetainedEAGLLayer class]; 
} 
@end 

अब मैं उन विचारों के लिए GLKView के बजाय RetainedGLKView का उपयोग कर सकता हूं जहां मैं एक सतत बैकिंग को मजबूर करना चाहता हूं।

+0

धन्यवाद, आपका समाधान मेरे लिए काम किया। – lppier

1

अपने GLKView कार्यान्वयन फ़ाइल में:

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    if ((self = [super initWithCoder:aDecoder])) 
    { 
     _eaglLayer = (CAEAGLLayer *)self.layer; 

     _eaglLayer.opaque = TRUE; 
     _eaglLayer.drawableProperties = @{ kEAGLDrawablePropertyRetainedBacking : [NSNumber numberWithBool:NO], 
              kEAGLDrawablePropertyColorFormat  : kEAGLColorFormatRGBA8}; 

    } 
    return self; 
} 

मैं कैसे लोगों को इतनी जटिल बातें बनाने के लिए प्रबंधन को पता नहीं है; यह इस तरह है, और केवल यह।

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

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