[fpc-pascal] Loading PNG files as OpenGL textures

Michael Van Canneyt michael at freepascal.org
Wed Oct 14 08:49:12 CEST 2015



On Wed, 14 Oct 2015, Michael Van Canneyt wrote:

>
>
> On Wed, 14 Oct 2015, Ryan Joseph wrote:
>
>> 
>>> On Oct 12, 2015, at 2:25 PM, Michael Van Canneyt <michael at freepascal.org> 
>>> wrote:
>>> 
>>> TFPCustomImage is an abstract image class, it provides no storage for the 
>>> data. It can have several descendants such as TFPMemoryImage and 
>>> TFPCompactImgRGBA8Bit.
>>> If you just want the raw data, create a TFPMemoryImage and access the 
>>> Colors array property.
>> 
>> Sorry for the silence.
>> 
>> I’ve learned that the FPImage classes are pretty slow but I’d like to try 
>> them anyways first to see if they’re acceptable.
>> 
>> I don’t use Delphi so the FPC docs are a little confusing for me. There is 
>> a colors/pixels property but from what I can tell they map to getting a 
>> single pixel/color at a specific location, but the docs aren’t clear 
>> because the method arguments are never shown. 
>> Do I need to loop through all the pixels or something and pack them into a
>> pointer?  There should be some a single continuous block of memory in this
>> class but I can’t seem to find it using the colors/pixels property.  What
>> am I missing?
>
> Your are not missing anything, you saw correct.
> TFPCompactImgRGBA8Bit is probably what you need, you'll need to subclass it 
> to get direct access to the
>  FData: PFPCompactImgRGBA8BitValue; field, which is the memory buffer.

Type
TMyImage = Class(TFPCompactImgRGBA8Bit)
Public
   property Data :  PFPCompactImgRGBA8BitValue read FData;
end;


Should do it. Or if you don't need Alpha:

TMyImage = Class(TFPCompactImgRGB8Bit)
Public
   property Data :  PFPCompactImgRGB8BitValue read FData;
end;

You could throw in a property to get a direct pointer to a scanline.
I should maybe add that to the base classes...

Michael.


More information about the fpc-pascal mailing list