Forum > Graphics

PNG Alpha in GLScene?


Somehow I cannot get alpha channel working with any material settings. I load png file as texture using ~Material.Texture.Image.LoadFromFile(path).
In result I get png file displayed on surface but as 24 bit texture. Completely transparent areas are white and half transparent are black. Same code and material setup works fine in Delphi and blends png alpha properly. Loading texture in object inspector makes the same result: no alpha.
By the way, I tried to pull the same with 32 bit ico and there were no alpha too. Does GLScene for Lazarus support textures with alpha? TGA from GLScene package doesn't work - I've seen many lines commented out with scanline calls. Tried imagesforlazarus unit but without any progress: TGA read functions return black bitmap.
What should I do?

I guess I found it.  :shock:
File: GLGraphics.pas in Glscene 635:1

--- Code: ---pDest^ := $ff{pixel.alpha shr 8}; inc(pDest);
--- End code ---

Why alpha data append line is commented out?
I changed it to

--- Code: ---pDest^ := pixel.alpha shr 8; inc(pDest);
--- End code ---

and tested with 24 and 32 bit raster bitmap files. Png now works fine too.
Srsly, this single line gave me two days of instant hell.  :evil:

Not sure, but probably because it's in AssignFrom24BitBitmap and the initial porter (don't know who did this part, not me) expected a 24-bit image to not have any alpha channel...
However, as AssignFrom24BitBitmap is used for bitmaps of all pixelformats in lazarus, it should offcourse respect the alpha .. I fixed that in svn rev. 2275.
Btw. bug reports and patches are best placed in mantis (  Project "Packages"  Category "glscene" )


[0] Message Index

Go to full version