75 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| /////////////
 | |
| // GLOBALS //
 | |
| /////////////
 | |
| cbuffer TessellationBuffer : register(b0)
 | |
| {
 | |
|     float tessellationAmount;
 | |
|     float3 padding;
 | |
| };
 | |
| 
 | |
| 
 | |
| //////////////
 | |
| // TYPEDEFS //
 | |
| //////////////
 | |
| struct HullInputType
 | |
| {
 | |
|     float3 position : POSITION;
 | |
|     float4 color : COLOR;
 | |
| };
 | |
| 
 | |
| struct ConstantOutputType
 | |
| {
 | |
|     float edges[3] : SV_TessFactor;
 | |
|     float inside : SV_InsideTessFactor;
 | |
| };
 | |
| 
 | |
| struct HullOutputType
 | |
| {
 | |
|     float3 position : POSITION;
 | |
|     float4 color : COLOR;
 | |
| };
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////
 | |
| // Patch Constant Function
 | |
| ////////////////////////////////////////////////////////////////////////////////
 | |
| ConstantOutputType ColorPatchConstantFunction(InputPatch<HullInputType, 3> inputPatch, uint patchId : SV_PrimitiveID)
 | |
| {
 | |
|     ConstantOutputType output;
 | |
| 
 | |
| 
 | |
| 	// Set the tessellation factors for the three edges of the triangle.
 | |
|     output.edges[0] = tessellationAmount;
 | |
|     output.edges[1] = tessellationAmount;
 | |
|     output.edges[2] = tessellationAmount;
 | |
| 
 | |
| 	// Set the tessellation factor for tessallating inside the triangle.
 | |
|     output.inside = tessellationAmount;
 | |
| 
 | |
|     return output;
 | |
| }
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////
 | |
| // Hull Shader
 | |
| ////////////////////////////////////////////////////////////////////////////////
 | |
| [domain("tri")]
 | |
| [partitioning("integer")]
 | |
| [outputtopology("triangle_cw")]
 | |
| [outputcontrolpoints(3)]
 | |
| [patchconstantfunc("ColorPatchConstantFunction")]
 | |
| 
 | |
| HullOutputType main(InputPatch<HullInputType, 3> patch, uint pointId : SV_OutputControlPointID, uint patchId : SV_PrimitiveID)
 | |
| {
 | |
|     HullOutputType output;
 | |
| 
 | |
|     // Set the position for this control point as the output position.
 | |
|     output.position = patch[pointId].position;
 | |
| 
 | |
| 	// Set the input color as the output color.
 | |
|     output.color = patch[pointId].color;
 | |
| 
 | |
|     return output;
 | |
| }
 | |
| 
 | 
