Thanks for the tips Christopher, learning a lot...
P.S. my opengl texture appears upside down even though i'm sure my
mapping
coordinates are correct :S I guess I can just flip the
coordinates, but is
it a setting somewhere or is it normal? (difference in coordinate
system
perhaps?)
GL stuff always winds up flipping. How are you creating the image?
I've not worked with image generation using the official-API, but
we've had success generating QCImages from file data by using Core
Image as an intermediate ([CIImage imageFromData:imageFileData]) --
maybe post some simple image-creation code?
I'm using CGImageSourceCreateWithURL and I've included the source code
below. The vertical flip was me being stupid - I forgot the coordinate
system in openGL was upwards +ve, so it was my texture coordinates
which were wrong :o
but now I'm having another problem (sigh), i'm loading an image with
alpha, and its almost correct, but its appearing a bit seethrough and
the colors a bit off. I'm guessing it might have to do with the byte
order set in glPixelStore or glTextImage2D etc.... but I couldn't find
a solution. I'm also a bit wary of whether or not it it will behave
differently on intel vs powerpc - i.e. I'd like it to be failsafe and
generic (checking the system etc.) instead of just trial and error
working on my machine.... I've included the core of the code below
(minus other stuff for position, scale etc.), it's for a class which
(is supposed to) just take care of loading a file and rendering it
any suggestions welcome! I might post this in the opengl list if I
can't get anywhere...
Cheers,
Memo.
@interface MSA_GLTexture : NSObject {
GLuint width, height;
GLuint myTextureName;
CGLContextObj cgl_ctx;
}
- (id)initWithImage:(NSString *)imageName andContext:
(CGLContextObj)_cgl_ctx;
- (void)render;
@end
@implementation MSA_GLTexture
- (id)initWithImage:(NSString *)imageName andContext:
(CGLContextObj)_cgl_ctx {
if(self = [super init]) {
cgl_ctx = _cgl_ctx;
NSBundle *thisBundle=[NSBundle bundleForClass:[self class]];
NSString *imagePath=[thisBundle pathForResource:imageName
ofType:nil];
CFURLRef url = CFURLCreateWithFileSystemPath(NULL, (CFStringRef)
imagePath, kCFURLPOSIXPathStyle, 0);
CGImageSourceRef myImageSourceRef = CGImageSourceCreateWithURL(url,
nil);
CGImageRef myImageRef = CGImageSourceCreateImageAtIndex
(myImageSourceRef, 0, nil);
width = CGImageGetWidth(myImageRef);
height = CGImageGetHeight(myImageRef);
CGRect rect = {{0, 0}, {width, height}};
void * myData = calloc(width * 4, height);
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGContextRef myBitmapContext = CGBitmapContextCreate (myData, width,
height, 8, width*4, space, kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(myBitmapContext, rect, myImageRef);
CGContextRelease(myBitmapContext);
glPixelStorei(GL_UNPACK_ROW_LENGTH, width);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1, &myTextureName);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, myTextureName);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER,
GL_LINEAR);
glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, width, height,
0, GL_BGRA_EXT, GL_UNSIGNED_INT_8_8_8_8_REV, myData);
free(myData);
}
return self;
}
-(void)render {
glEnable(GL_TEXTURE_RECTANGLE_ARB);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, myTextureName);
glEnable(GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, height); glVertex3f(-0.5f,
-0.5f, 0.0f);
glTexCoord2f(width, height); glVertex3f(0.5f, -0.5f,
0.0f);
glTexCoord2f(width, 0.0f); glVertex3f(0.5f, 0.5f,
0.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.5f, 0.5f,
0.0f);
glEnd();
glDisable(GL_TEXTURE_RECTANGLE_ARB);
}
@end
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Quartzcomposer-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/quartzcomposer-dev/archive%40mail-archive.com
This email sent to [EMAIL PROTECTED]