The operation couldn't be completed. (GLKTextureLoaderErrorDomain error 8.)
针对此错误代码,苹果文档给出了以下说明:
GLKTextureLoaderErrorUncompressedTextureUpload
An uncompressed texture could not be uploaded.
Available in iOS 5.0 and later.
Declared in GLKTextureLoader.h.
(不是很多)。
我是否在opengl上下文处于某种繁忙状态时尝试加载纹理?
注:
- 在加载此纹理之前,我加载其他纹理,并且这些纹理在第一次尝试时都有效。此外,完全相同的纹理文件将在第二次尝试时正常加载。
- 应该有足够的免费视频内存,因为在此之前我只加载了几个纹理。
- 纹理是带alpha的未压缩PNG,但我也尝试过使用TGA(24位和32位),但没有成功。
欢迎任何想法,谢谢
编辑:
更多信息:
opengl上下文在所有屏幕之间共享。我这样做是为了在屏幕之间保持我的着色器和纹理已加载。
上述问题发生在我转到第二个屏幕时。在第一个屏幕上,我绘制带纹理的东西没有问题(虽然是其他纹理)。
上述问题发生在我将内容(游戏实体)加载到游戏世界中时。每个实体都尝试加载纹理。我有一个简单的缓存系统,仅加载一次纹理,然后为所有其他实体返回相同的id。我在一个方法中同步加载实体。第一个实体无法加载纹理,然后是第二个成功,然后是第三个获取缓存的id。
我在
viewDidAppear
中调用了加载实体方法,并尝试在加载任何实体之前添加了2秒的休眠,但没有改变。
编辑:
纹理加载代码:
- (GLKTextureInfo *)loadTextureAtPath:(NSString*)path ofType:(NSString*)type withKey:(NSString *)key
{
GLKTextureInfo* tex;
tex = [self textureWithKey:key];
if (tex)
return tex;
NSDictionary * options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO],
GLKTextureLoaderOriginBottomLeft,
nil];
NSError * error;
NSString *bundlepath = [[NSBundle mainBundle] pathForResource:path ofType:type];
tex = [GLKTextureLoader textureWithContentsOfFile:bundlepath options:options error:&error];
if (tex == nil)
DLOG_LOCAL(@"Error loading texture: %@", [error localizedDescription]);
else
[textures setObject:tex forKey:key];
return tex;
}