Laden von Texturen aus ViewDidLoad funktioniert gut. Aber wenn ich versuche, sie von der GLKViewController
Aktualisierung zu laden, erhalte ich einen Fehler. Ich mache das, weil ich eine neue Hintergrundtextur austauschen möchte, ohne die Ansicht zu ändern.GLKTextureLoader schlägt beim Aufruf von Update fehl
Dies funktionierte vor dem letzten Upgrade. Vielleicht hatte ich Glück mit dem Timing. Ich vermute, dass es scheitert, weil ein Thread beschäftigt ist oder etwas?
Hier ist der Fehler vollständig.
Domain = GLKTextureLoaderErrorDomain Code = 8 "Der Vorgang konnte nicht abgeschlossen werden. (GLKTextureLoaderErrorDomain Fehler 8.)" Userinfo = 0x10b5b510 {GLKTextureLoaderGLErrorKey = 1282 GLKTextureLoaderErrorKey = OpenGL Fehler}
Die Frage ist also, kann ich eine Textur aus der Update-Funktion sicher laden? Oder muss ich meinen Ansatz überdenken und die gesamte Ansicht oder etwas neu laden?
Hier ist meine Funktion:
-(void) LoadTexture:(NSString *)texture textureInfo:(GLKTextureInfo**)textureInfo
{
NSString *path = [[NSBundle mainBundle] pathForResource:texture ofType:@"png"];
NSError *error = nil;
(*textureInfo) = [GLKTextureLoader textureWithContentsOfFile:path options:nil error:&error];
NSLog(@"path %@", path);
if(!(*textureInfo))
{
NSLog(@"Failed to load texture %@ %@", texture, error);
}
else
{
NSLog(@"LOADED Texture %@ !!! YAY!!! ", texture);
}
}
Danke,
David
Ich habe das gleiche Problem hier. Hast du eine Lösung gefunden? – hanno
Nein, ich habe noch nicht untersucht. Es scheint, dass dieser synchrone Aufruf fehlschlagen kann, wenn eine Ressource belegt ist. Ich stelle mir vor, die Lösung besteht darin, asynchron zu laden, indem die längere Version dieser Funktion verwendet wird, in der Sie einen Beendigungshandler übergeben. Diese verzögerte Version bedeutet, dass Sie die Textur zu einem späteren Zeitpunkt erhalten werden, so dass es richtig gehandhabt werden muss, aber ich hoffe, dass dies die Lösung sein wird. - textureWithContentsOfFile: Optionen: queue: completionHandler: –
Ich gab am Ende auf und benutze einfach die einfache alte glTexImage2D. – hanno