1

メモリ警告レベル1を取得すると、EAGLViewはopenGLエラー(502および506)の行を吐き出し始め、アプリはクラッシュしませんが、EAGLViewが応答しなくなります。Cocos2d Directorがdrawを呼び出しているため、エラーがスパム送信されています。

これは、メモリ警告コールバックがどのように見えるかです。

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    [[CCDirector sharedDirector] purgeCachedData];
}
  1. 502および506エラーはどういう意味ですか。2。メモリ警告からopenglビューに影響がありますか、それともコードに含まれてはならないものを解放しますか?

[アップデート]

cocos2dからいくつかの冗長なログを取得することができました:

Received memory warning. Level=1
cocos2d: deallocing <CCSprite = 002657B0 | Rect = (0.00,0.00,32.00,32.00) | tag = -1 | atlasIndex = -1>
cocos2d: deallocing <CCTexture2D = 00265EA0 | Name = 4 | Dimensions = 32x32 | Coordinates = (1.00, 1.00)>
cocos2d: deallocing <CCSprite = 00265A70 | Rect = (0.00,0.00,32.00,32.00) | tag = -1 | atlasIndex = -1>
cocos2d: deallocing <CCSprite = 00266050 | Rect = (0.00,0.00,32.00,32.00) | tag = -1 | atlasIndex = -1>
cocos2d: deallocing <LineNode = 0027A630 | Tag = -1>
cocos2d: deallocing <LineNode = 0027AB90 | Tag = -1>
cocos2d: deallocing <LineNode = 0027AF50 | Tag = -1>
cocos2d: deallocing <LineNode = 0027B270 | Tag = -1>
cocos2d: deallocing <LineNode = 00204820 | Tag = -1>
cocos2d: deallocing <PaintingView = 00264970 | Tag = -1>
cocos2d: deallocing <TutorialView = 00266570 | Tag = -1>
cocos2d: deallocing <CCRenderTexture = 00266660 | Tag = -1>
cocos2d: deallocing <CCTexture2D = 00266750 | Name = 5 | Dimensions = 1024x1024 | Coordinates = (1.00, 0.75)>
cocos2d: deallocing <CCSprite = 00266960 | Rect = (0.00,0.00,1024.00,768.00) | tag = -1 | atlasIndex = -1>
cocos2d: deallocing <EAGLView: 0x24aee0; frame = (0 0; 1024 768); transform = [0, -1, 1, 0, 0, 0]; autoresize = RM+BM; layer = <CAEAGLLayer: 0x2492c0>>
cocos2d: deallocing <ES1Renderer = 0024D0E0 | size = 768x1024>
modifying layer that is being finalized - 0x2fab80

これでほとんどすべてです。シーンノード以外はすべて消えているように見えます。

4

1 に答える 1

0

OpenGL エラーの意味については、OpenGL ヘッダーを参照できます。これにより、502 はGL_INVALID_OPERATIONであり、506 はGL_INVALID_FRAMEBUFFER_OPERATION.

あなたの質問や提供されたコードからは何もわかりませんが、フレームバッファを時期尚早に解放している (おそらく実行時にすべきではない) か、呼び出し時に Cocos2D がフレームバッファを解放していると想定していますpurgeCachedData(後者の場合)。私はちょっと疑わしいです)そしてそれを完全に再現することに失敗しています(もしあったとしても)。の実装を確認しEAGLView、必要に応じてフレームバッファの再作成を処理するように設定されているかどうかを確認してください (また、フレームバッファを不必要に解放している場所がないかどうかを確認してください)。

とはいえ、メモリの警告が表示される場合は、それらの原因にも対処する必要があります。

于 2011-07-12T00:40:58.487 に答える