2012-09-20 13 views
13

हम यह पता लगाने की कोशिश कर रहे हैं कि हमारे पास आईफोन 4 और आईपैड पर अपेक्षाकृत धीमी एफपीएस क्यों है। हम अपने खुले जीएल विश्लेषण: लॉजिकल बफर लोड में चेतावनी की इस श्रेणी को देख रहे हैं। सारांश "धीमी फ्रेमबफर लोड" है। सिफारिश कहती है कि फ्रेमबफर को प्रतिपादन से पहले GPU द्वारा लोड किया जाना चाहिए। यह अनुशंसा करता है कि हम प्रत्येक फ्रेम के लिए शुरुआत में एक पूर्णस्क्रीन स्पष्ट संचालन करने में विफल रहे हैं। हालांकि, हम glclear के साथ ऐसा कर रहे हैं।लॉजिकल बफर लोड - धीमी फ्रेमबफर लोड - आईओएस

[EAGLContext setCurrentContext:_context]; 

glBindFramebuffer(GL_FRAMEBUFFER, _defaultFramebuffer); 
glClear(GL_COLOR_BUFFER_BIT); 

// Our OpenGL Drawing Occurs here 

... ... ...

// hint to opengl to not bother with this buffer 
const GLenum discards[] = {GL_DEPTH_ATTACHMENT}; 
glBindFramebuffer(GL_FRAMEBUFFER, _defaultFramebuffer); 
glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, discards); 

// present render 
[_context presentRenderbuffer:GL_RENDERBUFFER]; 

हम वास्तव में एक गहराई या स्टेंसिल बफर का उपयोग नहीं कर रहे हैं।

यह तब होता है जब हम बनावट को टाइल्स के रूप में प्रस्तुत करते हैं और यह हर बार होता है जब हम एक नया टाइल लोड करते हैं। यह हमारे glDrawArrays कमांड को इंगित कर रहा है।

इस चेतावनी से हम कैसे छुटकारा पा सकते हैं इस पर कोई सिफारिशें?

यह सब पर मदद करता है, तो यह है कि हम कैसे परत सेट कर रहे हैं:

eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: 
           [NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking, 
           kEAGLColorFormatRGB565, kEAGLDrawablePropertyColorFormat, 
           nil]; 
+2

मैं नोट करना चाहिए कि जबकि विश्लेषक अंक इस बाहर अनुकूलन का एक बिंदु के रूप में, मेरे अनुभव में यह एक काफी मामूली एक हो गया है:

ठीक है तो इसे लागू करने के लिए, निम्न करें। बाधाएं हैं, इसका कोई संबंध नहीं है कि आपका एप्लिकेशन धीरे-धीरे क्यों प्रस्तुत हो रहा है। ओपनजीएल ईएस चालक उपकरण को देखें और देखें कि क्या आप रेंडरर (खंड सीमित) या टाइलर (ज्यामिति सीमित) को अधिकतम कर रहे हैं या नहीं। –

+0

हमने ओपनजीएल ईएस उपकरण चलाया और ऐसा लगता है कि हम भरने की दर (टुकड़े) को अधिकतम कर रहे हैं। हम केवल 256x256 टाइल्स प्रस्तुत कर रहे हैं जो दृश्य क्षेत्र भर रहे हैं। क्या कोई सेब विशिष्ट एक्सटेंशन है जिसे हमें देखने की आवश्यकता हो सकती है, चाहे वह बनावट बना रहा हो या जिस तरह से हम बनावट बना रहे हैं, या कोई अन्य उद्देश्य? – user1687195

+1

इस के अपडेट के रूप में, हमने glHint (GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES, GL_FASTEST) सेट किया है; और ऐसा लगता है कि एफपीएस के साथ काफी मदद मिली है। – user1687195

उत्तर

0

काम करते हैं और विवेचना का एक बहुत बाद, मैं अंत में यह पता लगाने की कामयाब रहे।

ठीक है मैं GLESuperman नामक एक ओपन सोर्स लाइब्रेरी का उपयोग कर रहा हूं। यह एक महान पुस्तकालय है जो इस तरह के मुद्दों को डीबग करने में मदद करता है और इसका उपयोग ग्राफिक्स ड्राइंग के लिए किया जा सकता है - यह बहुत तेज़ है। हां, मुझे नहीं पता कि इसे क्यों कहा जाता है ... लेकिन यह मुफ़्त है और यह काम करता है। बस इसे गितूब पर खोजें। यह बहुत बार अद्यतन हो जाता है और आईओएस 7 और उच्चतम का समर्थन करता है।

// Import the framework into your Xcode project. 
#import <GLESuperman/GLESuperman.h> 

// Also you will need to import Core Graphics. 
#import <CoreGraphics/CoreGraphics.h> 

// In order to run it in debug mode and get 
// a live detailed report about things like FPS, do the following. 
GLESuperman *debugData = [[GLESuperman alloc] init]; 
[debugData runGraphicDebug withRepeat:YES inBackground:YES]; 

// In order to draw graphics, do the following. 
GLESuperman *graphicView = [[GLESuperman alloc] init]; 
[graphicView drawView:CGRectMake(0, 0, 50, 50]; 

// You can do other things too like add images/etc.. 
// Just look at the library documentation, it has everything. 

[graphicView setAlpha:1.0]; 
[graphicView showGraphic]; 
संबंधित मुद्दे