简单修改Texture2D以支持从压缩包读取贴图

在iphone开发游戏中,有时候为了方便管理和保护资源我们使用了zip或自定义压缩文件,一般我们从压缩文件中取出来的都是一个void*数据和数据大小,当然我们想利用这些东西来读取贴图,可惜的是opengl本身并不提供相关的API支持,而Texture2D只提供功能函数
- (id) initWithData:(const void*)data pixelFormat:(Texture2DPixelFormat)pixelFormat pixelsWide:(NSUInteger)width pixelsHigh:(NSUInteger)height contentSize:(CGSize)size;
函数需要你输入格式,大小,当然如果你知道你的图像格式和大小,这个就可以直接使用,但往往我们大多数情况是不知道大小和图像格式的(可能我们用的是资源脚本管理),其实Texture2D是使用UIImage,我这里提供一种简单的方案来支持这种情况,在Texture2D.h中添加以下函数,

- (id) initWithImageData:(NSData*)data; - (id) initWithImageData:(NSData*)data sizeToFit:(BOOL)sizeToFit; - (id) initWithImageData:(NSData*)data sizeToFit:(BOOL)sizeToFit pixelFormat:(Texture2DPixelFormat)pixelFormat;
在Texture2D.mm中添加相应代码
- (id) initWithImageData:(NSData*)data { return [self initWithImageData:data sizeToFit:NO]; } - (id) initWithImageData:(NSData*)data sizeToFit:(BOOL)sizeToFit { return [self initWithImageData:data sizeToFit:sizeToFit pixelFormat:kTexture2DPixelFormat_Automatic]; } - (id) initWithImageData:(NSData*)data sizeToFit:(BOOL)sizeToFit pixelFormat:(Texture2DPixelFormat)pixelFormat { UIImage* uiImage; uiImage = [[UIImage alloc] initWithData:data]; self = [self initWithCGImage:[uiImage CGImage] orientation:[uiImage imageOrientation] sizeToFit:sizeToFit pixelFormat:pixelFormat]; [uiImage release]; if(self == nil) REPORT_ERROR(@"Failed loading image at path /"%d/"", data); return self; }
使用例子:假设data是我们的数据,_size是数据大小
NSData * nsdata = [[NSData alloc] initWithBytes:data length:_size]; Texture2D *tex = [[Texture2D alloc] initWithImageData:nsdata];      
这样就可以了,别忘记最后把它们释放掉

你可能感兴趣的:(image,api,report,脚本,iPhone,Path)