> On Oct 12, 2015, at 10:57 AM, Anthony Walter <sys...@gmail.com> wrote: > > I tend to use OS core elements or well known open source libraries for a few > reasons. > > 1) less code compiled and small programs > 2) superior performance > 3) more features > > Example: When loading hundreds of textures you bet the Apple Quartz graphics > libs are faster and more reliable. Same goes to WIC on Windows and Cario on > linux. >
So your advice would be to keep my Apple libraries I use on Mac and something else for Windows? What would be the equivalent libraries on Windows for CGImage and CGBitmapContext be? Loading PNG’s into a bitmap seems like a pretty thing for single unit but I could do the native route also if it was easier. I just wanted to get started on cross platform basically and I’m looking for the easiest strategy. Here’s an example function to load a texture on Mac (given a CGImageRef you load from CGImageCreateWithURL). Pretty easy using Apple frameworks and I assume those would have some FPC RTL equivalents. function GenerateTextureFromImage (image: CGImageRef): GLuint; var textureWidth, textureHeight: integer; textureName: GLuint; bounds: CGRect; bitmapData: pointer; colorSpace: CGColorSpaceRef; context: CGContextRef; begin result := 0; // generate texture textureWidth := CGImageGetWidth(image); textureHeight := CGImageGetHeight(image); bounds := CGRectMake(0, 0, textureWidth, textureHeight); bitmapData := GetMem(textureHeight * (textureWidth * 4)); if bitmapData <> nil then begin colorSpace := CGColorSpaceCreateDeviceRGB; context := CGBitmapContextCreate(bitmapData, textureWidth, textureHeight, 8, 4 * textureWidth, colorSpace, kCGImageAlphaPremultipliedLast); if context <> nil then begin CGContextFlipVertically(context, bounds); CGContextClearRect(context, bounds); CGContextDrawImage(context, bounds, image); glGenTextures(1, @result); glBindTexture(GL_TEXTURE_2D, result); glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureWidth, textureHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, bitmapData); //writeln('generated texture ', result, ' (', textureWidth, 'x', textureHeight,')'); CGContextRelease(context); end; FreeMemory(bitmapData); CFRelease(colorSpace); end; end; Regards, Ryan Joseph _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal