1///////////// 2// GLOBALS // 3///////////// 4cbuffer TessellationBuffer : register(b0) 5{ 6 float tessellationAmount; 7 float3 padding; 8}; 9 10 11////////////// 12// TYPEDEFS // 13////////////// 14struct HullInputType 15{ 16 float3 position : POSITION; 17 float4 color : COLOR; 18}; 19 20struct ConstantOutputType 21{ 22 float edges[3] : SV_TessFactor; 23 float inside : SV_InsideTessFactor; 24}; 25 26struct HullOutputType 27{ 28 float3 position : POSITION; 29 float4 color : COLOR; 30}; 31 32 33//////////////////////////////////////////////////////////////////////////////// 34// Patch Constant Function 35//////////////////////////////////////////////////////////////////////////////// 36ConstantOutputType ColorPatchConstantFunction(InputPatch<HullInputType, 3> inputPatch, uint patchId : SV_PrimitiveID) 37{ 38 ConstantOutputType output; 39 40 41 // Set the tessellation factors for the three edges of the triangle. 42 output.edges[0] = tessellationAmount; 43 output.edges[1] = tessellationAmount; 44 output.edges[2] = tessellationAmount; 45 46 // Set the tessellation factor for tessallating inside the triangle. 47 output.inside = tessellationAmount; 48 49 return output; 50} 51 52 53//////////////////////////////////////////////////////////////////////////////// 54// Hull Shader 55//////////////////////////////////////////////////////////////////////////////// 56[domain("tri")] 57[partitioning("integer")] 58[outputtopology("triangle_cw")] 59[outputcontrolpoints(3)] 60[patchconstantfunc("ColorPatchConstantFunction")] 61 62HullOutputType main(InputPatch<HullInputType, 3> patch, uint pointId : SV_OutputControlPointID, uint patchId : SV_PrimitiveID) 63{ 64 HullOutputType output; 65 66 // Set the position for this control point as the output position. 67 output.position = patch[pointId].position; 68 69 // Set the input color as the output color. 70 output.color = patch[pointId].color; 71 72 return output; 73} 74 75