//projgrid-flat-common.glsl #define OCEAN_SHADER #ifdef USE_UBO #define UNIFORM_DECL_PREFIX #else #define UNIFORM_DECL_PREFIX uniform #endif #if defined(USE_UBO) && defined(BINDLESS_TEXTURES) #define SAMPLER_DECL_PREFIX #else #define SAMPLER_DECL_PREFIX uniform #endif #ifdef USE_UBO layout(std140) uniform trit_ShaderParameters_UBO { #endif // These are used in vertex shader UNIFORM_DECL_PREFIX mat4 trit_modelMatrix; UNIFORM_DECL_PREFIX mat4 trit_modelview; UNIFORM_DECL_PREFIX mat4 trit_projection; UNIFORM_DECL_PREFIX mat4 trit_invModelviewProj; UNIFORM_DECL_PREFIX vec2 trit_zNearFar; UNIFORM_DECL_PREFIX float trit_depthOffset; UNIFORM_DECL_PREFIX vec4 trit_plane; UNIFORM_DECL_PREFIX vec3 trit_cameraPos; UNIFORM_DECL_PREFIX mat4 trit_gridScale; UNIFORM_DECL_PREFIX float trit_foamScale; UNIFORM_DECL_PREFIX vec2 trit_textureSize; UNIFORM_DECL_PREFIX float trit_fogDensity; UNIFORM_DECL_PREFIX float trit_fogDensityBelow; UNIFORM_DECL_PREFIX float trit_invDampingDistance; UNIFORM_DECL_PREFIX vec3 trit_floorPlanePoint; UNIFORM_DECL_PREFIX vec3 trit_floorPlaneNormal; UNIFORM_DECL_PREFIX float trit_time; UNIFORM_DECL_PREFIX float trit_seaLevel; UNIFORM_DECL_PREFIX vec2 trit_heightMapRangeOffset; UNIFORM_DECL_PREFIX mat4 trit_heightMapMatrix; UNIFORM_DECL_PREFIX bool trit_hasDepthMap; UNIFORM_DECL_PREFIX bool trit_bypassOverridePosition; #ifdef BREAKING_WAVES UNIFORM_DECL_PREFIX float trit_kexp; UNIFORM_DECL_PREFIX float trit_breakerWavelength; UNIFORM_DECL_PREFIX float trit_breakerWavelengthVariance; UNIFORM_DECL_PREFIX vec3 trit_breakerDirection; UNIFORM_DECL_PREFIX float trit_breakerAmplitude; UNIFORM_DECL_PREFIX float trit_breakerPhaseConstant; UNIFORM_DECL_PREFIX float trit_surgeDepth; UNIFORM_DECL_PREFIX float trit_steepnessVariance; UNIFORM_DECL_PREFIX float trit_breakerDepthFalloff; #ifdef BREAKING_WAVES_MAP UNIFORM_DECL_PREFIX mat4 trit_breakingWaveMapMatrix; UNIFORM_DECL_PREFIX bool trit_hasBreakingWaveMap; #endif #endif // These are used in the pixel shader UNIFORM_DECL_PREFIX vec3 trit_L; UNIFORM_DECL_PREFIX vec3 trit_lightColor; UNIFORM_DECL_PREFIX vec3 trit_ambientColor; UNIFORM_DECL_PREFIX vec3 trit_refractColor; UNIFORM_DECL_PREFIX float trit_shininess; UNIFORM_DECL_PREFIX bool trit_hasEnvMap; #ifdef BINDLESS_TEXTURES SAMPLER_DECL_PREFIX samplerCube trit_cubeMap; #endif UNIFORM_DECL_PREFIX float trit_noiseAmplitude; UNIFORM_DECL_PREFIX mat3 trit_cubeMapMatrix; UNIFORM_DECL_PREFIX float trit_invNoiseDistance; #ifdef BINDLESS_TEXTURES SAMPLER_DECL_PREFIX sampler2D trit_planarReflectionMap; #endif UNIFORM_DECL_PREFIX bool trit_hasPlanarReflectionMap; UNIFORM_DECL_PREFIX mat3 trit_planarReflectionMapMatrix; UNIFORM_DECL_PREFIX float trit_planarReflectionDisplacementScale; UNIFORM_DECL_PREFIX float trit_foamBlend; UNIFORM_DECL_PREFIX vec3 trit_fogColor; UNIFORM_DECL_PREFIX float trit_textureLODBias; UNIFORM_DECL_PREFIX float trit_planarReflectionBlend; UNIFORM_DECL_PREFIX bool trit_depthOnly; #ifdef LEEWARD_DAMPENING UNIFORM_DECL_PREFIX vec3 trit_windDir; #endif UNIFORM_DECL_PREFIX bool trit_underwater; UNIFORM_DECL_PREFIX vec3 trit_doubleRefractionColor; UNIFORM_DECL_PREFIX float trit_doubleRefractionIntensity; UNIFORM_DECL_PREFIX float trit_oneOverGamma; UNIFORM_DECL_PREFIX float trit_sunIntensity; UNIFORM_DECL_PREFIX float trit_reflectivityScale; UNIFORM_DECL_PREFIX float trit_transparency; #ifdef HIGHALT UNIFORM_DECL_PREFIX float trit_invZoom; #endif // These are used in both UNIFORM_DECL_PREFIX mat3 trit_basis; UNIFORM_DECL_PREFIX mat3 trit_invBasis; UNIFORM_DECL_PREFIX bool trit_hasHeightMap; UNIFORM_DECL_PREFIX bool trit_hasUserHeightMap; #ifdef USE_UBO }; #endif #ifndef BINDLESS_TEXTURES SAMPLER_DECL_PREFIX samplerCube trit_cubeMap; SAMPLER_DECL_PREFIX sampler2D trit_planarReflectionMap; #endif #if defined(USE_UBO) && defined(BINDLESS_TEXTURES) layout(std140) uniform trit_TextureHandles_UBO { #endif SAMPLER_DECL_PREFIX sampler2D trit_heightMap; SAMPLER_DECL_PREFIX sampler2D trit_depthMap; SAMPLER_DECL_PREFIX sampler2D trit_displacementMap; SAMPLER_DECL_PREFIX sampler2D trit_slopeFoamMap; SAMPLER_DECL_PREFIX sampler2D trit_displacementTexture; SAMPLER_DECL_PREFIX sampler2D trit_hullWakeTexture; #ifdef BREAKING_WAVES #ifdef BREAKING_WAVES_MAP SAMPLER_DECL_PREFIX sampler2D trit_breakingWaveMap; #endif #endif SAMPLER_DECL_PREFIX sampler2D trit_lightFoamTex; SAMPLER_DECL_PREFIX sampler2D trit_noiseTex; SAMPLER_DECL_PREFIX sampler2D trit_washTex; #ifdef BREAKING_WAVES SAMPLER_DECL_PREFIX sampler2D trit_breakerTex; #endif #if defined(USE_UBO) && defined(BINDLESS_TEXTURES) }; #endif struct trit_CircularWave { float amplitude; float radius; float k; float halfWavelength; vec3 position; }; struct trit_KelvinWake { float amplitude; vec3 position; vec3 shipPosition; float foamAmount; float hullWakeWidth; float hullWakeLengthReciprocal; }; struct trit_PropWash { vec3 deltaPos; float washWidth; vec3 propPosition; float distFromSource; float washLength; float alphaStart; float alphaEnd; }; struct trit_LeewardDampener { vec3 bowPos; vec3 sternPos; float velocityDampening; }; #ifdef USE_UBO layout(std140) uniform trit_WakeParameters { #ifdef PROPELLER_WASH trit_PropWash trit_washes[MAX_PROP_WASHES]; #endif trit_CircularWave trit_circularWaves[MAX_CIRCULAR_WAVES]; trit_KelvinWake trit_wakes[MAX_KELVIN_WAKES]; #ifdef LEEWARD_DAMPENING trit_LeewardDampener trit_leewardDampeners[MAX_LEEWARD_DAMPENERS]; int trit_numLeewardDampeners; float trit_leewardDampeningStrength; #endif int trit_numPropWashes; int trit_numKelvinWakes; int trit_numCircularWaves; bool trit_doWakes; float trit_washLength; }; #else #ifdef PROPELLER_WASH uniform trit_PropWash trit_washes[MAX_PROP_WASHES]; #endif uniform trit_CircularWave trit_circularWaves[MAX_CIRCULAR_WAVES]; uniform trit_KelvinWake trit_wakes[MAX_KELVIN_WAKES]; #ifdef LEEWARD_DAMPENING uniform trit_LeewardDampener trit_leewardDampeners[MAX_LEEWARD_DAMPENERS]; uniform int trit_numLeewardDampeners; uniform float trit_leewardDampeningStrength; #endif uniform int trit_numPropWashes; uniform int trit_numKelvinWakes; uniform int trit_numCircularWaves; uniform bool trit_doWakes; uniform float trit_washLength; #endif