Предупреждение о нарушении памяти iOS EAGLView - PullRequest
2 голосов
/ 12 июля 2011

Когда я получаю предупреждение уровня памяти-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

Так что это почти все.похоже, что все, кроме узла сцены исчезает.

1 Ответ

0 голосов
/ 12 июля 2011

Что касается ошибок OpenGL, вы можете обратиться к своим заголовкам OpenGL, которые скажут вам, что 502 - это GL_INVALID_OPERATION, а 506 - GL_INVALID_FRAMEBUFFER_OPERATION.

Я не вижу ничего из вашего вопроса или предоставленного кода, но я предполагаю, что вы либо преждевременно освобождаете свой кадровый буфер (чего, вероятно, не следует делать во время выполнения), либо Cocos2D освобождает ваш кадровый буфер при вызове purgeCachedData (последнее, в чем я сомневаюсь) и неспособность воссоздать его полностью (если вообще). Возможно, вы захотите проверить вашу реализацию EAGLView и посмотреть, настроена ли она на обработку воссоздания кадрового буфера, когда это необходимо (и посмотреть, есть ли где-то, что вы освобождаете кадровый буфер без необходимости).

Тем не менее, если вы получаете предупреждения памяти, вы можете обратиться к их источнику.

...