Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
textures [2020/01/12 20:59] admintextures [2020/05/25 12:32] – [Example] admin
Line 1: Line 1:
 ====== Textures ====== ====== 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.|
 +===== 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.RG||
 +|TPixelFormatEx.RG16F||
 +|TPixelFormatEx.RG32F||
 +|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.
  
 <file pascal> <file pascal>
Line 5: Line 69:
 LTexture.BeginSetup(); LTexture.BeginSetup();
 try try
-    with FFBOTexture do+    with LTexture do
     begin     begin
         Components := TPixelFormatEx.RGB32F;         Components := TPixelFormatEx.RGB32F;
Line 16: Line 80:
 finally finally
     LTexture.EndSetup();     LTexture.EndSetup();
 +end;
 +</file>
 +
 +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.
 +
 +<file pascal>
 +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; end;
 </file> </file>