summaryrefslogtreecommitdiff
path: root/include/GFSDK_WaveWorks_Quadtree.fxh
diff options
context:
space:
mode:
Diffstat (limited to 'include/GFSDK_WaveWorks_Quadtree.fxh')
-rw-r--r--include/GFSDK_WaveWorks_Quadtree.fxh136
1 files changed, 68 insertions, 68 deletions
diff --git a/include/GFSDK_WaveWorks_Quadtree.fxh b/include/GFSDK_WaveWorks_Quadtree.fxh
index b06e437..a3d5fc0 100644
--- a/include/GFSDK_WaveWorks_Quadtree.fxh
+++ b/include/GFSDK_WaveWorks_Quadtree.fxh
@@ -40,78 +40,78 @@
#endif
#if defined( GFSDK_WAVEWORKS_USE_TESSELLATION )
- GFSDK_WAVEWORKS_BEGIN_GEOM_HS_CBUFFER(nvsf_eyepos_buffer)
- GFSDK_WAVEWORKS_DECLARE_GEOM_HS_CONSTANT(float4, nvsf_g_hsWorldEye, 0)
- GFSDK_WAVEWORKS_DECLARE_GEOM_HS_CONSTANT(float4, nvsf_g_tessellationParams, 1)
+ GFSDK_WAVEWORKS_BEGIN_GEOM_HS_CBUFFER(eyepos_buffer)
+ GFSDK_WAVEWORKS_DECLARE_GEOM_HS_CONSTANT(float4, g_hsWorldEye, 0)
+ GFSDK_WAVEWORKS_DECLARE_GEOM_HS_CONSTANT(float4, g_tessellationParams, 1)
GFSDK_WAVEWORKS_END_GEOM_HS_CBUFFER
#endif
-GFSDK_WAVEWORKS_BEGIN_GEOM_VS_CBUFFER(nvsf_geom_buffer)
-GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4x3, nvsf_g_matLocalWorld, 0)
-GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4, nvsf_g_vsEyePos, 3)
-GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4, nvsf_g_MorphParam, 4)
+GFSDK_WAVEWORKS_BEGIN_GEOM_VS_CBUFFER(geom_buffer)
+GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4x3, g_matLocalWorld, 0)
+GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4, g_vsEyePos, 3)
+GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4, g_MorphParam, 4)
GFSDK_WAVEWORKS_END_GEOM_VS_CBUFFER
struct GFSDK_WAVEWORKS_VERTEX_INPUT
{
- float4 nvsf_vPos SEMANTIC(POSITION);
+ float4 vPos SEMANTIC(POSITION);
};
#if !defined(GFSDK_WAVEWORKS_USE_TESSELLATION)
float3 GFSDK_WaveWorks_GetUndisplacedVertexWorldPosition(GFSDK_WAVEWORKS_VERTEX_INPUT In)
{
- float2 nvsf_vpos = In.nvsf_vPos.xy;
+ float2 vpos = In.vPos.xy;
// Use multiple levels of geo-morphing to smooth away LOD boundaries
- float nvsf_geomorph_scale = 0.25f;
+ float geomorph_scale = 0.25f;
- float2 nvsf_geomorph_offset = float2(nvsf_g_MorphParam.w,nvsf_g_MorphParam.w);
- float2 nvsf_vpos_src = nvsf_vpos;
- float2 nvsf_vpos_target = nvsf_vpos_src;
- float nvsf_geomorph_amount = 0.f;
+ float2 geomorph_offset = float2(g_MorphParam.w,g_MorphParam.w);
+ float2 vpos_src = vpos;
+ float2 vpos_target = vpos_src;
+ float geomorph_amount = 0.f;
- for(int nvsf_geomorph_level = 0; nvsf_geomorph_level != 4; ++nvsf_geomorph_level) {
+ for(int geomorph_level = 0; geomorph_level != 4; ++geomorph_level) {
- float2 nvsf_intpart;
- float2 nvsf_rempart = modf(nvsf_geomorph_scale*nvsf_vpos_src.xy,nvsf_intpart);
+ float2 intpart;
+ float2 rempart = modf(geomorph_scale*vpos_src.xy,intpart);
- float2 nvsf_mirror = float2(1.0f, 1.0f);
+ float2 mirror = float2(1.0f, 1.0f);
- if(nvsf_rempart.x > 0.5f)
+ if(rempart.x > 0.5f)
{
- nvsf_rempart.x = 1.0f - nvsf_rempart.x;
- nvsf_mirror.x = -nvsf_mirror.x;
+ rempart.x = 1.0f - rempart.x;
+ mirror.x = -mirror.x;
}
- if(nvsf_rempart.y > 0.5f)
+ if(rempart.y > 0.5f)
{
- nvsf_rempart.y = 1.0f - nvsf_rempart.y;
- nvsf_mirror.y = -nvsf_mirror.y;
+ rempart.y = 1.0f - rempart.y;
+ mirror.y = -mirror.y;
}
- if(0.25f == nvsf_rempart.x && 0.25f == nvsf_rempart.y) nvsf_vpos_target.xy = nvsf_vpos_src.xy - nvsf_geomorph_offset*nvsf_mirror;
- else if(0.25f == nvsf_rempart.x) nvsf_vpos_target.x = nvsf_vpos_src.x + nvsf_geomorph_offset.x*nvsf_mirror.x;
- else if(0.25f == nvsf_rempart.y) nvsf_vpos_target.y = nvsf_vpos_src.y + nvsf_geomorph_offset.y*nvsf_mirror.y;
+ if(0.25f == rempart.x && 0.25f == rempart.y) vpos_target.xy = vpos_src.xy - geomorph_offset*mirror;
+ else if(0.25f == rempart.x) vpos_target.x = vpos_src.x + geomorph_offset.x*mirror.x;
+ else if(0.25f == rempart.y) vpos_target.y = vpos_src.y + geomorph_offset.y*mirror.y;
- float3 nvsf_eyevec = mul(float4(nvsf_vpos_target,0.f,1.f), nvsf_g_matLocalWorld) - nvsf_g_vsEyePos.xyz;
- float nvsf_d = length(nvsf_eyevec);
- float nvsf_geomorph_target_level = log2(nvsf_d * nvsf_g_MorphParam.x) + 1.f;
- nvsf_geomorph_amount = saturate(2.0*(nvsf_geomorph_target_level - float(nvsf_geomorph_level)));
- if(nvsf_geomorph_amount < 1.f)
+ float3 eyevec = mul(float4(vpos_target,0.f,1.f), g_matLocalWorld) - g_vsEyePos.xyz;
+ float d = length(eyevec);
+ float geomorph_target_level = log2(d * g_MorphParam.x) + 1.f;
+ geomorph_amount = saturate(2.0*(geomorph_target_level - float(geomorph_level)));
+ if(geomorph_amount < 1.f)
{
break;
}
else
{
- nvsf_vpos_src = nvsf_vpos_target;
- nvsf_geomorph_scale *= 0.5f;
- nvsf_geomorph_offset *= -2.f;
+ vpos_src = vpos_target;
+ geomorph_scale *= 0.5f;
+ geomorph_offset *= -2.f;
}
}
- nvsf_vpos.xy = lerp(nvsf_vpos_src, nvsf_vpos_target, nvsf_geomorph_amount);
- return mul(float4(nvsf_vpos,In.nvsf_vPos.zw), nvsf_g_matLocalWorld);
+ vpos.xy = lerp(vpos_src, vpos_target, geomorph_amount);
+ return mul(float4(vpos,In.vPos.zw), g_matLocalWorld);
}
#endif
@@ -119,59 +119,59 @@ float3 GFSDK_WaveWorks_GetUndisplacedVertexWorldPosition(GFSDK_WAVEWORKS_VERTEX_
#if defined(GFSDK_WAVEWORKS_USE_TESSELLATION)
float3 GFSDK_WaveWorks_GetUndisplacedVertexWorldPosition(GFSDK_WAVEWORKS_VERTEX_INPUT In)
{
- float2 nvsf_vpos = In.nvsf_vPos.xy;
+ float2 vpos = In.vPos.xy;
// Use multiple levels of geo-morphing to smooth away LOD boundaries
- float nvsf_geomorph_scale = 0.5f;
- float nvsf_geomorph_offset = abs(nvsf_g_MorphParam.w);
- float2 nvsf_vpos_src = nvsf_vpos;
- float2 nvsf_vpos_target = nvsf_vpos_src;
- float nvsf_geomorph_amount = 0.f;
+ float geomorph_scale = 0.5f;
+ float geomorph_offset = abs(g_MorphParam.w);
+ float2 vpos_src = vpos;
+ float2 vpos_target = vpos_src;
+ float geomorph_amount = 0.f;
- //nvsf_vpos_target.x += 0.25*nvsf_geomorph_offset;
- //nvsf_vpos_src.x += 0.25*nvsf_geomorph_offset;
+ //vpos_target.x += 0.25*geomorph_offset;
+ //vpos_src.x += 0.25*geomorph_offset;
- for(int nvsf_geomorph_level = 0; nvsf_geomorph_level != 4; ++nvsf_geomorph_level) {
+ for(int geomorph_level = 0; geomorph_level != 4; ++geomorph_level) {
- float2 nvsf_intpart;
- float2 nvsf_rempart = modf(nvsf_geomorph_scale*nvsf_vpos_src.xy,nvsf_intpart);
- if(0.5f == nvsf_rempart.x)
+ float2 intpart;
+ float2 rempart = modf(geomorph_scale*vpos_src.xy,intpart);
+ if(0.5f == rempart.x)
{
- nvsf_vpos_target.x = nvsf_vpos_src.x + nvsf_geomorph_offset;
+ vpos_target.x = vpos_src.x + geomorph_offset;
}
- if(0.5f == nvsf_rempart.y)
+ if(0.5f == rempart.y)
{
- nvsf_vpos_target.y = nvsf_vpos_src.y + nvsf_geomorph_offset;
+ vpos_target.y = vpos_src.y + geomorph_offset;
}
- float3 nvsf_eyevec = mul(float4(nvsf_vpos_target,0.f,1.f), nvsf_g_matLocalWorld) - nvsf_g_vsEyePos.xyz;
- float nvsf_d = length(nvsf_eyevec);
- float nvsf_geomorph_target_level = log2(nvsf_d * nvsf_g_MorphParam.x) + 1.f;
- nvsf_geomorph_amount = saturate(3.0*(nvsf_geomorph_target_level - float(nvsf_geomorph_level)));
- if(nvsf_geomorph_amount < 1.f) {
+ float3 eyevec = mul(float4(vpos_target,0.f,1.f), g_matLocalWorld) - g_vsEyePos.xyz;
+ float d = length(eyevec);
+ float geomorph_target_level = log2(d * g_MorphParam.x) + 1.f;
+ geomorph_amount = saturate(3.0*(geomorph_target_level - float(geomorph_level)));
+ if(geomorph_amount < 1.f) {
break;
} else {
- nvsf_vpos_src = nvsf_vpos_target;
- nvsf_geomorph_scale *= 0.5f;
- nvsf_geomorph_offset *= 2.f;
+ vpos_src = vpos_target;
+ geomorph_scale *= 0.5f;
+ geomorph_offset *= 2.f;
}
}
- nvsf_vpos.xy = lerp(nvsf_vpos_src, nvsf_vpos_target, nvsf_geomorph_amount);
- return mul(float4(nvsf_vpos,In.nvsf_vPos.zw), nvsf_g_matLocalWorld);
+ vpos.xy = lerp(vpos_src, vpos_target, geomorph_amount);
+ return mul(float4(vpos,In.vPos.zw), g_matLocalWorld);
}
float GFSDK_WaveWorks_GetEdgeTessellationFactor(float4 vertex1, float4 vertex2)
{
- float3 nvsf_edge_center = 0.5*(vertex1.xyz + vertex2.xyz);
- float nvsf_edge_length = length (vertex1.xyz - vertex2.xyz);
- float nvsf_edge_distance = length(nvsf_g_hsWorldEye.xyz - nvsf_edge_center.xyz);
- return nvsf_g_tessellationParams.x * nvsf_edge_length / nvsf_edge_distance;
+ float3 edge_center = 0.5*(vertex1.xyz + vertex2.xyz);
+ float edge_length = length (vertex1.xyz - vertex2.xyz);
+ float edge_distance = length(g_hsWorldEye.xyz - edge_center.xyz);
+ return g_tessellationParams.x * edge_length / edge_distance;
}
float GFSDK_WaveWorks_GetVertexTargetTessellatedEdgeLength(float3 vertex)
{
- float nvsf_vertex_distance = length(nvsf_g_hsWorldEye.xyz - vertex.xyz);
- return nvsf_vertex_distance / nvsf_g_tessellationParams.x;
+ float vertex_distance = length(g_hsWorldEye.xyz - vertex.xyz);
+ return vertex_distance / g_tessellationParams.x;
}
#endif