Class TGPUCompressedImage

Unit

Declaration

type TGPUCompressedImage = class(TEncodedImage)

Description

Image compressed using one of the GPU texture compression algorithms.

Hierarchy

Overview

Methods

Public constructor Create(const AWidth, AHeight, ADepth: Cardinal; const ACompression: TTextureCompression);
Public function Size: Cardinal; override;
Public function HasAlpha: boolean; override;
Public function AlphaChannel( const AlphaTolerance: Byte): TAlphaChannel; override;
Public procedure FlipVertical; override;
Public function Decompress: TCastleImage;
Public function MakeCopy: TGPUCompressedImage;
Public function CreateCopy: TEncodedImage; override;

Properties

Public property Compression: TTextureCompression read FCompression;

Description

Methods

Public constructor Create(const AWidth, AHeight, ADepth: Cardinal; const ACompression: TTextureCompression);

This item has no description.

Public function Size: Cardinal; override;

Size of the whole image data inside RawPixels, in bytes.

Public function HasAlpha: boolean; override;

This item has no description. Showing description inherited from TEncodedImage.HasAlpha.

Does an image have an alpha channel.

You may also be interested in the AlphaChannel that can make a distinction between alpha channel for blending and for alpha test. AlphaChannel answers always atNone if HasAlpha = false, and always acTest or acBlending if HasAlpha = true. But AlphaChannel may perform longer analysis of pixels (to differ between acTest and acBlending), while this function always executes ultra-fast (as it's constant for each TCastleImage descendant).

Descendants implementors notes: in this class, TCastleImage, this returns False. Override to return True for images with alpha channel.

Public function AlphaChannel( const AlphaTolerance: Byte): TAlphaChannel; override;

This item has no description. Showing description inherited from TEncodedImage.AlphaChannel.

Analyze image contents to determine if, and what kind, of alpha channel it has.

This may be a time-consuming operation. When the image has alpha channel and we need to decide whether it's suitable for "alpha test" (only fully opaque or fully transparent pixels) or "alpha blending" (any alpha value makes sense) then this method needs to iterate over image pixels.

For this reason, the result of this operation is cached at various levels, e.g. TImageTextureNode and TDrawableImage cache it internally.

We determine "alpha test - simple yes/no alpha channel" if all the alpha values (for every pixel) are 0, or 255, or (when AlphaTolerance <> 0) are close to them by AlphaTolerance. So, to be precise, alpha value must be <= AlphaTolerance, or >= 255 - AlphaTolerance. If any alpha value is between [AlphaTolerance + 1, 255 - AlphaTolerance - 1] then we return "alpha blending - full range alpha channel".

Note that big values of AlphaTolerance make it easier to quality image as "alpha test - simple yes/no alpha channel". When AlphaTolerance >= 128, all images are treated as "simple yes/no alpha". Usually, you want to keep AlphaTolerance small.

Descendants implementors notes: in this class, this simply always returns atNone. For descendants that have alpha channel, implement it, honouring AlphaTolerance as described.

Public procedure FlipVertical; override;

Flip compressed image vertically, losslessly.

This works only for S3TC images, and only when their height is 1, 2, 3 or a multiple of 4. Note that this is always satisfied if image height is a power of two (as common for textures). It uses the knowledge of how S3TC compression works to losslessly flip the image, without re-compressing it. The idea is described here [http://users.telenet.be/tfautre/softdev/ddsload/explanation.htm].

Public function Decompress: TCastleImage;

Decompress the image.

This uses DecompressTexture routine. By default, it is assigned only when OpenGL(ES) context is available and can decompress textures with the help of OpenGL(ES).

Exceptions raised
ECannotDecompressTexture
If we cannot decompress the texture, because decompressor is not set or there was some other error within decompressor.
Public function MakeCopy: TGPUCompressedImage;

Create a new image object that has exactly the same class and the same data (size, pixels) as this image.

Public function CreateCopy: TEncodedImage; override;

Create a new image object that has exactly the same class and the same data (size, pixels) as this image.

Equivalent to MakeCopy, but virtual and declared as returning TEncodedImage class.

Properties

Public property Compression: TTextureCompression read FCompression;

This item has no description.


Generated by PasDoc 0.16.0-snapshot.