Textures

Gorilla3D extends FMX texture support of TTextureBitmap. With default FMX behaviour you're only allowed to create a RGBA texture.

Texture-Kinds

With v0.8.2+ more texture types than 2D textures are supported.

FormatDescription
TGorillaTextureKind.Texture2DDefault texture kind creating a two dimensional image.
TGorillaTextureKind.Texture3DCreating a three dimensional texture.
TGorillaTextureKind.CubeMapCreating a texture with 6 sides of 2D Images.

Supported Formats

A texture format is described by a components internal format and a general format. While the components define the exact datatypes of byte data, the general format is more a simple setup information.

Components / InternalFormat

FormatDescription
TPixelFormatEx.RGBA
TPixelFormatEx.RGBA16F
TPixelFormatEx.RGBA32F
TPixelFormatEx.RGB
TPixelFormatEx.RGB16F
TPixelFormatEx.RGB32F
TPixelFormatEx.BGRA
TPixelFormatEx.BGR
TPixelFormatEx.RG
TPixelFormatEx.RG16F
TPixelFormatEx.RG32F
TPixelFormatEx.RGBA8
TPixelFormatEx.RGB8
TPixelFormatEx.R
TPixelFormatEx.R16F
TPixelFormatEx.R32F
TPixelFormatEx.Depth
TPixelFormatEx.Depth16
TPixelFormatEx.Depth24
TPixelFormatEx.Depth32

Format

TPixelFormatEx.RGBA
TPixelFormatEx.RGB
TPixelFormatEx.RG
TPixelFormatEx.R
TPixelFormatEx.Depth

Min-/Mag Filter

FilterDescription
TTextureFilter.Linear
TTextureFilter.Nearest

Wrapping

Kind
TGorillaTextureWrap.ClampToBorder
TGorillaTextureWrap.ClampToEdge
TGorillaTextureWrap.Clamp
TGorillaTextureWrap.Repeated
TGorillaTextureWrap.MirrorRepeated

Setting up

To set up a Gorilla3D texture correctly, you need to encapsulate property configuration inside of BeginSetup and EndSetup method. Only then all settings will correctly be submitted to OpenGL.

Example

At first a simple example where a TGorillaTextureBitmap is created with a size of 1024 x 1024 pixels and will all necessary settings.

LTexture := TGorillaTextureBitmap.Create(1024, 1024);
LTexture.BeginSetup();
try
    with LTexture do
    begin
        Components := TPixelFormatEx.RGB32F;
        Format := TPixelFormatEx.RGB;
        MinFilter := TTextureFilter.Linear;
        MagFilter := TTextureFilter.Linear;
        WrapS := TGorillaTextureWrap.ClampToBorder;
        WrapT := TGorillaTextureWrap.ClampToBorder;
    end;
finally
    LTexture.EndSetup();
end;

Secondly a common example to ignore linear interpolation of a material texture. This becomes very useful, when displaying textures in pixelart, like minecraft.

We have to disable interpolation and mipmapping.

var LTexture : TGorillaTextureBitmap;
begin
  // request the texture and convert to Gorilla3D texture bitmap.
  LTexture := GorillaLambertMaterialSource1.Texture as TGorillaTextureBitmap;
 
  // start manipulating properties and update them in GPU.
  LTexture.BeginSetup();
  try
    LTexture.MinFilter := TTextureFilter.Nearest;
    LTexture.MagFilter := TTextureFilter.Nearest;
    LTexture.Style := LTexture.Style - [TTextureStyle.MipMaps];
  finally
    LTexture.EndSetup();
  end;
 
  // re-assign texture to update for shader
  GorillaLambertMaterialSource1.Texture := LTexture;
end;