IShader (Shader-Objekt)

1. Definition

Das Bildobjekt ist vom Typ IShader und leitet von ISlideShowObject ab.

IShader inherits from ISlideShowObject
  function Filename: IFilename;
  procedure SetTechnique(TechniqueName: string);
  procedure SetParamInt(ParamName: string; Value: Integer);
  procedure SetParamFloat(ParamName: string; Value: Float);
  procedure SetParamFloat2(ParamName: string; V1, V2: Single);
  procedure SetParamFloat3(ParamName: string; V1, V2, V3: Single);
  procedure SetParamFloat4(ParamName: string; V1, V2, V3, V4: Single);
  procedure SetParamRangeValue(ParamName: string; Value: IRangeValue);
  procedure SetParamRangeValue2(ParamName: string; V1, V2: IRangeValue);
  procedure SetParamRangeValue3(ParamName: string; V1, V2, V3: IRangeValue);
  procedure SetParamRangeValue4(ParamName: string; V1, V2, V3, V4: IRangeValue);
  function GetPostProcessing: Boolean;
  procedure SetPostProcessing(const Value: Boolean);
  function GetMeshColumns: Integer;
  procedure SetMeshColumns(const P: Integer);
  function GetMeshRows: Integer;
  procedure SetMeshRows(const P: Integer);
  procedure SetMesh(const Mesh: TVertexArray; const Indices: TIndexArray);
  procedure AddTexture(const Texture: ICanvas);
  procedure SetTexture(const TextureIndex: Integer; const Texture: ICanvas);
  function GetTexture(const TextureIndex: Integer): ICanvas;
  procedure DeleteTexture(const TextureIndex: Integer);
  procedure ClearTextures;
  function TextureCount: Integer;

2. Methoden

  • Objekt Erzeugung

    function CreateShaderObject: IShader;
    
  • Der Dateiname des Shaders. Hierbei ist eine konkreter Quelltextdatei eines HLSL-Shaders für DirectX 9 gemeint (meist *.fx).

    function Filename: IFilename;
    
  • Falls im Shaderquelltext mehr als eine Shader-Technik enthalten ist, kann sie über SetTechnique gesetzt werden

    procedure SetTechnique(TechniqueName: string);
    
  • Ein Shader benötigt verschiedene Parameter. Welche das sind und hängt vom tatsächlich verwendeten Shader ab. Über die SetParamXXX-Funktionen können entsprechende Werte an den Shader übergeben werden.

    procedure SetParamInt(ParamName: string; Value: Integer);
    procedure SetParamFloat(ParamName: string; Value: Float);
    

3. Beispiele

Pixelshader-Effekt

Verpixeln: Presets\Scripts\Pixelate.sss

Eigene Geometrie übergeben

Vollständiger Code, siehe Toolbox-Objekt "Dreieck": Presets\Scripts\GeometryTriangle.sss

var Mesh: TVertexArray;

// Dreieck:
//
// (-0.5, 0.5)----(0, 0.5)----(0.5, 0.5)
// |                /\                 |
// |             /      \              |
// |           /          \            |
// |        /                \         |
// |      /       (0, 0)       \       |
// |   /                         \     |
// | /                             \   |
// (-0.5, -0.5)--------------(0.5, -0.5)

// Mesh := [Vertex(0, 0.5), Vertex(0.5, 0.5), Vertex(-0.5, 0.5)];
Mesh.SetLength(3);
Mesh[0] := Vertex(0, 0.5);
Mesh[1] := Vertex(0.5, -0.5);
Mesh[2] := Vertex(-0.5, -0.5);
Shader.SetMesh(Mesh, []);