ftImg = [NSImage imageNamed:@"grass.jpg"];
CGImageSourceRef src;
src = CGImageSourceCreateWithData((CFDataRef)[ftImg TIFFRepresentation], NULL);
CGImageRef ft = CGImageSourceCreateImageAtIndex(src, 0, NULL);
ftWidth = CGImageGetWidth(ft);
ftHeight = CGImageGetHeight(ft);
if(ft) {
ftData = (GLubyte *) calloc(ftWidth * ftHeight * 4, sizeof(GLubyte));
ftContext = CGBitmapContextCreate(ftData, ftWidth, ftHeight, 8, ftWidth * 4, CGImageGetColorSpace(ft), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(ftContext, CGRectMake(0.0, 0.0, (CGFloat)ftWidth, (CGFloat)ftHeight), ft);
CGContextRelease(ftContext);
glGenTextures(1, &ftTxt);
glBindTexture(GL_TEXTURE_2D, ftTxt);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, ftWidth, ftHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, ftData);
glGenerateMipmap(GL_TEXTURE_2D);
free(ftData);
}