2010-09-02 3 views
3

Класс Apple Texture2D - очень полезный бит для разработчиков iOS.Mac OS X версия Texture2D.m, .h доступна?

В. Есть ли версия Mac OS X этого класса?

(я гугл, но можно найти только реализации IOS, в основном за счет Cocos2D проектов.)

Приветствия.

ответ

4

Вы можете написать метод для этого - вот что я использую:

typedef struct { 
    void *data; 
    GLfloat width; 
    GLfloat height; 
} TextureData; 

+ (TextureData)loadPngTexture:(NSString *)fileName { 
    CFURLRef textureURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), 
       (CFStringRef)fileName, 
       CFSTR("png"), 
       NULL); 
NSAssert(textureURL, @"Texture name invalid"); 

CGImageSourceRef imageSource = CGImageSourceCreateWithURL(textureURL, NULL); 
NSAssert(imageSource, @"Invalid Image Path."); 
NSAssert((CGImageSourceGetCount(imageSource) > 0), @"No Image in Image Source."); 
CFRelease(textureURL); 

CGImageRef image = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL); 
NSAssert(image, @"Image not created."); 
CFRelease(imageSource); 

GLuint width = CGImageGetWidth(image); 
GLuint height = CGImageGetHeight(image); 

void *data = malloc(width * height * 4); 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
NSAssert(colorSpace, @"Colorspace not created."); 

CGContextRef context = CGBitmapContextCreate(data, 
      width, 
      height, 
      8, 
      width * 4, 
      colorSpace, 
      kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host); 
NSAssert(context, @"Context not created."); 

CGColorSpaceRelease(colorSpace); 
// Flip so that it isn't upside-down 
CGContextTranslateCTM(context, 0, height); 
CGContextScaleCTM(context, 1.0f, -1.0f); 
CGContextSetBlendMode(context, kCGBlendModeCopy); 
CGContextDrawImage(context, CGRectMake(0, 0, width, height), image); 
CGImageRelease(image); 
CGContextRelease(context); 

    return (TextureData){ data, width, height }; 
} 

И затем использовать его как это:

TextureData td = [Renderer loadPngTexture:@"atlas"]; 
// Or use GL_TEXTURE_2D 
glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, td.width, td.height, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, td.data); 
+0

Спасибо дружище! Очень полезно от вас. – SirRatty

+0

Нет проблем :-). – mk12