2012-09-20 7 views
13

私たちは、iphone 4とipad 1で比較的遅いFPSを持つ理由を理解しようとしています。 オープンGL解析:論理バッファロードでこのカテゴリの警告が表示されます。要約は、「低速フレームバッファ負荷」です。推奨することは、レンダリングの前にGPUがフレームバッファをロードする必要があるということです。各フレームの冒頭で全画面クリア操作を実行することに失敗していることを推奨しています。しかし、glClearではこれを行っています。論理バッファロード - 低速フレームバッファロード - ios

[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

私は最適化のポイントとしてその解析ポイントしばらくこれを注意してください、私の経験では、それはかなりマイナー一つとなっています。あなたのアプリケーションがなぜゆっくりとレンダリングされているのかはほとんど分かりません。 OpenGL ESドライバの計測器を見て、レンダラ(フラグメント制限付き)またはタイラー(ジオメトリ限定)を最大限に活用しているかどうかを確認してください。 –

+0

私たちはOpenGL ES計測を実行しました。これは、塗りつぶし率(断片)を最大限に引き出しているようです。可視領域を埋める256×256のタイルのみをレンダリングしています。テクスチャを作成しているのか、テクスチャを設定しているのか、それとも他の目的のために、私たちが見る必要のあるリンゴ固有の拡張子はありますか? – user1687195

+1

これに対する更新として、 を設定します。glHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES、GL_FASTEST); それはFPSでかなり助けになったようです。興味深い。 – user1687195

答えて

0

を、私は最後にこれを理解するために管理。

私はGLESupermanというオープンソースライブラリを使用しています。この種の問題をデバッグするのに役立つ優れたライブラリであり、グラフィックを描画するのに非常に高速です。はい、私はそれがなぜ呼び出されたのか分かりません...しかし、それは無料で動作します。 Githubでそれを検索してください。それは非常に頻繁に更新され、iOS 7以降をサポートします。

ので、次の操作を行い、それを実装するためにOK:

// 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]; 
関連する問題