Mac OS X 版本的Texture2D.m、.h 可用吗?

发布于 2024-09-17 09:16:15 字数 139 浏览 7 评论 0原文

Apple 的Texture2D 类对于iOS 开发人员来说是一个非常有用的工具包。

问:此类有 Mac OS X 版本吗?

(我用谷歌搜索过,但只能找到 iOS 实现,主要是通过 Cocos2D 项目。)

干杯。

Apple's Texture2D class is a very useful bit of kit for iOS developers.

Q. Is there a Mac OS X version of this class available?

(I've googled but can only find iOS implementations, mostly through Cocos2D projects.)

Cheers.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

━╋う一瞬間旳綻放 2024-09-24 09:16:15

你可以为它编写一个方法 - 这就是我使用的方法:

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);

You could write a method for it — here's what I use:

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 };
}

And then use it like this:

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文