Shaderobjekt: Unterschied zwischen den Versionen

Aus AquaSoft Wiki
Zur Navigation springenZur Suche springen
 
Zeile 27: Zeile 27:
 
     procedure ClearTextures;
 
     procedure ClearTextures;
 
     function TextureCount: Integer;
 
     function TextureCount: Integer;
 +
    property DrawPersistent: Boolean;
 
</code>
 
</code>
  
Zeile 51: Zeile 52:
 
   procedure SetParamFloat(ParamName: string; Value: Float);
 
   procedure SetParamFloat(ParamName: string; Value: Float);
 
</code>
 
</code>
 +
 +
* DrawPersistent: Damit ein Bildgebendes ShaderObjekt liegen bleibt, muss DrawPersistent = True sein.
 +
  
 
= Beispiel =
 
= Beispiel =

Aktuelle Version vom 9. September 2016, 15:18 Uhr

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;
   property DrawPersistent: Boolean;

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);

  • DrawPersistent: Damit ein Bildgebendes ShaderObjekt liegen bleibt, muss DrawPersistent = True sein.


Beispiel

Pixelshader-Effekte

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, []);