Я разрабатываю приложение OpengGL для iPhone с использованием GLKit и использую следующий код для создания текстур:
NSRange dotRange = [textureFileName rangeOfString:@"." options:NSCaseInsensitiveSearch];
if (dotRange.location == NSNotFound){
NSLog(@"OpenGLDRawMaterial:createTextureFromFileName, incorrect file name given in inputs");
return nil;
}
GLKTextureInfo *newTexture;
NSError *error = nil; // stores the error message if we mess up
NSString *bundlepath = [[NSBundle mainBundle] pathForResource:[textureFileName substringToIndex:dotRange.location]
ofType:[textureFileName substringFromIndex:(dotRange.location+1)]];
newTexture = [GLKTextureLoader textureWithContentsOfFile:bundlepath options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:GLKTextureLoaderOriginBottomLeft] error:&error];
Код работает очень хорошо, пока он работает в основном потоке. Каждый раз, когда я пытаюсь заставить его работать в рабочем потоке, я получаю следующее сообщение:
"2013-03-04 02:09:01.528 Puppeteer[7063:1503] Ошибка при загрузке текстуры с изображения: Error Domain=GLKTextureLoaderErrorDomain Code=17 "Операция не может быть завершена. (GLKTextureLoaderErrorDomain ошибка 17.)" UserInfo=0x1c5977e0 "
Код, который я использую для большой центральной диспетчерской очереди:
dispatch_queue_t backgroundQueue = dispatch_queue_create("loadPlayViewBackgroundTexture", 0);
dispatch_async(backgroundQueue, ^{
[self createTexturesForPlayView]; // method calling texture creation
dispatch_async(dispatch_get_main_queue(), ^{
});
});
dispatch_release(backgroundQueue);
Если у вас есть какие-либо идеи или идеи, как решить эту проблему и загрузить текстуры в фоновом режиме, я был бы очень признателен :) Ура, Стефан
-setCurrentContext:
, иначе при попытке загрузить текстуру может отсутствовать допустимый контекст OpenGL ES. - person Brad Larson   schedule 04.03.2013