// Patch Constant-Funktion struct VS_CONTROL_POINT_OUTPUT { float3 vPosition : WORLDPOS; // TODO: Weitere Sachen ändern/hinzufügen }; // Ausgabekontrollpunkt struct HS_CONTROL_POINT_OUTPUT { float3 vPosition : WORLDPOS; }; // Ausgabe von Patch Constant-Daten. struct HS_CONSTANT_DATA_OUTPUT { float EdgeTessFactor[3] : SV_TessFactor; // wäre z. B. [4] für eine Quad-Domäne float InsideTessFactor : SV_InsideTessFactor; // wäre z. B. Inside[2] für eine Quad-Domäne // TODO: Weitere Sachen ändern/hinzufügen }; #define NUM_CONTROL_POINTS 3 // Patch Constant-Funktion HS_CONSTANT_DATA_OUTPUT CalcHSPatchConstants( InputPatch ip, uint PatchID : SV_PrimitiveID) { HS_CONSTANT_DATA_OUTPUT Output; // Hier Code zum Verarbeiten der Ausgabe einfügen Output.EdgeTessFactor[0] = Output.EdgeTessFactor[1] = Output.EdgeTessFactor[2] = Output.InsideTessFactor = 15; // könnte z. b. stattdessen dynamische Mosaikfaktoren berechnen return Output; } [domain("tri")] [partitioning("fractional_odd")] [outputtopology("triangle_cw")] [outputcontrolpoints(3)] [patchconstantfunc("CalcHSPatchConstants")] HS_CONTROL_POINT_OUTPUT main( InputPatch ip, uint i : SV_OutputControlPointID, uint PatchID : SV_PrimitiveID ) { HS_CONTROL_POINT_OUTPUT Output; // Hier Code zum Verarbeiten der Ausgabe einfügen Output.vPosition = ip[i].vPosition; return Output; }