summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Maskell <Jason Maskell>2016-08-01 12:10:17 +0700
committerJason Maskell <Jason Maskell>2016-08-01 12:10:17 +0700
commit4f696cb8b1ee6fe6056017272ede68e38abb0564 (patch)
treed8cdb963e00bc8ef60d047c2e647eece6eeaa0bb
parentDon't need FindDirectX anymore, so deleted it and modified the cmake files. (diff)
downloadwaveworks_archive-4f696cb8b1ee6fe6056017272ede68e38abb0564.tar.xz
waveworks_archive-4f696cb8b1ee6fe6056017272ede68e38abb0564.zip
Removed nvsf_ prefix from all shader variables.
Added manually generated glsl.h files for the OpenGL sample. Breaking DRY but no longer need sed and an external CL call to get glsl. Worth the tradeoff. OpenGL sample now compiles and runs but fails at runtime when loading a texture.
-rw-r--r--CMakeLists.txt2
-rw-r--r--compiler/cmake/sample_opengl.cmake18
-rw-r--r--include/GFSDK_WaveWorks_Attributes.fxh370
-rw-r--r--include/GFSDK_WaveWorks_Common.fxh16
-rw-r--r--include/GFSDK_WaveWorks_Quadtree.fxh136
-rw-r--r--media/sample/ocean_surface_d3d11.fxobin50313 -> 49939 bytes
-rw-r--r--media/test/ocean_surface_d3d11.fxobin33379 -> 32905 bytes
-rw-r--r--src/Internal.h2
-rw-r--r--src/Quadtree.cpp16
-rw-r--r--src/Simulation.cpp220
-rw-r--r--src/shader/CalcGradient.fx60
-rw-r--r--src/shader/CalcGradient_glsl_ps.h36
-rw-r--r--src/shader/CalcGradient_glsl_vs.h26
-rw-r--r--src/shader/FoamGeneration.fx54
-rw-r--r--src/shader/FoamGeneration_glsl_ps.h41
-rw-r--r--src/shader/FoamGeneration_glsl_vs.h25
-rw-r--r--src/shader/Quadtree_SM4_sig.fx2
-rw-r--r--src/shader/Quadtree_SM5_sig.fx2
18 files changed, 582 insertions, 444 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ecf6ac8..9395503 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -125,4 +125,4 @@ INCLUDE(compiler/cmake/test_d3d11.cmake)
INCLUDE(compiler/cmake/sample_d3d11.cmake)
# TODO: Switch between CUDA/DirectCompute
-#INCLUDE(compiler/cmake/sample_opengl.cmake)
+INCLUDE(compiler/cmake/sample_opengl.cmake)
diff --git a/compiler/cmake/sample_opengl.cmake b/compiler/cmake/sample_opengl.cmake
index 6518c90..cac1150 100644
--- a/compiler/cmake/sample_opengl.cmake
+++ b/compiler/cmake/sample_opengl.cmake
@@ -3,14 +3,15 @@
#
-FIND_PACKAGE(AntTweakBar REQUIRED)
+FIND_PACKAGE(AntTweakBar 1.0 REQUIRED)
SET(SAMP_SOURCE_DIR ${PROJECT_SOURCE_DIR}/sample/opengl)
SET(TL_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
+SET(SHADER_DIR ${PROJECT_SOURCE_DIR}/src/shader)
IF(TARGET_BUILD_PLATFORM STREQUAL "Windows")
- FIND_PACKAGE(DirectX REQUIRED)
+# FIND_PACKAGE(DirectX REQUIRED)
SET(WW_PLATFORM_INCLUDES
)
@@ -79,16 +80,25 @@ SET(APP_FILES
${SAMP_SOURCE_DIR}/water.glsl
)
+SET(SHADER_H_FILES
+ ${SHADER_DIR}/CalcGradient_glsl_vs.h
+ ${SHADER_DIR}/CalcGradient_glsl_ps.h
+
+ ${SHADER_DIR}/FoamGeneration_glsl_vs.h
+ ${SHADER_DIR}/FoamGeneration_glsl_ps.h
+)
+
ADD_EXECUTABLE(SampleOpenGL WIN32
${WW_PLATFORM_SRC_FILES}
${APP_FILES}
-
+ ${SHADER_H_FILES}
)
-SOURCE_GROUP("app" FILES ${APP_FILES})
+SOURCE_GROUP("app" FILES ${APP_FILES})
+SOURCE_GROUP("glsl" FILES ${SHADER_H_FILES})
# Target specific compile options
diff --git a/include/GFSDK_WaveWorks_Attributes.fxh b/include/GFSDK_WaveWorks_Attributes.fxh
index 840243c..13a32b0 100644
--- a/include/GFSDK_WaveWorks_Attributes.fxh
+++ b/include/GFSDK_WaveWorks_Attributes.fxh
@@ -64,53 +64,53 @@
#define GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER_TEXTUREARRAY(SampLabel,TexLabel,Regoff) GFSDK_WAVEWORKS_DECLARE_ATTR_VS_SAMPLER_TEXTUREARRAY(SampLabel,TexLabel,Regoff)
#endif
-GFSDK_WAVEWORKS_BEGIN_ATTR_DISPLACEMENT_CBUFFER(nvsf_attr_vs_buffer)
-GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float3, nvsf_g_WorldEye, 0)
+GFSDK_WAVEWORKS_BEGIN_ATTR_DISPLACEMENT_CBUFFER(attr_vs_buffer)
+GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float3, g_WorldEye, 0)
#if defined( GFSDK_WAVEWORKS_GL )
- GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float, nvsf_g_UseTextureArrays, 1)
+ GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float, g_UseTextureArrays, 1)
#else
- GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float, nvsf_g_Pad1, 1)
+ GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float, g_Pad1, 1)
#endif
-GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float4, nvsf_g_UVScaleCascade0123, 2)
+GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float4, g_UVScaleCascade0123, 2)
GFSDK_WAVEWORKS_END_ATTR_DISPLACEMENT_CBUFFER
-GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(nvsf_g_samplerDisplacementMap0, nvsf_g_textureDisplacementMap0, 0)
-GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(nvsf_g_samplerDisplacementMap1, nvsf_g_textureDisplacementMap1, 1)
-GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(nvsf_g_samplerDisplacementMap2, nvsf_g_textureDisplacementMap2, 2)
-GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(nvsf_g_samplerDisplacementMap3, nvsf_g_textureDisplacementMap3, 3)
+GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(g_samplerDisplacementMap0, g_textureDisplacementMap0, 0)
+GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(g_samplerDisplacementMap1, g_textureDisplacementMap1, 1)
+GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(g_samplerDisplacementMap2, g_textureDisplacementMap2, 2)
+GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(g_samplerDisplacementMap3, g_textureDisplacementMap3, 3)
#if defined( GFSDK_WAVEWORKS_GL )
- GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER_TEXTUREARRAY(nvsf_g_samplerDisplacementMapTextureArray, nvsf_g_textureArrayDisplacementMap, 4)
+ GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER_TEXTUREARRAY(g_samplerDisplacementMapTextureArray, g_textureArrayDisplacementMap, 4)
#endif
-GFSDK_WAVEWORKS_BEGIN_ATTR_PS_CBUFFER(nvsf_attr_ps_buffer)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_TexelLength_x2_PS, 0)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade1Scale_PS, 1)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade1TexelScale_PS, 2)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade1UVOffset_PS, 3)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade2Scale_PS, 4)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade2TexelScale_PS, 5)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade2UVOffset_PS, 6)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade3Scale_PS, 7)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade3TexelScale_PS, 8)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade3UVOffset_PS, 9)
+GFSDK_WAVEWORKS_BEGIN_ATTR_PS_CBUFFER(attr_ps_buffer)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_TexelLength_x2_PS, 0)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade1Scale_PS, 1)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade1TexelScale_PS, 2)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade1UVOffset_PS, 3)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade2Scale_PS, 4)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade2TexelScale_PS, 5)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade2UVOffset_PS, 6)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade3Scale_PS, 7)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade3TexelScale_PS, 8)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade3UVOffset_PS, 9)
GFSDK_WAVEWORKS_END_ATTR_PS_CBUFFER
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(nvsf_g_samplerGradientMap0, nvsf_g_textureGradientMap0, 0)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(nvsf_g_samplerGradientMap1, nvsf_g_textureGradientMap1, 1)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(nvsf_g_samplerGradientMap2, nvsf_g_textureGradientMap2, 2)
-GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(nvsf_g_samplerGradientMap3, nvsf_g_textureGradientMap3, 3)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(g_samplerGradientMap0, g_textureGradientMap0, 0)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(g_samplerGradientMap1, g_textureGradientMap1, 1)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(g_samplerGradientMap2, g_textureGradientMap2, 2)
+GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(g_samplerGradientMap3, g_textureGradientMap3, 3)
#if defined( GFSDK_WAVEWORKS_GL )
- GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER_TEXTUREARRAY(nvsf_g_samplerGradientMapTextureArray, nvsf_g_textureArrayGradientMap, 4)
+ GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER_TEXTUREARRAY(g_samplerGradientMapTextureArray, g_textureArrayGradientMap, 4)
#endif
struct GFSDK_WAVEWORKS_INTERPOLATED_VERTEX_OUTPUT
{
- float4 nvsf_tex_coord_cascade01 SEMANTIC(TEXCOORD0);
- float4 nvsf_tex_coord_cascade23 SEMANTIC(TEXCOORD1);
- float4 nvsf_blend_factor_cascade0123 SEMANTIC(TEXCOORD2);
- float3 nvsf_eye_vec SEMANTIC(TEXCOORD3);
+ float4 tex_coord_cascade01 SEMANTIC(TEXCOORD0);
+ float4 tex_coord_cascade23 SEMANTIC(TEXCOORD1);
+ float4 blend_factor_cascade0123 SEMANTIC(TEXCOORD2);
+ float3 eye_vec SEMANTIC(TEXCOORD3);
};
struct GFSDK_WAVEWORKS_VERTEX_OUTPUT
@@ -124,186 +124,186 @@ struct GFSDK_WAVEWORKS_VERTEX_OUTPUT
GFSDK_WAVEWORKS_VERTEX_OUTPUT GFSDK_WaveWorks_GetDisplacedVertex(GFSDK_WAVEWORKS_VERTEX_INPUT In)
{
// Get starting position and distance to camera
- float3 nvsf_pos_world_undisplaced = GFSDK_WaveWorks_GetUndisplacedVertexWorldPosition(In);
- float nvsf_distance = length(nvsf_g_WorldEye - nvsf_pos_world_undisplaced);
+ float3 pos_world_undisplaced = GFSDK_WaveWorks_GetUndisplacedVertexWorldPosition(In);
+ float distance = length(g_WorldEye - pos_world_undisplaced);
// UVs
- float2 nvsf_uv_world_cascade0 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.x;
- float2 nvsf_uv_world_cascade1 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.y;
- float2 nvsf_uv_world_cascade2 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.z;
- float2 nvsf_uv_world_cascade3 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.w;
+ float2 uv_world_cascade0 = pos_world_undisplaced.xy * g_UVScaleCascade0123.x;
+ float2 uv_world_cascade1 = pos_world_undisplaced.xy * g_UVScaleCascade0123.y;
+ float2 uv_world_cascade2 = pos_world_undisplaced.xy * g_UVScaleCascade0123.z;
+ float2 uv_world_cascade3 = pos_world_undisplaced.xy * g_UVScaleCascade0123.w;
// cascade blend factors
- float4 nvsf_blendfactors;
- float4 nvsf_cascade_spatial_size = 1.0/nvsf_g_UVScaleCascade0123.xyzw;
- nvsf_blendfactors.x = 1.0;
- nvsf_blendfactors.yzw = saturate(0.25*(nvsf_cascade_spatial_size.yzw*24.0-nvsf_distance)/nvsf_cascade_spatial_size.yzw);
- nvsf_blendfactors.yzw *= nvsf_blendfactors.yzw;
+ float4 blendfactors;
+ float4 cascade_spatial_size = 1.0/g_UVScaleCascade0123.xyzw;
+ blendfactors.x = 1.0;
+ blendfactors.yzw = saturate(0.25*(cascade_spatial_size.yzw*24.0-distance)/cascade_spatial_size.yzw);
+ blendfactors.yzw *= blendfactors.yzw;
// Displacement map
#if defined(GFSDK_WAVEWORKS_GL)
- float3 nvsf_displacement;
- if(nvsf_g_UseTextureArrays > 0)
+ float3 displacement;
+ if(g_UseTextureArrays > 0)
{
- nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade0, 0.0), 0).xyz;
- nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade1, 1.0), 0).xyz;
- nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade2, 2.0), 0).xyz;
- nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade3, 3.0), 0).xyz;
+ displacement = blendfactors.x * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade0, 0.0), 0).xyz;
+ displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade1, 1.0), 0).xyz;
+ displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade2, 2.0), 0).xyz;
+ displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade3, 3.0), 0).xyz;
}
else
{
- nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz;
+ displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz;
+ displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz;
+ displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz;
+ displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz;
}
#else
- float3 nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz;
+ float3 displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz;
+ displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz;
+ displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz;
+ displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz;
#endif
- float3 nvsf_pos_world = nvsf_pos_world_undisplaced + nvsf_displacement;
+ float3 pos_world = pos_world_undisplaced + displacement;
// Output
GFSDK_WAVEWORKS_VERTEX_OUTPUT Output;
- Output.interp.nvsf_eye_vec = nvsf_g_WorldEye - nvsf_pos_world;
- Output.interp.nvsf_tex_coord_cascade01.xy = nvsf_uv_world_cascade0;
- Output.interp.nvsf_tex_coord_cascade01.zw = nvsf_uv_world_cascade1;
- Output.interp.nvsf_tex_coord_cascade23.xy = nvsf_uv_world_cascade2;
- Output.interp.nvsf_tex_coord_cascade23.zw = nvsf_uv_world_cascade3;
- Output.interp.nvsf_blend_factor_cascade0123 = nvsf_blendfactors;
- Output.pos_world = nvsf_pos_world;
- Output.pos_world_undisplaced = nvsf_pos_world_undisplaced;
- Output.world_displacement = nvsf_displacement;
+ Output.interp.eye_vec = g_WorldEye - pos_world;
+ Output.interp.tex_coord_cascade01.xy = uv_world_cascade0;
+ Output.interp.tex_coord_cascade01.zw = uv_world_cascade1;
+ Output.interp.tex_coord_cascade23.xy = uv_world_cascade2;
+ Output.interp.tex_coord_cascade23.zw = uv_world_cascade3;
+ Output.interp.blend_factor_cascade0123 = blendfactors;
+ Output.pos_world = pos_world;
+ Output.pos_world_undisplaced = pos_world_undisplaced;
+ Output.world_displacement = displacement;
return Output;
}
GFSDK_WAVEWORKS_VERTEX_OUTPUT GFSDK_WaveWorks_GetDisplacedVertexAfterTessellation(float4 In0, float4 In1, float4 In2, float3 BarycentricCoords)
{
// Get starting position
- float3 nvsf_tessellated_ws_position = In0.xyz * BarycentricCoords.x +
+ float3 tessellated_ws_position = In0.xyz * BarycentricCoords.x +
In1.xyz * BarycentricCoords.y +
In2.xyz * BarycentricCoords.z;
- float3 nvsf_pos_world_undisplaced = nvsf_tessellated_ws_position;
+ float3 pos_world_undisplaced = tessellated_ws_position;
// blend factors for cascades
- float4 nvsf_blendfactors;
- float nvsf_distance = length(nvsf_g_WorldEye - nvsf_pos_world_undisplaced);
- float4 nvsf_cascade_spatial_size = 1.0/nvsf_g_UVScaleCascade0123.xyzw;
- nvsf_blendfactors.x = 1.0;
- nvsf_blendfactors.yzw = saturate(0.25*(nvsf_cascade_spatial_size.yzw*24.0-nvsf_distance)/nvsf_cascade_spatial_size.yzw);
- nvsf_blendfactors.yzw *= nvsf_blendfactors.yzw;
+ float4 blendfactors;
+ float distance = length(g_WorldEye - pos_world_undisplaced);
+ float4 cascade_spatial_size = 1.0/g_UVScaleCascade0123.xyzw;
+ blendfactors.x = 1.0;
+ blendfactors.yzw = saturate(0.25*(cascade_spatial_size.yzw*24.0-distance)/cascade_spatial_size.yzw);
+ blendfactors.yzw *= blendfactors.yzw;
// UVs
- float2 nvsf_uv_world_cascade0 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.x;
- float2 nvsf_uv_world_cascade1 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.y;
- float2 nvsf_uv_world_cascade2 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.z;
- float2 nvsf_uv_world_cascade3 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.w;
+ float2 uv_world_cascade0 = pos_world_undisplaced.xy * g_UVScaleCascade0123.x;
+ float2 uv_world_cascade1 = pos_world_undisplaced.xy * g_UVScaleCascade0123.y;
+ float2 uv_world_cascade2 = pos_world_undisplaced.xy * g_UVScaleCascade0123.z;
+ float2 uv_world_cascade3 = pos_world_undisplaced.xy * g_UVScaleCascade0123.w;
// Displacement map
#if defined(GFSDK_WAVEWORKS_GL)
- float3 nvsf_displacement;
- if(nvsf_g_UseTextureArrays > 0)
+ float3 displacement;
+ if(g_UseTextureArrays > 0)
{
- nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade0, 0.0), 0).xyz;
- nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade1, 1.0), 0).xyz;
- nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade2, 2.0), 0).xyz;
- nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade3, 3.0), 0).xyz;
+ displacement = blendfactors.x * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade0, 0.0), 0).xyz;
+ displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade1, 1.0), 0).xyz;
+ displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade2, 2.0), 0).xyz;
+ displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade3, 3.0), 0).xyz;
}
else
{
- nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz;
+ displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz;
+ displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz;
+ displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz;
+ displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz;
}
#else
- float3 nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz;
+ float3 displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz;
+ displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz;
+ displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz;
+ displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz;
#endif
- float3 nvsf_pos_world = nvsf_pos_world_undisplaced + nvsf_displacement;
+ float3 pos_world = pos_world_undisplaced + displacement;
// Output
GFSDK_WAVEWORKS_VERTEX_OUTPUT Output;
- Output.interp.nvsf_eye_vec = nvsf_g_WorldEye - nvsf_pos_world;
- Output.interp.nvsf_tex_coord_cascade01.xy = nvsf_uv_world_cascade0;
- Output.interp.nvsf_tex_coord_cascade01.zw = nvsf_uv_world_cascade1;
- Output.interp.nvsf_tex_coord_cascade23.xy = nvsf_uv_world_cascade2;
- Output.interp.nvsf_tex_coord_cascade23.zw = nvsf_uv_world_cascade3;
- Output.interp.nvsf_blend_factor_cascade0123 = nvsf_blendfactors;
- Output.pos_world = nvsf_pos_world;
- Output.pos_world_undisplaced = nvsf_pos_world_undisplaced;
- Output.world_displacement = nvsf_displacement;
+ Output.interp.eye_vec = g_WorldEye - pos_world;
+ Output.interp.tex_coord_cascade01.xy = uv_world_cascade0;
+ Output.interp.tex_coord_cascade01.zw = uv_world_cascade1;
+ Output.interp.tex_coord_cascade23.xy = uv_world_cascade2;
+ Output.interp.tex_coord_cascade23.zw = uv_world_cascade3;
+ Output.interp.blend_factor_cascade0123 = blendfactors;
+ Output.pos_world = pos_world;
+ Output.pos_world_undisplaced = pos_world_undisplaced;
+ Output.world_displacement = displacement;
return Output;
}
GFSDK_WAVEWORKS_VERTEX_OUTPUT GFSDK_WaveWorks_GetDisplacedVertexAfterTessellationQuad(float4 In0, float4 In1, float4 In2, float4 In3, float2 UV)
{
// Get starting position
- float3 nvsf_tessellated_ws_position = In2.xyz*UV.x*UV.y +
+ float3 tessellated_ws_position = In2.xyz*UV.x*UV.y +
In0.xyz*(1.0-UV.x)*UV.y +
In1.xyz*(1.0-UV.x)*(1.0-UV.y) +
In3.xyz*UV.x*(1.0-UV.y);
- float3 nvsf_pos_world_undisplaced = nvsf_tessellated_ws_position;
+ float3 pos_world_undisplaced = tessellated_ws_position;
// blend factors for cascades
- float4 nvsf_blendfactors;
- float nvsf_distance = length(nvsf_g_WorldEye - nvsf_pos_world_undisplaced);
- float4 nvsf_cascade_spatial_size = 1.0/nvsf_g_UVScaleCascade0123.xyzw;
- nvsf_blendfactors.x = 1.0;
- nvsf_blendfactors.yzw = saturate(0.25*(nvsf_cascade_spatial_size.yzw*24.0-nvsf_distance)/nvsf_cascade_spatial_size.yzw);
- nvsf_blendfactors.yzw *= nvsf_blendfactors.yzw;
+ float4 blendfactors;
+ float distance = length(g_WorldEye - pos_world_undisplaced);
+ float4 cascade_spatial_size = 1.0/g_UVScaleCascade0123.xyzw;
+ blendfactors.x = 1.0;
+ blendfactors.yzw = saturate(0.25*(cascade_spatial_size.yzw*24.0-distance)/cascade_spatial_size.yzw);
+ blendfactors.yzw *= blendfactors.yzw;
// UVs
- float2 nvsf_uv_world_cascade0 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.x;
- float2 nvsf_uv_world_cascade1 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.y;
- float2 nvsf_uv_world_cascade2 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.z;
- float2 nvsf_uv_world_cascade3 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.w;
+ float2 uv_world_cascade0 = pos_world_undisplaced.xy * g_UVScaleCascade0123.x;
+ float2 uv_world_cascade1 = pos_world_undisplaced.xy * g_UVScaleCascade0123.y;
+ float2 uv_world_cascade2 = pos_world_undisplaced.xy * g_UVScaleCascade0123.z;
+ float2 uv_world_cascade3 = pos_world_undisplaced.xy * g_UVScaleCascade0123.w;
// Displacement map
#if defined(GFSDK_WAVEWORKS_GL)
- float3 nvsf_displacement;
- if(nvsf_g_UseTextureArrays > 0)
+ float3 displacement;
+ if(g_UseTextureArrays > 0)
{
- nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade0, 0.0), 0).xyz;
- nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade1, 1.0), 0).xyz;
- nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade2, 2.0), 0).xyz;
- nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade3, 3.0), 0).xyz;
+ displacement = blendfactors.x * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade0, 0.0), 0).xyz;
+ displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade1, 1.0), 0).xyz;
+ displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade2, 2.0), 0).xyz;
+ displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade3, 3.0), 0).xyz;
}
else
{
- nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz;
+ displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz;
+ displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz;
+ displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz;
+ displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz;
}
#else
- float3 nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz;
- nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz;
+ float3 displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz;
+ displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz;
+ displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz;
+ displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz;
#endif
- float3 nvsf_pos_world = nvsf_pos_world_undisplaced + nvsf_displacement;
+ float3 pos_world = pos_world_undisplaced + displacement;
// Output
GFSDK_WAVEWORKS_VERTEX_OUTPUT Output;
- Output.interp.nvsf_eye_vec = nvsf_g_WorldEye - nvsf_pos_world;
- Output.interp.nvsf_tex_coord_cascade01.xy = nvsf_uv_world_cascade0;
- Output.interp.nvsf_tex_coord_cascade01.zw = nvsf_uv_world_cascade1;
- Output.interp.nvsf_tex_coord_cascade23.xy = nvsf_uv_world_cascade2;
- Output.interp.nvsf_tex_coord_cascade23.zw = nvsf_uv_world_cascade3;
- Output.interp.nvsf_blend_factor_cascade0123 = nvsf_blendfactors;
- Output.pos_world = nvsf_pos_world;
- Output.pos_world_undisplaced = nvsf_pos_world_undisplaced;
- Output.world_displacement = nvsf_displacement;
+ Output.interp.eye_vec = g_WorldEye - pos_world;
+ Output.interp.tex_coord_cascade01.xy = uv_world_cascade0;
+ Output.interp.tex_coord_cascade01.zw = uv_world_cascade1;
+ Output.interp.tex_coord_cascade23.xy = uv_world_cascade2;
+ Output.interp.tex_coord_cascade23.zw = uv_world_cascade3;
+ Output.interp.blend_factor_cascade0123 = blendfactors;
+ Output.pos_world = pos_world;
+ Output.pos_world_undisplaced = pos_world_undisplaced;
+ Output.world_displacement = displacement;
return Output;
}
@@ -319,83 +319,83 @@ struct GFSDK_WAVEWORKS_SURFACE_ATTRIBUTES
GFSDK_WAVEWORKS_SURFACE_ATTRIBUTES GFSDK_WaveWorks_GetSurfaceAttributes(GFSDK_WAVEWORKS_INTERPOLATED_VERTEX_OUTPUT In)
{
// Calculate eye vector.
- // Beware: 'nvsf_eye_vec' is a large number, 32bit floating point required.
- float3 nvsf_eye_dir = normalize(In.nvsf_eye_vec);
+ // Beware: 'eye_vec' is a large number, 32bit floating point required.
+ float3 eye_dir = normalize(In.eye_vec);
// --------------- Water body color
- float4 nvsf_grad_fold0;
- float4 nvsf_grad_fold1;
- float4 nvsf_grad_fold2;
- float4 nvsf_grad_fold3;
+ float4 grad_fold0;
+ float4 grad_fold1;
+ float4 grad_fold2;
+ float4 grad_fold3;
#if defined(GFSDK_WAVEWORKS_GL)
- float3 nvsf_displacement;
- if(nvsf_g_UseTextureArrays > 0)
+ float3 displacement;
+ if(g_UseTextureArrays > 0)
{
- nvsf_grad_fold0 = SampleTex2D(nvsf_g_textureArrayGradientMap, nvsf_g_samplerGradientMapTextureArray, vec3(In.nvsf_tex_coord_cascade01.xy, 0.0));
- nvsf_grad_fold1 = SampleTex2D(nvsf_g_textureArrayGradientMap, nvsf_g_samplerGradientMapTextureArray, vec3(In.nvsf_tex_coord_cascade01.zw, 1.0));
- nvsf_grad_fold2 = SampleTex2D(nvsf_g_textureArrayGradientMap, nvsf_g_samplerGradientMapTextureArray, vec3(In.nvsf_tex_coord_cascade23.xy, 2.0));
- nvsf_grad_fold3 = SampleTex2D(nvsf_g_textureArrayGradientMap, nvsf_g_samplerGradientMapTextureArray, vec3(In.nvsf_tex_coord_cascade23.zw, 3.0));
+ grad_fold0 = SampleTex2D(g_textureArrayGradientMap, g_samplerGradientMapTextureArray, vec3(In.tex_coord_cascade01.xy, 0.0));
+ grad_fold1 = SampleTex2D(g_textureArrayGradientMap, g_samplerGradientMapTextureArray, vec3(In.tex_coord_cascade01.zw, 1.0));
+ grad_fold2 = SampleTex2D(g_textureArrayGradientMap, g_samplerGradientMapTextureArray, vec3(In.tex_coord_cascade23.xy, 2.0));
+ grad_fold3 = SampleTex2D(g_textureArrayGradientMap, g_samplerGradientMapTextureArray, vec3(In.tex_coord_cascade23.zw, 3.0));
}
else
{
- nvsf_grad_fold0 = SampleTex2D(nvsf_g_textureGradientMap0, nvsf_g_samplerGradientMap0, In.nvsf_tex_coord_cascade01.xy);
- nvsf_grad_fold1 = SampleTex2D(nvsf_g_textureGradientMap1, nvsf_g_samplerGradientMap1, In.nvsf_tex_coord_cascade01.zw);
- nvsf_grad_fold2 = SampleTex2D(nvsf_g_textureGradientMap2, nvsf_g_samplerGradientMap2, In.nvsf_tex_coord_cascade23.xy);
- nvsf_grad_fold3 = SampleTex2D(nvsf_g_textureGradientMap3, nvsf_g_samplerGradientMap3, In.nvsf_tex_coord_cascade23.zw);
+ grad_fold0 = SampleTex2D(g_textureGradientMap0, g_samplerGradientMap0, In.tex_coord_cascade01.xy);
+ grad_fold1 = SampleTex2D(g_textureGradientMap1, g_samplerGradientMap1, In.tex_coord_cascade01.zw);
+ grad_fold2 = SampleTex2D(g_textureGradientMap2, g_samplerGradientMap2, In.tex_coord_cascade23.xy);
+ grad_fold3 = SampleTex2D(g_textureGradientMap3, g_samplerGradientMap3, In.tex_coord_cascade23.zw);
}
#else
- nvsf_grad_fold0 = SampleTex2D(nvsf_g_textureGradientMap0, nvsf_g_samplerGradientMap0, In.nvsf_tex_coord_cascade01.xy);
- nvsf_grad_fold1 = SampleTex2D(nvsf_g_textureGradientMap1, nvsf_g_samplerGradientMap1, In.nvsf_tex_coord_cascade01.zw);
- nvsf_grad_fold2 = SampleTex2D(nvsf_g_textureGradientMap2, nvsf_g_samplerGradientMap2, In.nvsf_tex_coord_cascade23.xy);
- nvsf_grad_fold3 = SampleTex2D(nvsf_g_textureGradientMap3, nvsf_g_samplerGradientMap3, In.nvsf_tex_coord_cascade23.zw);
+ grad_fold0 = SampleTex2D(g_textureGradientMap0, g_samplerGradientMap0, In.tex_coord_cascade01.xy);
+ grad_fold1 = SampleTex2D(g_textureGradientMap1, g_samplerGradientMap1, In.tex_coord_cascade01.zw);
+ grad_fold2 = SampleTex2D(g_textureGradientMap2, g_samplerGradientMap2, In.tex_coord_cascade23.xy);
+ grad_fold3 = SampleTex2D(g_textureGradientMap3, g_samplerGradientMap3, In.tex_coord_cascade23.zw);
#endif
- float2 nvsf_grad;
- nvsf_grad.xy = nvsf_grad_fold0.xy*In.nvsf_blend_factor_cascade0123.x +
- nvsf_grad_fold1.xy*In.nvsf_blend_factor_cascade0123.y*nvsf_g_Cascade1TexelScale_PS +
- nvsf_grad_fold2.xy*In.nvsf_blend_factor_cascade0123.z*nvsf_g_Cascade2TexelScale_PS +
- nvsf_grad_fold3.xy*In.nvsf_blend_factor_cascade0123.w*nvsf_g_Cascade3TexelScale_PS;
+ float2 grad;
+ grad.xy = grad_fold0.xy*In.blend_factor_cascade0123.x +
+ grad_fold1.xy*In.blend_factor_cascade0123.y*g_Cascade1TexelScale_PS +
+ grad_fold2.xy*In.blend_factor_cascade0123.z*g_Cascade2TexelScale_PS +
+ grad_fold3.xy*In.blend_factor_cascade0123.w*g_Cascade3TexelScale_PS;
- float nvsf_c2c_scale = 0.25; // larger cascaded cover larger areas, so foamed texels cover larger area, thus, foam intensity on these needs to be scaled down for uniform foam look
+ float c2c_scale = 0.25; // larger cascaded cover larger areas, so foamed texels cover larger area, thus, foam intensity on these needs to be scaled down for uniform foam look
- float nvsf_foam_turbulent_energy =
+ float foam_turbulent_energy =
// accumulated foam energy with blendfactors
- 100.0*nvsf_grad_fold0.w *
- lerp(nvsf_c2c_scale, nvsf_grad_fold1.w, In.nvsf_blend_factor_cascade0123.y)*
- lerp(nvsf_c2c_scale, nvsf_grad_fold2.w, In.nvsf_blend_factor_cascade0123.z)*
- lerp(nvsf_c2c_scale, nvsf_grad_fold3.w, In.nvsf_blend_factor_cascade0123.w);
+ 100.0*grad_fold0.w *
+ lerp(c2c_scale, grad_fold1.w, In.blend_factor_cascade0123.y)*
+ lerp(c2c_scale, grad_fold2.w, In.blend_factor_cascade0123.z)*
+ lerp(c2c_scale, grad_fold3.w, In.blend_factor_cascade0123.w);
- float nvsf_foam_surface_folding =
+ float foam_surface_folding =
// folding for foam "clumping" on folded areas
max(-100,
- (1.0-nvsf_grad_fold0.z) +
- (1.0-nvsf_grad_fold1.z) +
- (1.0-nvsf_grad_fold2.z) +
- (1.0-nvsf_grad_fold3.z));
+ (1.0-grad_fold0.z) +
+ (1.0-grad_fold1.z) +
+ (1.0-grad_fold2.z) +
+ (1.0-grad_fold3.z));
// Calculate normal here.
- float3 nvsf_normal = normalize(float3(nvsf_grad, nvsf_g_TexelLength_x2_PS));
+ float3 normal = normalize(float3(grad, g_TexelLength_x2_PS));
- float nvsf_hats_c2c_scale = 0.5; // the larger is the wave, the higher is the chance to start breaking at high folding, so folding for smaller cascade s is decreased
- float nvsf_foam_wave_hats =
+ float hats_c2c_scale = 0.5; // the larger is the wave, the higher is the chance to start breaking at high folding, so folding for smaller cascade s is decreased
+ float foam_wave_hats =
10.0*(-0.55 + // this allows hats to appear on breaking places only. Can be tweaked to represent Beaufort scale better
- (1.0-nvsf_grad_fold0.z) +
- nvsf_hats_c2c_scale*(1.0-nvsf_grad_fold1.z) +
- nvsf_hats_c2c_scale*nvsf_hats_c2c_scale*(1.0-nvsf_grad_fold2.z) +
- nvsf_hats_c2c_scale*nvsf_hats_c2c_scale*nvsf_hats_c2c_scale*(1.0-nvsf_grad_fold3.z));
+ (1.0-grad_fold0.z) +
+ hats_c2c_scale*(1.0-grad_fold1.z) +
+ hats_c2c_scale*hats_c2c_scale*(1.0-grad_fold2.z) +
+ hats_c2c_scale*hats_c2c_scale*hats_c2c_scale*(1.0-grad_fold3.z));
// Output
GFSDK_WAVEWORKS_SURFACE_ATTRIBUTES Output;
- Output.normal = nvsf_normal;
- Output.eye_dir = nvsf_eye_dir;
- Output.foam_surface_folding = nvsf_foam_surface_folding;
- Output.foam_turbulent_energy = log(1.0 + nvsf_foam_turbulent_energy);
- Output.foam_wave_hats = nvsf_foam_wave_hats;
+ Output.normal = normal;
+ Output.eye_dir = eye_dir;
+ Output.foam_surface_folding = foam_surface_folding;
+ Output.foam_turbulent_energy = log(1.0 + foam_turbulent_energy);
+ Output.foam_wave_hats = foam_wave_hats;
return Output;
}
diff --git a/include/GFSDK_WaveWorks_Common.fxh b/include/GFSDK_WaveWorks_Common.fxh
index c100c8b..8b13250 100644
--- a/include/GFSDK_WaveWorks_Common.fxh
+++ b/include/GFSDK_WaveWorks_Common.fxh
@@ -34,30 +34,30 @@
*
*/
#if defined(GFSDK_WAVEWORKS_SM4) || defined(GFSDK_WAVEWORKS_SM5)
- #define SampleTex2D(nvsf_texture,nvsf_sampler,nvsf_coords) nvsf_texture.Sample(nvsf_sampler,nvsf_coords)
- #define SampleTex2Dlod(nvsf_texture,nvsf_sampler,nvsf_coords,nvsf_lod) nvsf_texture.SampleLevel(nvsf_sampler,nvsf_coords,nvsf_lod)
+ #define SampleTex2D(texture,sampler,coords) texture.Sample(sampler,coords)
+ #define SampleTex2Dlod(texture,sampler,coords,lod) texture.SampleLevel(sampler,coords,lod)
#define BEGIN_CBUFFER(name,slot) cbuffer name : register(b##slot) {
#define END_CBUFFER };
#define SEMANTIC(x) : x
#elif defined(GFSDK_WAVEWORKS_SM3)
- #define SampleTex2D(nvsf_texture,nvsf_sampler,nvsf_coords) tex2D(nvsf_sampler,nvsf_coords)
- #define SampleTex2Dlod(nvsf_texture,nvsf_sampler,nvsf_coords,nvsf_lod) tex2Dlod(nvsf_sampler,float4(nvsf_coords,0,nvsf_lod))
+ #define SampleTex2D(texture,sampler,coords) tex2D(sampler,coords)
+ #define SampleTex2Dlod(texture,sampler,coords,lod) tex2Dlod(sampler,float4(coords,0,lod))
#define BEGIN_CBUFFER(name,slot)
#define END_CBUFFER
#define SV_Target COLOR
#define SV_Position POSITION
#define SEMANTIC(x) : x
#elif defined(GFSDK_WAVEWORKS_GNM)
- #define SampleTex2D(nvsf_texture,nvsf_sampler,nvsf_coords) nvsf_texture.Sample(nvsf_sampler,nvsf_coords)
- #define SampleTex2Dlod(nvsf_texture,nvsf_sampler,nvsf_coords,nvsf_lod) nvsf_texture.SampleLOD(nvsf_sampler,nvsf_coords,nvsf_lod)
+ #define SampleTex2D(texture,sampler,coords) texture.Sample(sampler,coords)
+ #define SampleTex2Dlod(texture,sampler,coords,lod) texture.SampleLOD(sampler,coords,lod)
#define BEGIN_CBUFFER(name,slot) ConstantBuffer name : register(b##slot) {
#define END_CBUFFER };
#define SV_Target S_TARGET_OUTPUT
#define SV_Position S_POSITION
#define SEMANTIC(x) : x
#elif defined(GFSDK_WAVEWORKS_GL)
- #define SampleTex2D(nvsf_texture,nvsf_sampler,nvsf_coords) texture(nvsf_sampler,nvsf_coords)
- #define SampleTex2Dlod(nvsf_texture,nvsf_sampler,nvsf_coords,nvsf_lod) textureLod(nvsf_sampler,nvsf_coords,nvsf_lod)
+ #define SampleTex2D(texture,sampler,coords) texture(sampler,coords)
+ #define SampleTex2Dlod(texture,sampler,coords,lod) textureLod(sampler,coords,lod)
#define BEGIN_CBUFFER(name,slot)
#define END_CBUFFER
#define SEMANTIC(x)
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
diff --git a/media/sample/ocean_surface_d3d11.fxo b/media/sample/ocean_surface_d3d11.fxo
index d35f8db..3de4125 100644
--- a/media/sample/ocean_surface_d3d11.fxo
+++ b/media/sample/ocean_surface_d3d11.fxo
Binary files differ
diff --git a/media/test/ocean_surface_d3d11.fxo b/media/test/ocean_surface_d3d11.fxo
index 2e18509..87bcd55 100644
--- a/media/test/ocean_surface_d3d11.fxo
+++ b/media/test/ocean_surface_d3d11.fxo
Binary files differ
diff --git a/src/Internal.h b/src/Internal.h
index d8f64ef..a7a73e7 100644
--- a/src/Internal.h
+++ b/src/Internal.h
@@ -414,7 +414,7 @@ void handle_hr_error(HRESULT hr, const char_type* file, int line);
#endif
#ifdef TARGET_PLATFORM_WINDOWS
-//#define WAVEWORKS_ENABLE_GL WAVEWORKS_ALLOW_GFX
+#define WAVEWORKS_ENABLE_GL WAVEWORKS_ALLOW_GFX
#else
#ifdef TARGET_PLATFORM_MACOSX
#define WAVEWORKS_ENABLE_GL WAVEWORKS_ALLOW_GFX
diff --git a/src/Quadtree.cpp b/src/Quadtree.cpp
index 7f132db..9e0acd8 100644
--- a/src/Quadtree.cpp
+++ b/src/Quadtree.cpp
@@ -96,24 +96,24 @@ enum ShaderInputsGL2
#if WAVEWORKS_ENABLE_D3D11
const GFSDK_WaveWorks_ShaderInput_Desc ShaderInputD3D11Descs[NumShaderInputsD3D11] = {
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_ConstantBuffer, "nvsf_geom_buffer", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::HullShader_ConstantBuffer, "nvsf_eyepos_buffer", 0 }
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_ConstantBuffer, "geom_buffer", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::HullShader_ConstantBuffer, "eyepos_buffer", 0 }
};
#endif
#if WAVEWORKS_ENABLE_GNM
const GFSDK_WaveWorks_ShaderInput_Desc ShaderInputGnmDescs[NumShaderInputsGnm] = {
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_ConstantBuffer, "nvsf_geom_buffer", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::HullShader_ConstantBuffer, "nvsf_eyepos_buffer", 0 }
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_ConstantBuffer, "geom_buffer", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::HullShader_ConstantBuffer, "eyepos_buffer", 0 }
};
#endif
#if WAVEWORKS_ENABLE_GL
const GFSDK_WaveWorks_ShaderInput_Desc ShaderInputGL2Descs[NumShaderInputsGL2] = {
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "nvsf_g_matLocalWorld", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "nvsf_g_vsEyePos", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "nvsf_g_MorphParam", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_AttribLocation, "nvsf_vPos", 0 }
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "g_matLocalWorld", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "g_vsEyePos", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "g_MorphParam", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_AttribLocation, "vPos", 0 }
};
#endif
struct vs_cbuffer
diff --git a/src/Simulation.cpp b/src/Simulation.cpp
index 039d191..146fc7d 100644
--- a/src/Simulation.cpp
+++ b/src/Simulation.cpp
@@ -242,92 +242,92 @@ enum ShaderInputsGL2
#if WAVEWORKS_ENABLE_D3D11
const GFSDK_WaveWorks_ShaderInput_Desc ShaderInputDescsD3D11[NumShaderInputsD3D11] = {
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_ConstantBuffer, "nvsf_attr_vs_buffer", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "nvsf_g_samplerDisplacementMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "nvsf_g_samplerDisplacementMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "nvsf_g_samplerDisplacementMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "nvsf_g_samplerDisplacementMap3", 3 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "nvsf_g_textureDisplacementMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "nvsf_g_textureDisplacementMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "nvsf_g_textureDisplacementMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "nvsf_g_textureDisplacementMap3", 3 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_ConstantBuffer, "nvsf_attr_vs_buffer", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "nvsf_g_samplerDisplacementMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "nvsf_g_samplerDisplacementMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "nvsf_g_samplerDisplacementMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "nvsf_g_samplerDisplacementMap3", 3 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "nvsf_g_textureDisplacementMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "nvsf_g_textureDisplacementMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "nvsf_g_textureDisplacementMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "nvsf_g_textureDisplacementMap3", 3 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_ConstantBuffer, "nvsf_attr_ps_buffer", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "nvsf_g_samplerGradientMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "nvsf_g_samplerGradientMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "nvsf_g_samplerGradientMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "nvsf_g_samplerGradientMap3", 3 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "nvsf_g_textureGradientMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "nvsf_g_textureGradientMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "nvsf_g_textureGradientMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "nvsf_g_textureGradientMap3", 3 }
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_ConstantBuffer, "attr_vs_buffer", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "g_samplerDisplacementMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "g_samplerDisplacementMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "g_samplerDisplacementMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "g_samplerDisplacementMap3", 3 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "g_textureDisplacementMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "g_textureDisplacementMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "g_textureDisplacementMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "g_textureDisplacementMap3", 3 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_ConstantBuffer, "attr_vs_buffer", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "g_samplerDisplacementMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "g_samplerDisplacementMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "g_samplerDisplacementMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "g_samplerDisplacementMap3", 3 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "g_textureDisplacementMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "g_textureDisplacementMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "g_textureDisplacementMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "g_textureDisplacementMap3", 3 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_ConstantBuffer, "attr_ps_buffer", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "g_samplerGradientMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "g_samplerGradientMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "g_samplerGradientMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "g_samplerGradientMap3", 3 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "g_textureGradientMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "g_textureGradientMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "g_textureGradientMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "g_textureGradientMap3", 3 }
};
#endif // WAVEWORKS_ENABLE_D3D11
#if WAVEWORKS_ENABLE_GNM
const GFSDK_WaveWorks_ShaderInput_Desc ShaderInputDescsGnm[NumShaderInputsGnm] = {
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_ConstantBuffer, "nvsf_attr_vs_buffer", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "nvsf_g_samplerDisplacementMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "nvsf_g_samplerDisplacementMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "nvsf_g_samplerDisplacementMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "nvsf_g_samplerDisplacementMap3", 3 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "nvsf_g_textureDisplacementMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "nvsf_g_textureDisplacementMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "nvsf_g_textureDisplacementMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "nvsf_g_textureDisplacementMap3", 3 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_ConstantBuffer, "nvsf_attr_vs_buffer", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "nvsf_g_samplerDisplacementMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "nvsf_g_samplerDisplacementMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "nvsf_g_samplerDisplacementMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "nvsf_g_samplerDisplacementMap3", 3 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "nvsf_g_textureDisplacementMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "nvsf_g_textureDisplacementMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "nvsf_g_textureDisplacementMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "nvsf_g_textureDisplacementMap3", 3 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_ConstantBuffer, "nvsf_attr_ps_buffer", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "nvsf_g_samplerGradientMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "nvsf_g_samplerGradientMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "nvsf_g_samplerGradientMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "nvsf_g_samplerGradientMap3", 3 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "nvsf_g_textureGradientMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "nvsf_g_textureGradientMap1", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "nvsf_g_textureGradientMap2", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "nvsf_g_textureGradientMap3", 3 }
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_ConstantBuffer, "attr_vs_buffer", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "g_samplerDisplacementMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "g_samplerDisplacementMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "g_samplerDisplacementMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Sampler, "g_samplerDisplacementMap3", 3 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "g_textureDisplacementMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "g_textureDisplacementMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "g_textureDisplacementMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::VertexShader_Texture, "g_textureDisplacementMap3", 3 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_ConstantBuffer, "attr_vs_buffer", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "g_samplerDisplacementMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "g_samplerDisplacementMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "g_samplerDisplacementMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Sampler, "g_samplerDisplacementMap3", 3 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "g_textureDisplacementMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "g_textureDisplacementMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "g_textureDisplacementMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::DomainShader_Texture, "g_textureDisplacementMap3", 3 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_ConstantBuffer, "attr_ps_buffer", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "g_samplerGradientMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "g_samplerGradientMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "g_samplerGradientMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Sampler, "g_samplerGradientMap3", 3 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "g_textureGradientMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "g_textureGradientMap1", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "g_textureGradientMap2", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::PixelShader_Texture, "g_textureGradientMap3", 3 }
};
#endif // WAVEWORKS_ENABLE_GNM
#if WAVEWORKS_ENABLE_GL
const GFSDK_WaveWorks_ShaderInput_Desc ShaderInputDescsGL2[NumShaderInputsGL2] = {
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_TextureBindLocation, "nvsf_g_samplerDisplacementMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_TextureBindLocation, "nvsf_g_samplerDisplacementMap1", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_TextureBindLocation, "nvsf_g_samplerDisplacementMap2", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_TextureBindLocation, "nvsf_g_samplerDisplacementMap3", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_TextureBindLocation, "nvsf_g_samplerGradientMap0", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_TextureBindLocation, "nvsf_g_samplerGradientMap1", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_TextureBindLocation, "nvsf_g_samplerGradientMap2", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_TextureBindLocation, "nvsf_g_samplerGradientMap3", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_TextureArrayBindLocation, "nvsf_g_samplerDisplacementMapTextureArray", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_TextureArrayBindLocation, "nvsf_g_samplerGradientMapTextureArray", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "nvsf_g_WorldEye", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "nvsf_g_UseTextureArrays", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "nvsf_g_UVScaleCascade0123", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "nvsf_g_TexelLength_x2_PS", 0 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "nvsf_g_Cascade1Scale_PS", 1 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "nvsf_g_Cascade1TexelScale_PS", 2 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "nvsf_g_Cascade1UVOffset_PS", 3 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "nvsf_g_Cascade2Scale_PS", 4 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "nvsf_g_Cascade2TexelScale_PS", 5 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "nvsf_g_Cascade2UVOffset_PS", 6 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "nvsf_g_Cascade3Scale_PS", 7 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "nvsf_g_Cascade3TexelScale_PS", 8 },
- { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "nvsf_g_Cascade3UVOffset_PS", 9 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_TextureBindLocation, "g_samplerDisplacementMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_TextureBindLocation, "g_samplerDisplacementMap1", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_TextureBindLocation, "g_samplerDisplacementMap2", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_TextureBindLocation, "g_samplerDisplacementMap3", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_TextureBindLocation, "g_samplerGradientMap0", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_TextureBindLocation, "g_samplerGradientMap1", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_TextureBindLocation, "g_samplerGradientMap2", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_TextureBindLocation, "g_samplerGradientMap3", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_TextureArrayBindLocation, "g_samplerDisplacementMapTextureArray", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_TextureArrayBindLocation, "g_samplerGradientMapTextureArray", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "g_WorldEye", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "g_UseTextureArrays", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_VertexShader_UniformLocation, "g_UVScaleCascade0123", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "g_TexelLength_x2_PS", 0 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "g_Cascade1Scale_PS", 1 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "g_Cascade1TexelScale_PS", 2 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "g_Cascade1UVOffset_PS", 3 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "g_Cascade2Scale_PS", 4 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "g_Cascade2TexelScale_PS", 5 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "g_Cascade2UVOffset_PS", 6 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "g_Cascade3Scale_PS", 7 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "g_Cascade3TexelScale_PS", 8 },
+ { GFSDK_WaveWorks_ShaderInput_Desc::GL_FragmentShader_UniformLocation, "g_Cascade3UVOffset_PS", 9 },
};
#endif // __GL__
struct ps_calcgradient_cbuffer
@@ -353,10 +353,10 @@ struct vs_attr_cbuffer
struct ps_foamgeneration_cbuffer
{
- float nvsf_g_DissipationFactors_BlurExtents;
- float nvsf_g_DissipationFactors_Fadeout;
- float nvsf_g_DissipationFactors_Accumulation;
- float nvsf_g_FoamGenerationThreshold;
+ float g_DissipationFactors_BlurExtents;
+ float g_DissipationFactors_Fadeout;
+ float g_DissipationFactors_Accumulation;
+ float g_FoamGenerationThreshold;
gfsdk_float4 g_SourceComponents;
gfsdk_float4 g_UVOffsets;
};
@@ -772,15 +772,15 @@ HRESULT GFSDK_WaveWorks_Simulation::initShaders()
if(m_d3d._GL2.m_GradCalcProgram == 0) return E_FAIL;
// Gradient calculation program binding
- m_d3d._GL2.m_GradCalcUniformLocation_Scales = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"nvsf_g_Scales"); CHECK_GL_ERRORS;
- m_d3d._GL2.m_GradCalcUniformLocation_OneBack = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"nvsf_g_OneTexel_Back"); CHECK_GL_ERRORS;
- m_d3d._GL2.m_GradCalcUniformLocation_OneFront = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"nvsf_g_OneTexel_Front"); CHECK_GL_ERRORS;
- m_d3d._GL2.m_GradCalcUniformLocation_OneLeft = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"nvsf_g_OneTexel_Left"); CHECK_GL_ERRORS;
- m_d3d._GL2.m_GradCalcUniformLocation_OneRight = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"nvsf_g_OneTexel_Right"); CHECK_GL_ERRORS;
- m_d3d._GL2.m_GradCalcTextureBindLocation_DisplacementMap = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"nvsf_g_samplerDisplacementMap"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_GradCalcUniformLocation_Scales = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"g_Scales"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_GradCalcUniformLocation_OneBack = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"g_OneTexel_Back"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_GradCalcUniformLocation_OneFront = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"g_OneTexel_Front"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_GradCalcUniformLocation_OneLeft = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"g_OneTexel_Left"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_GradCalcUniformLocation_OneRight = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"g_OneTexel_Right"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_GradCalcTextureBindLocation_DisplacementMap = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_GradCalcProgram,"g_samplerDisplacementMap"); CHECK_GL_ERRORS;
m_d3d._GL2.m_GradCalcTextureUnit_DisplacementMap = 0;
- m_d3d._GL2.m_GradCalcAttributeLocation_Pos = NVSDK_GLFunctions.glGetAttribLocation(m_d3d._GL2.m_GradCalcProgram, "nvsf_vInPos"); CHECK_GL_ERRORS;
- m_d3d._GL2.m_GradCalcAttributeLocation_TexCoord = NVSDK_GLFunctions.glGetAttribLocation(m_d3d._GL2.m_GradCalcProgram, "nvsf_vInTexCoord"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_GradCalcAttributeLocation_Pos = NVSDK_GLFunctions.glGetAttribLocation(m_d3d._GL2.m_GradCalcProgram, "vInPos"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_GradCalcAttributeLocation_TexCoord = NVSDK_GLFunctions.glGetAttribLocation(m_d3d._GL2.m_GradCalcProgram, "vInTexCoord"); CHECK_GL_ERRORS;
// Creating foam generation program
if(m_d3d._GL2.m_FoamGenProgram != 0) NVSDK_GLFunctions.glDeleteProgram(m_d3d._GL2.m_FoamGenProgram); CHECK_GL_ERRORS;
@@ -788,13 +788,13 @@ HRESULT GFSDK_WaveWorks_Simulation::initShaders()
if(m_d3d._GL2.m_FoamGenProgram == 0) return E_FAIL;
// Foam accumulation program binding
- m_d3d._GL2.m_FoamGenUniformLocation_DissipationFactors = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_FoamGenProgram,"nvsf_g_DissipationFactors"); CHECK_GL_ERRORS;
- m_d3d._GL2.m_FoamGenUniformLocation_SourceComponents = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_FoamGenProgram,"nvsf_g_SourceComponents"); CHECK_GL_ERRORS;
- m_d3d._GL2.m_FoamGenUniformLocation_UVOffsets = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_FoamGenProgram,"nvsf_g_UVOffsets"); CHECK_GL_ERRORS;
- m_d3d._GL2.m_FoamGenTextureBindLocation_EnergyMap = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_FoamGenProgram,"nvsf_g_samplerEnergyMap"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_FoamGenUniformLocation_DissipationFactors = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_FoamGenProgram,"g_DissipationFactors"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_FoamGenUniformLocation_SourceComponents = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_FoamGenProgram,"g_SourceComponents"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_FoamGenUniformLocation_UVOffsets = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_FoamGenProgram,"g_UVOffsets"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_FoamGenTextureBindLocation_EnergyMap = NVSDK_GLFunctions.glGetUniformLocation(m_d3d._GL2.m_FoamGenProgram,"g_samplerEnergyMap"); CHECK_GL_ERRORS;
m_d3d._GL2.m_FoamGenTextureUnit_EnergyMap = 0;
- m_d3d._GL2.m_FoamGenAttributeLocation_Pos = NVSDK_GLFunctions.glGetAttribLocation(m_d3d._GL2.m_FoamGenProgram, "nvsf_vInPos"); CHECK_GL_ERRORS;
- m_d3d._GL2.m_FoamGenAttributeLocation_TexCoord = NVSDK_GLFunctions.glGetAttribLocation(m_d3d._GL2.m_FoamGenProgram, "nvsf_vInTexCoord"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_FoamGenAttributeLocation_Pos = NVSDK_GLFunctions.glGetAttribLocation(m_d3d._GL2.m_FoamGenProgram, "vInPos"); CHECK_GL_ERRORS;
+ m_d3d._GL2.m_FoamGenAttributeLocation_TexCoord = NVSDK_GLFunctions.glGetAttribLocation(m_d3d._GL2.m_FoamGenProgram, "vInTexCoord"); CHECK_GL_ERRORS;
}
break;
#endif
@@ -1457,10 +1457,10 @@ HRESULT GFSDK_WaveWorks_Simulation::updateGradientMapsD3D11(Graphics_Context* pG
D3D11_CB_Updater<ps_foamgeneration_cbuffer> cbu(pDC_d3d11,m_d3d._11.m_pd3d11FoamGenPixelShaderCB);
cbu.cb().g_SourceComponents = gfsdk_make_float4(0,0,0.0f,1.0f); // getting component W of grad map as source for energy
cbu.cb().g_UVOffsets = gfsdk_make_float4(0,1.0f,0,0); // blurring by Y
- cbu.cb().nvsf_g_DissipationFactors_Accumulation = m_params.cascades[cascade].foam_generation_amount*(float)m_dFoamSimDeltaTime*50.0f;
- cbu.cb().nvsf_g_DissipationFactors_Fadeout = pow(m_params.cascades[cascade].foam_falloff_speed,(float)m_dFoamSimDeltaTime*50.0f);
- cbu.cb().nvsf_g_DissipationFactors_BlurExtents = min(0.5f,m_params.cascades[cascade].foam_dissipation_speed*(float)m_dFoamSimDeltaTime*m_params.cascades[0].fft_period * (1000.0f/m_params.cascades[0].fft_period)/m_params.cascades[cascade].fft_period)/dmap_dim;
- cbu.cb().nvsf_g_FoamGenerationThreshold = m_params.cascades[cascade].foam_generation_threshold;
+ cbu.cb().g_DissipationFactors_Accumulation = m_params.cascades[cascade].foam_generation_amount*(float)m_dFoamSimDeltaTime*50.0f;
+ cbu.cb().g_DissipationFactors_Fadeout = pow(m_params.cascades[cascade].foam_falloff_speed,(float)m_dFoamSimDeltaTime*50.0f);
+ cbu.cb().g_DissipationFactors_BlurExtents = min(0.5f,m_params.cascades[cascade].foam_dissipation_speed*(float)m_dFoamSimDeltaTime*m_params.cascades[0].fft_period * (1000.0f/m_params.cascades[0].fft_period)/m_params.cascades[cascade].fft_period)/dmap_dim;
+ cbu.cb().g_FoamGenerationThreshold = m_params.cascades[cascade].foam_generation_threshold;
}
pDC_d3d11->PSSetConstantBuffers(0, 1, &m_d3d._11.m_pd3d11FoamGenPixelShaderCB);
@@ -1507,10 +1507,10 @@ HRESULT GFSDK_WaveWorks_Simulation::updateGradientMapsD3D11(Graphics_Context* pG
D3D11_CB_Updater<ps_foamgeneration_cbuffer> cbu(pDC_d3d11,m_d3d._11.m_pd3d11FoamGenPixelShaderCB);
cbu.cb().g_SourceComponents = gfsdk_make_float4(1.0f,0,0,0); // getting component R of energy map as source for energy
cbu.cb().g_UVOffsets = gfsdk_make_float4(1.0f,0,0,0); // blurring by X
- cbu.cb().nvsf_g_DissipationFactors_Accumulation = 0.0f;
- cbu.cb().nvsf_g_DissipationFactors_Fadeout = 1.0f;
- cbu.cb().nvsf_g_DissipationFactors_BlurExtents = min(0.5f,m_params.cascades[cascade].foam_dissipation_speed*(float)m_dFoamSimDeltaTime* (1000.0f/m_params.cascades[0].fft_period) * m_params.cascades[0].fft_period/m_params.cascades[cascade].fft_period)/dmap_dim;
- cbu.cb().nvsf_g_FoamGenerationThreshold = m_params.cascades[cascade].foam_generation_threshold;
+ cbu.cb().g_DissipationFactors_Accumulation = 0.0f;
+ cbu.cb().g_DissipationFactors_Fadeout = 1.0f;
+ cbu.cb().g_DissipationFactors_BlurExtents = min(0.5f,m_params.cascades[cascade].foam_dissipation_speed*(float)m_dFoamSimDeltaTime* (1000.0f/m_params.cascades[0].fft_period) * m_params.cascades[0].fft_period/m_params.cascades[cascade].fft_period)/dmap_dim;
+ cbu.cb().g_FoamGenerationThreshold = m_params.cascades[cascade].foam_generation_threshold;
}
pDC_d3d11->PSSetConstantBuffers(0, 1, &m_d3d._11.m_pd3d11FoamGenPixelShaderCB);
@@ -1840,10 +1840,10 @@ HRESULT GFSDK_WaveWorks_Simulation::updateGradientMapsGnm(Graphics_Context* GNM_
ps_foamgeneration_cbuffer* pFGCB = (ps_foamgeneration_cbuffer*)gnmxWrap->allocateFromCommandBuffer(*gfxContext, sizeof(ps_foamgeneration_cbuffer), Gnm::kEmbeddedDataAlignment4);
pFGCB->g_SourceComponents = gfsdk_make_float4(0,0,0.0f,1.0f); // getting component W of grad map as source for energy
pFGCB->g_UVOffsets = gfsdk_make_float4(0,1.0f,0,0); // blurring by Y
- pFGCB->nvsf_g_DissipationFactors_Accumulation = m_params.cascades[cascade].foam_generation_amount*(float)m_dFoamSimDeltaTime*50.0f;
- pFGCB->nvsf_g_DissipationFactors_Fadeout = pow(m_params.cascades[cascade].foam_falloff_speed,(float)m_dFoamSimDeltaTime*50.0f);
- pFGCB->nvsf_g_DissipationFactors_BlurExtents = min(0.5f,m_params.cascades[cascade].foam_dissipation_speed*(float)m_dFoamSimDeltaTime*m_params.cascades[0].fft_period * (1000.0f/m_params.cascades[0].fft_period)/m_params.cascades[cascade].fft_period)/dmap_dim;
- pFGCB->nvsf_g_FoamGenerationThreshold = m_params.cascades[cascade].foam_generation_threshold;
+ pFGCB->g_DissipationFactors_Accumulation = m_params.cascades[cascade].foam_generation_amount*(float)m_dFoamSimDeltaTime*50.0f;
+ pFGCB->g_DissipationFactors_Fadeout = pow(m_params.cascades[cascade].foam_falloff_speed,(float)m_dFoamSimDeltaTime*50.0f);
+ pFGCB->g_DissipationFactors_BlurExtents = min(0.5f,m_params.cascades[cascade].foam_dissipation_speed*(float)m_dFoamSimDeltaTime*m_params.cascades[0].fft_period * (1000.0f/m_params.cascades[0].fft_period)/m_params.cascades[cascade].fft_period)/dmap_dim;
+ pFGCB->g_FoamGenerationThreshold = m_params.cascades[cascade].foam_generation_threshold;
Gnm::Buffer buffer;
buffer.initAsConstantBuffer(pFGCB, sizeof(*pFGCB));
@@ -1891,9 +1891,9 @@ HRESULT GFSDK_WaveWorks_Simulation::updateGradientMapsGnm(Graphics_Context* GNM_
ps_foamgeneration_cbuffer* pFGCB = (ps_foamgeneration_cbuffer*)gnmxWrap->allocateFromCommandBuffer(*gfxContext, sizeof(ps_foamgeneration_cbuffer), Gnm::kEmbeddedDataAlignment4);
pFGCB->g_SourceComponents = gfsdk_make_float4(1.0f,0,0,0); // getting component R of energy map as source for energy
pFGCB->g_UVOffsets = gfsdk_make_float4(1.0f,0,0,0); // blurring by X
- pFGCB->nvsf_g_DissipationFactors_Accumulation = 0.0f;
- pFGCB->nvsf_g_DissipationFactors_Fadeout = 1.0f;
- pFGCB->nvsf_g_DissipationFactors_BlurExtents = min(0.5f,m_params.cascades[cascade].foam_dissipation_speed*(float)m_dFoamSimDeltaTime* (1000.0f/m_params.cascades[0].fft_period) * m_params.cascades[0].fft_period/m_params.cascades[cascade].fft_period)/dmap_dim;
+ pFGCB->g_DissipationFactors_Accumulation = 0.0f;
+ pFGCB->g_DissipationFactors_Fadeout = 1.0f;
+ pFGCB->g_DissipationFactors_BlurExtents = min(0.5f,m_params.cascades[cascade].foam_dissipation_speed*(float)m_dFoamSimDeltaTime* (1000.0f/m_params.cascades[0].fft_period) * m_params.cascades[0].fft_period/m_params.cascades[cascade].fft_period)/dmap_dim;
Gnm::Buffer buffer;
buffer.initAsConstantBuffer(pFGCB, sizeof(*pFGCB));
diff --git a/src/shader/CalcGradient.fx b/src/shader/CalcGradient.fx
index 58ffd3e..f2526a9 100644
--- a/src/shader/CalcGradient.fx
+++ b/src/shader/CalcGradient.fx
@@ -43,41 +43,41 @@
// Global variables
//------------------------------------------------------------------------------------
-BEGIN_CBUFFER(nvsf_globals,0)
-DECLARE_ATTR_CONSTANT(float4,nvsf_g_Scales, 0); // was: float nvsf_g_ChoppyScale, nvsf_g_GradMap2TexelWSScale
-DECLARE_ATTR_CONSTANT(float4,nvsf_g_OneTexel_Left, 1);
-DECLARE_ATTR_CONSTANT(float4,nvsf_g_OneTexel_Right,2);
-DECLARE_ATTR_CONSTANT(float4,nvsf_g_OneTexel_Back, 3);
-DECLARE_ATTR_CONSTANT(float4,nvsf_g_OneTexel_Front,4);
+BEGIN_CBUFFER(globals,0)
+DECLARE_ATTR_CONSTANT(float4,g_Scales, 0); // was: float g_ChoppyScale, g_GradMap2TexelWSScale
+DECLARE_ATTR_CONSTANT(float4,g_OneTexel_Left, 1);
+DECLARE_ATTR_CONSTANT(float4,g_OneTexel_Right,2);
+DECLARE_ATTR_CONSTANT(float4,g_OneTexel_Back, 3);
+DECLARE_ATTR_CONSTANT(float4,g_OneTexel_Front,4);
END_CBUFFER
-DECLARE_ATTR_SAMPLER(nvsf_g_textureDisplacementMap,nvsf_g_samplerDisplacementMap,0);
+DECLARE_ATTR_SAMPLER(g_textureDisplacementMap,g_samplerDisplacementMap,0);
#ifdef GFSDK_WAVEWORKS_GL
-varying float2 nvsf_vInterpTexCoord;
+varying float2 vInterpTexCoord;
#endif
#ifndef GFSDK_WAVEWORKS_OMIT_VS
#ifdef GFSDK_WAVEWORKS_GL
-attribute float4 nvsf_vInPos;
-attribute float2 nvsf_vInTexCoord;
-#define nvsf_vOutPos gl_Position
+attribute float4 vInPos;
+attribute float2 vInTexCoord;
+#define vOutPos gl_Position
void main()
#else
void vs(
- float4 nvsf_vInPos SEMANTIC(POSITION),
- float2 nvsf_vInTexCoord SEMANTIC(TEXCOORD0),
- out float2 nvsf_vInterpTexCoord SEMANTIC(TEXCOORD0),
- out float4 nvsf_vOutPos SEMANTIC(SV_Position)
+ float4 vInPos SEMANTIC(POSITION),
+ float2 vInTexCoord SEMANTIC(TEXCOORD0),
+ out float2 vInterpTexCoord SEMANTIC(TEXCOORD0),
+ out float4 vOutPos SEMANTIC(SV_Position)
)
#endif
{
// No need to do matrix transform.
- nvsf_vOutPos = nvsf_vInPos;
+ vOutPos = vInPos;
// Pass through general texture coordinate.
- nvsf_vInterpTexCoord = nvsf_vInTexCoord;
+ vInterpTexCoord = vInTexCoord;
}
#endif // !GFSDK_WAVEWORKS_OMIT_VS
@@ -86,32 +86,32 @@ void vs(
#ifndef GFSDK_WAVEWORKS_OMIT_PS
#ifdef GFSDK_WAVEWORKS_GL
-#define nvsf_Output gl_FragColor
+#define Output gl_FragColor
void main()
#else
void ps(
- float2 nvsf_vInterpTexCoord SEMANTIC(TEXCOORD0),
- out float4 nvsf_Output SEMANTIC(SV_Target)
+ float2 vInterpTexCoord SEMANTIC(TEXCOORD0),
+ out float4 Output SEMANTIC(SV_Target)
)
#endif
{
// Sample neighbour texels
- float3 nvsf_displace_left = SampleTex2D(nvsf_g_textureDisplacementMap, nvsf_g_samplerDisplacementMap, nvsf_vInterpTexCoord.xy + nvsf_g_OneTexel_Left.xy).rgb;
- float3 nvsf_displace_right = SampleTex2D(nvsf_g_textureDisplacementMap, nvsf_g_samplerDisplacementMap, nvsf_vInterpTexCoord.xy + nvsf_g_OneTexel_Right.xy).rgb;
- float3 nvsf_displace_back = SampleTex2D(nvsf_g_textureDisplacementMap, nvsf_g_samplerDisplacementMap, nvsf_vInterpTexCoord.xy + nvsf_g_OneTexel_Back.xy).rgb;
- float3 nvsf_displace_front = SampleTex2D(nvsf_g_textureDisplacementMap, nvsf_g_samplerDisplacementMap, nvsf_vInterpTexCoord.xy + nvsf_g_OneTexel_Front.xy).rgb;
+ float3 displace_left = SampleTex2D(g_textureDisplacementMap, g_samplerDisplacementMap, vInterpTexCoord.xy + g_OneTexel_Left.xy).rgb;
+ float3 displace_right = SampleTex2D(g_textureDisplacementMap, g_samplerDisplacementMap, vInterpTexCoord.xy + g_OneTexel_Right.xy).rgb;
+ float3 displace_back = SampleTex2D(g_textureDisplacementMap, g_samplerDisplacementMap, vInterpTexCoord.xy + g_OneTexel_Back.xy).rgb;
+ float3 displace_front = SampleTex2D(g_textureDisplacementMap, g_samplerDisplacementMap, vInterpTexCoord.xy + g_OneTexel_Front.xy).rgb;
// -------- Do not store the actual normal value, instead, it preserves two differential values.
- float2 nvsf_gradient = float2(-(nvsf_displace_right.z - nvsf_displace_left.z) / max(0.01,1.0 + nvsf_g_Scales.y*(nvsf_displace_right.x - nvsf_displace_left.x)), -(nvsf_displace_front.z - nvsf_displace_back.z) / max(0.01,1.0+nvsf_g_Scales.y*(nvsf_displace_front.y - nvsf_displace_back.y)));
- //float2 nvsf_gradient = {-(nvsf_displace_right.z - nvsf_displace_left.z), -(nvsf_displace_front.z - nvsf_displace_back.z) };
+ float2 gradient = float2(-(displace_right.z - displace_left.z) / max(0.01,1.0 + g_Scales.y*(displace_right.x - displace_left.x)), -(displace_front.z - displace_back.z) / max(0.01,1.0+g_Scales.y*(displace_front.y - displace_back.y)));
+ //float2 gradient = {-(displace_right.z - displace_left.z), -(displace_front.z - displace_back.z) };
// Calculate Jacobian corelation from the partial differential of displacement field
- float2 nvsf_Dx = (nvsf_displace_right.xy - nvsf_displace_left.xy) * nvsf_g_Scales.x;
- float2 nvsf_Dy = (nvsf_displace_front.xy - nvsf_displace_back.xy) * nvsf_g_Scales.x;
- float nvsf_J = (1.0f + nvsf_Dx.x) * (1.0f + nvsf_Dy.y) - nvsf_Dx.y * nvsf_Dy.x;
+ float2 Dx = (displace_right.xy - displace_left.xy) * g_Scales.x;
+ float2 Dy = (displace_front.xy - displace_back.xy) * g_Scales.x;
+ float J = (1.0f + Dx.x) * (1.0f + Dy.y) - Dx.y * Dy.x;
// Output
- nvsf_Output = float4(nvsf_gradient, nvsf_J, 0);
+ Output = float4(gradient, J, 0);
}
#endif // !GFSDK_WAVEWORKS_OMIT_PS
diff --git a/src/shader/CalcGradient_glsl_ps.h b/src/shader/CalcGradient_glsl_ps.h
new file mode 100644
index 0000000..2ef7ed8
--- /dev/null
+++ b/src/shader/CalcGradient_glsl_ps.h
@@ -0,0 +1,36 @@
+R"glsl(
+//------------------------------------------------------------------------------------
+// Global variables
+//------------------------------------------------------------------------------------
+
+uniform vec4 g_Scales;
+uniform vec4 g_OneTexel_Left;
+uniform vec4 g_OneTexel_Right;
+uniform vec4 g_OneTexel_Back;
+uniform vec4 g_OneTexel_Front;
+
+uniform sampler2D g_samplerDisplacementMap;
+
+varying float2 vInterpTexCoord;
+
+void main()
+{
+ // Sample neighbour texels
+ float3 displace_left = texture(g_samplerDisplacementMap, vInterpTexCoord.xy + g_OneTexel_Left.xy).rgb;
+ float3 displace_right = texture(g_samplerDisplacementMap, vInterpTexCoord.xy + g_OneTexel_Right.xy).rgb;
+ float3 displace_back = texture(g_samplerDisplacementMap, vInterpTexCoord.xy + g_OneTexel_Back.xy).rgb;
+ float3 displace_front = texture(g_samplerDisplacementMap, vInterpTexCoord.xy + g_OneTexel_Front.xy).rgb;
+
+ // -------- Do not store the actual normal value, instead, it preserves two differential values.
+ float2 gradient = float2(-(displace_right.z - displace_left.z) / max(0.01,1.0 + g_Scales.y*(displace_right.x - displace_left.x)), -(displace_front.z - displace_back.z) / max(0.01,1.0+g_Scales.y*(displace_front.y - displace_back.y)));
+ //float2 gradient = {-(displace_right.z - displace_left.z), -(displace_front.z - displace_back.z) };
+
+ // Calculate Jacobian corelation from the partial differential of displacement field
+ float2 Dx = (displace_right.xy - displace_left.xy) * g_Scales.x;
+ float2 Dy = (displace_front.xy - displace_back.xy) * g_Scales.x;
+ float J = (1.0f + Dx.x) * (1.0f + Dy.y) - Dx.y * Dy.x;
+
+ // Output
+ gl_FragColor = float4(gradient, J, 0);
+}
+)glsl";
diff --git a/src/shader/CalcGradient_glsl_vs.h b/src/shader/CalcGradient_glsl_vs.h
new file mode 100644
index 0000000..aa2747a
--- /dev/null
+++ b/src/shader/CalcGradient_glsl_vs.h
@@ -0,0 +1,26 @@
+R"glsl(
+//------------------------------------------------------------------------------------
+// Global variables
+//------------------------------------------------------------------------------------
+
+uniform vec4 g_Scales;
+uniform vec4 g_OneTexel_Left;
+uniform vec4 g_OneTexel_Right;
+uniform vec4 g_OneTexel_Back;
+uniform vec4 g_OneTexel_Front;
+
+uniform sampler2D g_textureDisplacementMap;
+
+varying float2 vInterpTexCoord;
+
+attribute float4 vInPos;
+attribute float2 vInTexCoord;
+void main()
+{
+ // No need to do matrix transform.
+ gl_Position = vInPos;
+
+ // Pass through general texture coordinate.
+ vInterpTexCoord = vInTexCoord;
+}
+)glsl";
diff --git a/src/shader/FoamGeneration.fx b/src/shader/FoamGeneration.fx
index 50a7007..a50e821 100644
--- a/src/shader/FoamGeneration.fx
+++ b/src/shader/FoamGeneration.fx
@@ -43,39 +43,39 @@
// Global variables
//------------------------------------------------------------------------------------
-BEGIN_CBUFFER(nvsf_globals,0)
-DECLARE_ATTR_CONSTANT(float4,nvsf_g_DissipationFactors,0); // x - the blur extents, y - the fadeout multiplier, z - the accumulation multiplier, w - foam generation threshold
-DECLARE_ATTR_CONSTANT(float4,nvsf_g_SourceComponents ,1); // xyzw - weights of energy map components to be sampled
-DECLARE_ATTR_CONSTANT(float4,nvsf_g_UVOffsets ,2); // xy - defines either horizontal offsets either vertical offsets
+BEGIN_CBUFFER(globals,0)
+DECLARE_ATTR_CONSTANT(float4,g_DissipationFactors,0); // x - the blur extents, y - the fadeout multiplier, z - the accumulation multiplier, w - foam generation threshold
+DECLARE_ATTR_CONSTANT(float4,g_SourceComponents ,1); // xyzw - weights of energy map components to be sampled
+DECLARE_ATTR_CONSTANT(float4,g_UVOffsets ,2); // xy - defines either horizontal offsets either vertical offsets
END_CBUFFER
-DECLARE_ATTR_SAMPLER(nvsf_g_textureEnergyMap,nvsf_g_samplerEnergyMap,0);
+DECLARE_ATTR_SAMPLER(g_textureEnergyMap,g_samplerEnergyMap,0);
#ifdef GFSDK_WAVEWORKS_GL
-varying float2 nvsf_vInterpTexCoord;
+varying float2 vInterpTexCoord;
#endif
#ifndef GFSDK_WAVEWORKS_OMIT_VS
#ifdef GFSDK_WAVEWORKS_GL
-attribute float4 nvsf_vInPos;
-attribute float2 nvsf_vInTexCoord;
-#define nvsf_vOutPos gl_Position
+attribute float4 vInPos;
+attribute float2 vInTexCoord;
+#define vOutPos gl_Position
void main()
#else
void vs(
- float4 nvsf_vInPos SEMANTIC(POSITION),
- float2 nvsf_vInTexCoord SEMANTIC(TEXCOORD0),
- out float2 nvsf_vInterpTexCoord SEMANTIC(TEXCOORD0),
- out float4 nvsf_vOutPos SEMANTIC(SV_Position)
+ float4 vInPos SEMANTIC(POSITION),
+ float2 vInTexCoord SEMANTIC(TEXCOORD0),
+ out float2 vInterpTexCoord SEMANTIC(TEXCOORD0),
+ out float4 vOutPos SEMANTIC(SV_Position)
)
#endif
{
// No need to do matrix transform.
- nvsf_vOutPos = nvsf_vInPos;
+ vOutPos = vInPos;
// Pass through general texture coordinate.
- nvsf_vInterpTexCoord = nvsf_vInTexCoord;
+ vInterpTexCoord = vInTexCoord;
}
#endif // !GFSDK_WAVEWORKS_OMIT_VS
@@ -89,33 +89,33 @@ void vs(
#ifndef GFSDK_WAVEWORKS_OMIT_PS
#ifdef GFSDK_WAVEWORKS_GL
-#define nvsf_Output gl_FragColor
+#define Output gl_FragColor
void main()
#else
void ps(
- float2 nvsf_vInterpTexCoord SEMANTIC(TEXCOORD0),
- out float4 nvsf_Output SEMANTIC(SV_Target)
+ float2 vInterpTexCoord SEMANTIC(TEXCOORD0),
+ out float4 Output SEMANTIC(SV_Target)
)
#endif
{
- float2 nvsf_UVoffset = nvsf_g_UVOffsets.xy*nvsf_g_DissipationFactors.x;
+ float2 UVoffset = g_UVOffsets.xy*g_DissipationFactors.x;
// blur with variable size kernel is done by doing 4 bilinear samples,
// each sample is slightly offset from the center point
- float nvsf_foamenergy1 = dot(nvsf_g_SourceComponents, SampleTex2D(nvsf_g_textureEnergyMap, nvsf_g_samplerEnergyMap, nvsf_vInterpTexCoord.xy + nvsf_UVoffset));
- float nvsf_foamenergy2 = dot(nvsf_g_SourceComponents, SampleTex2D(nvsf_g_textureEnergyMap, nvsf_g_samplerEnergyMap, nvsf_vInterpTexCoord.xy - nvsf_UVoffset));
- float nvsf_foamenergy3 = dot(nvsf_g_SourceComponents, SampleTex2D(nvsf_g_textureEnergyMap, nvsf_g_samplerEnergyMap, nvsf_vInterpTexCoord.xy + nvsf_UVoffset*2.0));
- float nvsf_foamenergy4 = dot(nvsf_g_SourceComponents, SampleTex2D(nvsf_g_textureEnergyMap, nvsf_g_samplerEnergyMap, nvsf_vInterpTexCoord.xy - nvsf_UVoffset*2.0));
+ float foamenergy1 = dot(g_SourceComponents, SampleTex2D(g_textureEnergyMap, g_samplerEnergyMap, vInterpTexCoord.xy + UVoffset));
+ float foamenergy2 = dot(g_SourceComponents, SampleTex2D(g_textureEnergyMap, g_samplerEnergyMap, vInterpTexCoord.xy - UVoffset));
+ float foamenergy3 = dot(g_SourceComponents, SampleTex2D(g_textureEnergyMap, g_samplerEnergyMap, vInterpTexCoord.xy + UVoffset*2.0));
+ float foamenergy4 = dot(g_SourceComponents, SampleTex2D(g_textureEnergyMap, g_samplerEnergyMap, vInterpTexCoord.xy - UVoffset*2.0));
- float nvsf_folding = max(0,SampleTex2D(nvsf_g_textureEnergyMap, nvsf_g_samplerEnergyMap, nvsf_vInterpTexCoord.xy).z);
+ float folding = max(0,SampleTex2D(g_textureEnergyMap, g_samplerEnergyMap, vInterpTexCoord.xy).z);
- float nvsf_energy = nvsf_g_DissipationFactors.y*((nvsf_foamenergy1 + nvsf_foamenergy2 + nvsf_foamenergy3 + nvsf_foamenergy4)*0.25 + max(0,(1.0-nvsf_folding-nvsf_g_DissipationFactors.w))*nvsf_g_DissipationFactors.z);
+ float energy = g_DissipationFactors.y*((foamenergy1 + foamenergy2 + foamenergy3 + foamenergy4)*0.25 + max(0,(1.0-folding-g_DissipationFactors.w))*g_DissipationFactors.z);
- nvsf_energy = min(1.0,nvsf_energy);
+ energy = min(1.0,energy);
// Output
- nvsf_Output = float4(nvsf_energy,nvsf_energy,nvsf_energy,nvsf_energy);
+ Output = float4(energy,energy,energy,energy);
}
#endif // !GFSDK_WAVEWORKS_OMIT_PS \ No newline at end of file
diff --git a/src/shader/FoamGeneration_glsl_ps.h b/src/shader/FoamGeneration_glsl_ps.h
new file mode 100644
index 0000000..0ab5eed
--- /dev/null
+++ b/src/shader/FoamGeneration_glsl_ps.h
@@ -0,0 +1,41 @@
+R"glsl(
+//------------------------------------------------------------------------------------
+// Global variables
+//------------------------------------------------------------------------------------
+
+uniform vec4 g_DissipationFactors;
+uniform vec4 g_SourceComponents;
+uniform vec4 g_UVOffsets;
+
+uniform sampler2D g_samplerDisplacementMap;
+
+varying float2 vInterpTexCoord;
+
+// at 1st rendering step, the folding and the accumulated foam values are being read from gradient map (components z and w),
+// blurred by X, summed, faded and written to foam energy map
+
+// at 2nd rendering step, the accumulated foam values are being read from foam energy texture,
+// blurred by Y and written to w component of gradient map
+
+void main()
+{
+
+ float2 UVoffset = g_UVOffsets.xy*g_DissipationFactors.x;
+
+ // blur with variable size kernel is done by doing 4 bilinear samples,
+ // each sample is slightly offset from the center point
+ float foamenergy1 = dot(g_SourceComponents, texture(g_samplerEnergyMap, vInterpTexCoord.xy + UVoffset));
+ float foamenergy2 = dot(g_SourceComponents, texture(g_samplerEnergyMap, vInterpTexCoord.xy - UVoffset));
+ float foamenergy3 = dot(g_SourceComponents, texture(g_samplerEnergyMap, vInterpTexCoord.xy + UVoffset*2.0));
+ float foamenergy4 = dot(g_SourceComponents, texture(g_samplerEnergyMap, vInterpTexCoord.xy - UVoffset*2.0));
+
+ float folding = max(0,texture(g_samplerEnergyMap, vInterpTexCoord.xy).z);
+
+ float energy = g_DissipationFactors.y*((foamenergy1 + foamenergy2 + foamenergy3 + foamenergy4)*0.25 + max(0,(1.0-folding-g_DissipationFactors.w))*g_DissipationFactors.z);
+
+ energy = min(1.0,energy);
+
+ // Output
+ gl_FragColor = float4(energy,energy,energy,energy);
+}
+)glsl";
diff --git a/src/shader/FoamGeneration_glsl_vs.h b/src/shader/FoamGeneration_glsl_vs.h
new file mode 100644
index 0000000..519efb2
--- /dev/null
+++ b/src/shader/FoamGeneration_glsl_vs.h
@@ -0,0 +1,25 @@
+R"glsl(
+//------------------------------------------------------------------------------------
+// Global variables
+//------------------------------------------------------------------------------------
+
+uniform vec4 g_DissipationFactors;
+uniform vec4 g_SourceComponents;
+uniform vec4 g_UVOffsets;
+
+uniform sampler2D g_samplerDisplacementMap;
+
+varying float2 vInterpTexCoord;
+
+attribute float4 vInPos;
+attribute float2 vInTexCoord;
+
+void main()
+{
+ // No need to do matrix transform.
+ gl_Position = vInPos;
+
+ // Pass through general texture coordinate.
+ vInterpTexCoord = vInTexCoord;
+}
+)glsl"; \ No newline at end of file
diff --git a/src/shader/Quadtree_SM4_sig.fx b/src/shader/Quadtree_SM4_sig.fx
index f8d1a9d..c121356 100644
--- a/src/shader/Quadtree_SM4_sig.fx
+++ b/src/shader/Quadtree_SM4_sig.fx
@@ -35,5 +35,5 @@
float4 GFSDK_WAVEWORKS_VERTEX_INPUT_Sig(GFSDK_WAVEWORKS_VERTEX_INPUT In) : SV_Position
{
- return In.nvsf_vPos;
+ return In.vPos;
}
diff --git a/src/shader/Quadtree_SM5_sig.fx b/src/shader/Quadtree_SM5_sig.fx
index c33887e..adefd2a 100644
--- a/src/shader/Quadtree_SM5_sig.fx
+++ b/src/shader/Quadtree_SM5_sig.fx
@@ -41,5 +41,5 @@
float4 GFSDK_WAVEWORKS_VERTEX_INPUT_Sig(GFSDK_WAVEWORKS_VERTEX_INPUT In) : SV_Position
{
- return In.nvsf_vPos;
+ return In.vPos;
}