Cocos3d: сбой при загрузке сцены в отдельном потоке или фоновом потоке:

Я пытаюсь загрузить в код несколько больших моделей и показать сцены. Как правило, загрузка и отображение сцены на экране занимает много времени, так как требуется извлечь много ресурсов из модели модуля. Итак, я подумал о том, чтобы заполнить первую сцену в основном потоке, а остальные - в отдельном потоке. Но происходит сбой, когда я перемещаю свой код детали в отдельный поток. Вот мой пример кода:

    -(void) loadFirstScene
{
CC3PODResourceNode* podRezNode = [CC3PODResourceNode nodeWithName: @"FirstModel"];
podRezNode.resource = [IntroducingPODResource resourceFromFile: @"FirstModel.pod"];
podRezNode.shouldCullBackFaces = NO;
podRezNode.location = cc3v(0.0, -10.0, 0.2);
podRezNode.isTouchEnabled = YES;
[self addChild: podRezNode];

[NSThread detachNewThreadSelector:@selector(loadScenesInThread) toTarget:self
withObject:nil];
}

// Crashing if i add the below function in separate thread or background thread
-(void) loadScenesInThread
{
CC3PODResourceNode* podRezNode = [CC3PODResourceNode nodeWithName: @"SecondModel"];
podRezNode.resource = [IntroducingPODResource resourceFromFile: @"SecondModel.pod"];

podRezNode.shouldCullBackFaces = NO;
podRezNode.location = cc3v(0.0, -10.0, -5.0);
podRezNode.isTouchEnabled = YES;
[self addChild: podRezNode];

podRezNode = [CC3PODResourceNode nodeWithName: @"ThirdModel"];
podRezNode.resource = [IntroducingPODResource resourceFromFile: @"ThirdModel.pod"];

podRezNode.shouldCullBackFaces = NO;
podRezNode.location = cc3v(0.0, -10.0, -5.0);
podRezNode.isTouchEnabled = YES;
[self addChild: podRezNode];

// .. do more
}

Может ли кто-нибудь направить меня, как мне справиться с такой ситуацией?


person Getsy    schedule 15.04.2013    source источник


Ответы (1)


Вы не можете создавать или получать доступ к ресурсам OpenGL в потоке, отличном от потока, в котором был создан контекст OpenGL. Ваш единственный вариант - использовать любой «асинхронный» метод, который предлагает cocos2d, или пример для загрузки текстур.

person LearnCocos2D    schedule 15.04.2013
comment
Не могли бы вы указать мне, где я могу увидеть пример асинхронного метода? - person Getsy; 15.04.2013
comment
проверьте CCTextureCache в API ref. Не знаю, предлагает ли cocos3d такие методы. - person LearnCocos2D; 15.04.2013