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.
Format | Description |
---|---|
TGorillaTextureKind.Texture2D | Default texture kind creating a two dimensional image. |
TGorillaTextureKind.Texture3D | Creating a three dimensional texture. |
TGorillaTextureKind.CubeMap | Creating a texture with 6 sides of 2D Images. |
TGorillaTextureKind.Array2D | Creating a texture with x slices 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
Format | Description |
---|---|
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
Filter | Description |
---|---|
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;