DYT/Tool/TritonSDK/Resources/projgrid-flat-common.glsl
2024-12-25 22:48:51 +08:00

218 lines
6.5 KiB
GLSL

//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