I'm trying to generate an RGBA8 image from text to use as an OpenGL ES 2.0 texture.
+(UIImage *)imageFromText:(NSString *)text
{
UIFont *font = [UIFont systemFontOfSize:20.0];
CGSize size = [text sizeWithFont:font];
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef contextRef = CGBitmapContextCreate (NULL,
size.width, size.height,
8, 4*size.width,
colorSpace,
kCGImageAlphaLast
);
CGColorSpaceRelease(colorSpace);
UIGraphicsPushContext(contextRef);
[text drawAtPoint:CGPointMake(0.0, 0.0) withFont:font];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsPopContext();
return image;
}
Unfortunately, there's no CGColorSpaceCreateDeviceRGBA, and CGColorSpaceCreateDeviceRGB results in the following error:
CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 448 bytes/row.
What am I missing to create the proper RGBA8 format that OpenGL wants here?
Update: I changed the last parameter of CGBitmapContextCreate from kCGImageAlphaNone (which it was when I copy pasted the code) to kCGImageAlphaLast, which is one of several variations I've tried in error.
Update 2: UIGraphicsGetImageFromCurrentImageContext() returns nil if the context was not created with UIGraphicsBeginImageContext(), so it is necessary to extract the image differently: [UIImage imageWithCGImage:CGBitmapContextCreateImage(contextRef)].