Index: ps/trunk/binaries/data/mods/public/shaders/glsl/common/los_fragment.h =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/common/los_fragment.h +++ ps/trunk/binaries/data/mods/public/shaders/glsl/common/los_fragment.h @@ -0,0 +1,21 @@ +#ifndef INCLUDED_LOS_FRAGMENT +#define INCLUDED_LOS_FRAGMENT + +#if !IGNORE_LOS + uniform sampler2D losTex; + + varying vec2 v_los; +#endif + +float getLOS() +{ +#if !IGNORE_LOS + float los = texture2D(losTex, v_los).a; + float threshold = 0.03; + return (los - threshold) / (1.0 - threshold); +#else + return 1.0; +#endif +} + +#endif // INCLUDED_LOS_FRAGMENT Index: ps/trunk/binaries/data/mods/public/shaders/glsl/common/los_vertex.h =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/common/los_vertex.h +++ ps/trunk/binaries/data/mods/public/shaders/glsl/common/los_vertex.h @@ -0,0 +1,17 @@ +#ifndef INCLUDED_LOS_VERTEX +#define INCLUDED_LOS_VERTEX + +#if !IGNORE_LOS + uniform vec2 losTransform; + + varying vec2 v_los; +#endif + +void calculateLOSCoordinates(vec2 position) +{ +#if !IGNORE_LOS + v_los = position * losTransform.x + losTransform.y; +#endif +} + +#endif // INCLUDED_LOS_VERTEX Index: ps/trunk/binaries/data/mods/public/shaders/glsl/model_common.fs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/model_common.fs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/model_common.fs @@ -1,10 +1,10 @@ #version 120 #include "common/fog.h" +#include "common/los_fragment.h" #include "common/shadows_fragment.h" uniform sampler2D baseTex; -uniform sampler2D losTex; uniform sampler2D aoTex; uniform sampler2D normTex; uniform sampler2D specTex; @@ -24,7 +24,6 @@ varying vec4 v_lighting; varying vec2 v_tex; -varying vec2 v_los; #if (USE_INSTANCING || USE_GPU_SKINNING) && USE_AO varying vec2 v_tex2; @@ -171,11 +170,7 @@ color = applyFog(color); - #if !IGNORE_LOS - float los = texture2D(losTex, v_los).a; - los = los < 0.03 ? 0.0 : los; - color *= los; - #endif + color *= getLOS(); color *= shadingColor; Index: ps/trunk/binaries/data/mods/public/shaders/glsl/model_common.vs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/model_common.vs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/model_common.vs @@ -1,5 +1,6 @@ #version 120 +#include "common/los_vertex.h" #include "common/shadows_vertex.h" uniform mat4 transform; @@ -11,7 +12,6 @@ uniform vec3 sunDir; uniform vec3 sunColor; #endif -uniform vec2 losTransform; uniform mat4 instancingTransform; #if USE_WIND @@ -21,7 +21,6 @@ varying vec4 v_lighting; varying vec2 v_tex; -varying vec2 v_los; #if (USE_INSTANCING || USE_GPU_SKINNING) && USE_AO varying vec2 v_tex2; @@ -61,7 +60,7 @@ vec4 fakeCos(vec4 x) { vec4 tri = abs(fract(x + 0.5) * 2.0 - 1.0); - return tri * tri *(3.0 - 2.0 * tri); + return tri * tri *(3.0 - 2.0 * tri); } @@ -122,7 +121,7 @@ float limit = clamp((a_vertex.x * a_vertex.z * a_vertex.y) / 3000.0, 0.0, 0.2); - float diff = cosVec.x * limit; + float diff = cosVec.x * limit; float diff2 = cosVec.y * clamp(a_vertex.y / 60.0, 0.0, 0.25); // fluttering of model parts based on distance from model center (ie longer branches) @@ -148,7 +147,7 @@ #if USE_SPECULAR || USE_SPECULAR_MAP || USE_PARALLAX vec3 eyeVec = cameraPos.xyz - position.xyz; - #if USE_SPECULAR || USE_SPECULAR_MAP + #if USE_SPECULAR || USE_SPECULAR_MAP vec3 sunVec = -sunDir; v_half = normalize(sunVec + normalize(eyeVec)); #endif @@ -157,7 +156,7 @@ #endif #endif #endif - + v_lighting.xyz = max(0.0, dot(normal, -sunDir)) * sunColor; v_tex = a_uv0; @@ -168,5 +167,5 @@ calculatePositionInShadowSpace(position); - v_los = position.xz * losTransform.x + losTransform.y; + calculateLOSCoordinates(position.xz); } Index: ps/trunk/binaries/data/mods/public/shaders/glsl/model_water.fs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/model_water.fs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/model_water.fs @@ -1,9 +1,9 @@ #version 120 +#include "common/los_fragment.h" #include "common/shadows_fragment.h" uniform sampler2D baseTex; -uniform sampler2D losTex; uniform sampler2D aoTex; uniform sampler2D normTex; uniform sampler2D specTex; @@ -32,12 +32,11 @@ uniform vec3 reflectionTint; uniform float reflectionTintStrength; -float waterDepth = 4.0; +float waterDepth = 4.0; float fullDepth = 5.0; // Depth at which to use full murkiness (shallower water will be clearer) varying vec4 worldPos; varying vec4 v_tex; -varying vec2 v_los; void main() { @@ -47,7 +46,6 @@ float t; // Temporary variable vec2 reflCoords, refrCoords; vec3 reflColor, refrColor, specular; - float losMod; //vec4 wtex = textureGrad(waterTex, vec3(fract(v_tex.xy), v_tex.z), dFdx(v_tex.xy), dFdy(v_tex.xy)); vec4 wtex = texture2D(waterTex, fract(v_tex.xy)); @@ -56,35 +54,33 @@ l = -sunDir; v = normalize(cameraPos - worldPos.xyz); h = normalize(l + v); - + ndotl = dot(n, l); ndoth = dot(n, h); ndotv = dot(n, v); - + fresnel = pow(1.0 - ndotv, 0.8); // A rather random Fresnel approximation - + //refrCoords = (0.5*gl_TexCoord[2].xy - 0.8*waviness*n.xz) / gl_TexCoord[2].w + 0.5; // Unbias texture coords //reflCoords = (0.5*gl_TexCoord[1].xy + waviness*n.xz) / gl_TexCoord[1].w + 0.5; // Unbias texture coords - + //vec3 dir = normalize(v + vec3(waviness*n.x, 0.0, waviness*n.z)); vec3 eye = reflect(v, n); - + vec3 tex = textureCube(skyCube, eye).rgb; - reflColor = mix(tex, sunColor * reflectionTint, + reflColor = mix(tex, sunColor * reflectionTint, reflectionTintStrength); //waterDepth = 4.0 + 2.0 * dot(abs(v_tex.zw - 0.5), vec2(0.5)); waterDepth = 4.0; - + //refrColor = (0.5 + 0.5*ndotl) * mix(texture2D(refractionMap, refrCoords).rgb, sunColor * tint, refrColor = (0.5 + 0.5*ndotl) * mix(vec3(0.3), sunColor * waterTint, murkiness * clamp(waterDepth / fullDepth, 0.0, 1.0)); // Murkiness and tint at this pixel (tweaked based on lighting and depth) - - specular = pow(max(0.0, ndoth), 150.0f) * sunColor * specularStrength; - losMod = texture2D(losTex, v_los).a; + specular = pow(max(0.0, ndoth), 150.0f) * sunColor * specularStrength; #if USE_SHADOW float shadow = get_shadow(); @@ -92,17 +88,13 @@ #else float fresShadow = fresnel; #endif - - vec3 color = mix(refrColor + 0.3*specular, reflColor + specular, fresShadow); - gl_FragColor.rgb = color * losMod; + vec3 color = mix(refrColor + 0.3*specular, reflColor + specular, fresShadow); + gl_FragColor.rgb = color * getLOS(); - //gl_FragColor.rgb = mix(refrColor + 0.3*specular, reflColor + specular, fresnel) * losMod; - // Make alpha vary based on both depth (so it blends with the shore) and view angle (make it // become opaque faster at lower view angles so we can't look "underneath" the water plane) t = 18.0 * max(0.0, 0.7 - v.y); gl_FragColor.a = 0.15 * waterDepth * (1.2 + t + fresnel); } - Index: ps/trunk/binaries/data/mods/public/shaders/glsl/model_water.vs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/model_water.vs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/model_water.vs @@ -5,13 +5,13 @@ #version 120 #endif +#include "common/los_vertex.h" #include "common/shadows_vertex.h" uniform mat4 transform; uniform vec3 cameraPos; uniform vec3 sunDir; uniform vec3 sunColor; -uniform vec2 losTransform; uniform mat4 instancingTransform; uniform float sim_time; @@ -35,25 +35,24 @@ varying vec4 worldPos; varying vec4 v_tex; -varying vec2 v_los; vec4 fakeCos(vec4 x) { vec4 tri = abs(fract(x + 0.5) * 2.0 - 1.0); - return tri * tri *(3.0 - 2.0 * tri); + return tri * tri *(3.0 - 2.0 * tri); } void main() { worldPos = instancingTransform * vec4(a_vertex, 1.0); - + v_tex.xy = (a_uv0 + worldPos.xz) / 5.0 + sim_time * translation; v_tex.zw = a_uv0; calculatePositionInShadowSpace(worldPos); - v_los = worldPos.xz * losTransform.x + losTransform.y; + calculateLOSCoordinates(worldPos.xz); gl_Position = transform * worldPos; } Index: ps/trunk/binaries/data/mods/public/shaders/glsl/model_waterfall.fs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/model_waterfall.fs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/model_waterfall.fs @@ -1,9 +1,9 @@ #version 120 +#include "common/los_fragment.h" #include "common/shadows_fragment.h" uniform sampler2D baseTex; -uniform sampler2D losTex; uniform vec3 shadingColor; uniform vec3 ambient; @@ -15,7 +15,6 @@ uniform vec3 specularColor; varying vec4 v_tex; -varying vec2 v_los; varying vec3 v_half; varying vec3 v_normal; varying float v_transp; @@ -36,11 +35,7 @@ vec3 color = (texdiffuse.rgb * v_lighting + specular) * get_shadow(); color += texdiffuse.rgb * ambient; - #if !IGNORE_LOS - float los = texture2D(losTex, v_los).a; - los = los < 0.03 ? 0.0 : los; - color *= los; - #endif + color *= getLOS(); gl_FragColor.rgb = color; gl_FragColor.a = texdiffuse.a; Index: ps/trunk/binaries/data/mods/public/shaders/glsl/model_waterfall.vs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/model_waterfall.vs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/model_waterfall.vs @@ -5,13 +5,13 @@ #version 120 #endif +#include "common/los_vertex.h" #include "common/shadows_vertex.h" uniform mat4 transform; uniform vec3 cameraPos; uniform vec3 sunDir; uniform vec3 sunColor; -uniform vec2 losTransform; uniform mat4 instancingTransform; uniform float sim_time; @@ -24,7 +24,6 @@ varying vec4 worldPos; varying vec4 v_tex; -varying vec2 v_los; varying vec3 v_half; varying vec3 v_normal; varying float v_transp; @@ -33,17 +32,17 @@ void main() { worldPos = instancingTransform * vec4(a_vertex, 1.0); - + v_tex.xy = a_uv0 + sim_time * translation; v_transp = a_uv1.x; calculatePositionInShadowSpace(worldPos); - v_los = worldPos.xz * losTransform.x + losTransform.y; + calculateLOSCoordinates(worldPos.xz); vec3 eyeVec = cameraPos.xyz - worldPos.xyz; - vec3 sunVec = -sunDir; - v_half = normalize(sunVec + normalize(eyeVec)); + vec3 sunVec = -sunDir; + v_half = normalize(sunVec + normalize(eyeVec)); mat3 normalMatrix = mat3(instancingTransform[0].xyz, instancingTransform[1].xyz, instancingTransform[2].xyz); v_normal = normalMatrix * a_normal; @@ -51,4 +50,3 @@ gl_Position = transform * worldPos; } - Index: ps/trunk/binaries/data/mods/public/shaders/glsl/overlayline.fs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/overlayline.fs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/overlayline.fs @@ -1,8 +1,9 @@ #version 120 +#include "common/los_fragment.h" + uniform sampler2D baseTex; uniform sampler2D maskTex; -uniform sampler2D losTex; #if USE_OBJECTCOLOR uniform vec4 objectColor; @@ -12,10 +13,6 @@ varying vec2 v_tex; -#if !IGNORE_LOS -varying vec2 v_los; -#endif - void main() { #if USE_OBJECTCOLOR @@ -30,11 +27,7 @@ vec4 mask = texture2D(maskTex, v_tex); color = mix(base.rgb, color, mask.r); -#if !IGNORE_LOS - float los = texture2D(losTex, v_los).a; - los = los < 0.03 ? 0.0 : los; - color *= los; -#endif + color *= getLOS(); gl_FragColor = vec4(color, alpha * base.a); } Index: ps/trunk/binaries/data/mods/public/shaders/glsl/overlayline.vs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/overlayline.vs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/overlayline.vs @@ -1,8 +1,6 @@ #version 120 -#if !IGNORE_LOS -uniform vec2 losTransform; -#endif +#include "common/los_vertex.h" attribute vec3 a_vertex; attribute vec2 a_uv0; @@ -14,16 +12,10 @@ varying vec2 v_tex; -#if !IGNORE_LOS -varying vec2 v_los; -#endif - void main() { v_tex = a_uv0; -#if !IGNORE_LOS - v_los = a_vertex.xz * losTransform.x + losTransform.yy; -#endif + calculateLOSCoordinates(a_vertex.xz); #if !USE_OBJECTCOLOR v_color = a_color; #endif Index: ps/trunk/binaries/data/mods/public/shaders/glsl/particle.fs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/particle.fs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/particle.fs @@ -1,12 +1,11 @@ #version 110 #include "common/fog.h" +#include "common/los_fragment.h" uniform sampler2D baseTex; -uniform sampler2D losTex; varying vec2 v_tex; -varying vec2 v_los; varying vec4 v_color; uniform vec3 sunColor; @@ -14,12 +13,9 @@ void main() { vec4 color = texture2D(baseTex, v_tex) * vec4((v_color.rgb + sunColor)/2.0,v_color.a); - - float los = texture2D(losTex, v_los).a; - los = los < 0.03 ? 0.0 : los; - color.rgb *= los; color.rgb = applyFog(color.rgb); + color.rgb *= getLOS(); gl_FragColor = color; } Index: ps/trunk/binaries/data/mods/public/shaders/glsl/particle.vs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/particle.vs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/particle.vs @@ -1,11 +1,11 @@ #version 110 +#include "common/los_vertex.h" + uniform mat4 transform; uniform mat4 modelViewMatrix; -uniform vec2 losTransform; varying vec2 v_tex; -varying vec2 v_los; varying vec4 v_color; attribute vec3 a_vertex; @@ -20,10 +20,11 @@ vec2 offset = a_uv1; vec3 position = axis1*offset.x + axis1*offset.y + axis2*offset.x + axis2*-offset.y + a_vertex; - + gl_Position = transform * vec4(position, 1.0); - - v_los = position.xz * losTransform.x + losTransform.y; + + calculateLOSCoordinates(position.xz); + v_tex = a_uv0; v_color = a_color; } Index: ps/trunk/binaries/data/mods/public/shaders/glsl/terrain_common.fs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/terrain_common.fs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/terrain_common.fs @@ -1,11 +1,11 @@ #version 120 #include "common/fog.h" +#include "common/los_fragment.h" #include "common/shadows_fragment.h" uniform sampler2D baseTex; uniform sampler2D blendTex; -uniform sampler2D losTex; uniform sampler2D normTex; uniform sampler2D specTex; @@ -18,7 +18,6 @@ varying vec3 v_lighting; -varying vec2 v_los; varying vec2 v_blend; #if USE_TRIPLANAR @@ -178,9 +177,7 @@ color = applyFog(color); - float los = texture2D(losTex, v_los).a; - los = los < 0.03 ? 0.0 : los; - color *= los; + color *= getLOS(); #if DECAL color *= shadingColor; Index: ps/trunk/binaries/data/mods/public/shaders/glsl/terrain_common.vs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/terrain_common.vs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/terrain_common.vs @@ -1,5 +1,6 @@ #version 120 +#include "common/los_vertex.h" #include "common/shadows_vertex.h" uniform mat4 transform; @@ -12,11 +13,9 @@ uniform vec3 sunColor; #endif uniform vec2 textureTransform; -uniform vec2 losTransform; varying vec3 v_lighting; -varying vec2 v_los; varying vec2 v_blend; #if USE_TRIPLANAR @@ -102,5 +101,5 @@ #endif #endif - v_los = a_vertex.xz * losTransform.x + losTransform.yy; + calculateLOSCoordinates(a_vertex.xz); } Index: ps/trunk/binaries/data/mods/public/shaders/glsl/water_high.fs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/water_high.fs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/water_high.fs @@ -1,7 +1,7 @@ #version 110 #include "common/fog.h" - +#include "common/los_fragment.h" #include "common/shadows_fragment.h" // Environment settings @@ -12,8 +12,6 @@ uniform vec3 cameraPos; -uniform sampler2D losTex; - uniform float waviness; // "Wildness" of the reflections and refractions; choose based on texture uniform vec3 color; // color of the water uniform vec3 tint; // Tint for refraction (used to simulate particles in water) @@ -38,7 +36,6 @@ #if USE_REFRACTION varying vec3 refractionCoords; #endif -varying vec2 losCoords; varying float fwaviness; @@ -67,20 +64,6 @@ #endif #endif -// TODO: convert this to something not only for AABBs -struct Ray { - vec3 Origin; - vec3 Direction; -}; - -float IntersectBox (in Ray ray, in vec3 minimum, in vec3 maximum) -{ - vec3 OMIN = ( minimum - ray.Origin ) / ray.Direction; - vec3 OMAX = ( maximum - ray.Origin ) / ray.Direction; - vec3 MAX = max ( OMAX, OMIN ); - return min ( MAX.x, min ( MAX.y, MAX.z ) ); -} - vec3 getNormal(vec4 fancyeffects) { float wavyEffect = waveParams1.r; @@ -314,9 +297,11 @@ #if USE_SHADOW float shadow = get_shadow(); - float fresShadow = mix(fresnel, fresnel * shadow, 0.05 + murkiness * 0.2); + float fresShadow = mix(fresnel, fresnel * shadow, 0.05 + 10.0 * murkiness * 0.2); + fresShadow = fresnel; vec3 color = mix(refrColor.rgb, reflColor.rgb, fresShadow * reflColor.a); color += shadow * specular; + //color = vec3(fresShadow); vec4 foam = getFoam(fancyeffects, shadow); #else vec3 color = mix(refrColor.rgb, reflColor.rgb, fresnel * reflColor.a); @@ -328,8 +313,5 @@ color = applyFog(color); - float alpha = refrColor.a; - float losMod = texture2D(losTex, losCoords.st).a; - losMod = losMod < 0.03 ? 0.0 : losMod; - gl_FragColor = vec4(color * losMod, alpha); + gl_FragColor = vec4(color * getLOS(), refrColor.a); } Index: ps/trunk/binaries/data/mods/public/shaders/glsl/water_high.vs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/water_high.vs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/water_high.vs @@ -1,10 +1,10 @@ #version 110 +#include "common/los_vertex.h" #include "common/shadows_vertex.h" uniform mat4 reflectionMatrix; uniform mat4 refractionMatrix; -uniform mat4 losMatrix; uniform float repeatScale; uniform float windAngle; // "Wildness" of the reflections and refractions; choose based on texture @@ -31,7 +31,6 @@ #if USE_REFRACTION varying vec3 refractionCoords; #endif -varying vec2 losCoords; varying float fwaviness; varying vec2 WindCosSin; @@ -60,7 +59,7 @@ #if USE_REFRACTION refractionCoords = (refractionMatrix * vec4(a_vertex, 1.0)).rga; #endif - losCoords = (losMatrix * vec4(a_vertex, 1.0)).rg; + calculateLOSCoordinates(a_vertex.xz); calculatePositionInShadowSpace(vec4(a_vertex, 1.0)); Index: ps/trunk/binaries/data/mods/public/shaders/glsl/water_simple.fs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/water_simple.fs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/water_simple.fs @@ -1,15 +1,13 @@ #version 110 +#include "common/los_fragment.h" + uniform sampler2D baseTex; -uniform sampler2D losTex; uniform vec3 color; varying vec2 v_coords; -varying vec2 v_losCoords; void main() { - float losMod = texture2D(losTex, v_losCoords.st).a; - losMod = losMod < 0.03 ? 0.0 : losMod; - gl_FragColor = vec4(texture2D(baseTex, v_coords).rgb * color * losMod, 1.0); + gl_FragColor = vec4(texture2D(baseTex, v_coords).rgb * color * getLOS(), 1.0); } Index: ps/trunk/binaries/data/mods/public/shaders/glsl/water_simple.vs =================================================================== --- ps/trunk/binaries/data/mods/public/shaders/glsl/water_simple.vs +++ ps/trunk/binaries/data/mods/public/shaders/glsl/water_simple.vs @@ -1,13 +1,13 @@ #version 110 +#include "common/los_vertex.h" + attribute vec3 a_vertex; uniform mat4 transform; -uniform mat4 losMatrix; uniform float time; varying vec2 v_coords; -varying vec2 v_losCoords; void main() { @@ -17,6 +17,6 @@ float repeatPeriod = 16.0; v_coords = a_vertex.xz / repeatPeriod + vec2(tx, tz); - v_losCoords = (losMatrix * vec4(a_vertex, 1.0)).rg; + calculateLOSCoordinates(a_vertex.xz); gl_Position = transform * vec4(a_vertex, 1.0); } Index: ps/trunk/source/ps/CStrInternStatic.h =================================================================== --- ps/trunk/source/ps/CStrInternStatic.h +++ ps/trunk/source/ps/CStrInternStatic.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2020 Wildfire Games. +/* Copyright (C) 2021 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -102,7 +102,6 @@ X(hdr) X(height) X(instancingTransform) -X(losMatrix) X(losTex) X(losTex1) X(losTex2) Index: ps/trunk/source/renderer/TerrainRenderer.cpp =================================================================== --- ps/trunk/source/renderer/TerrainRenderer.cpp +++ ps/trunk/source/renderer/TerrainRenderer.cpp @@ -567,7 +567,7 @@ m->fancyWaterShader->Uniform(str_murkiness, WaterMgr->m_Murkiness); m->fancyWaterShader->Uniform(str_windAngle, WaterMgr->m_WindAngle); m->fancyWaterShader->Uniform(str_repeatScale, 1.0f / repeatPeriod); - m->fancyWaterShader->Uniform(str_losMatrix, losTexture.GetTextureMatrix()); + m->fancyWaterShader->Uniform(str_losTransform, losTexture.GetTextureMatrix()[0], losTexture.GetTextureMatrix()[12], 0.f, 0.f); m->fancyWaterShader->Uniform(str_cameraPos, camera.GetOrientation().GetTranslation()); @@ -635,7 +635,7 @@ waterSimpleShader->BindTexture(str_baseTex, WaterMgr->m_WaterTexture[curTex]); waterSimpleShader->BindTexture(str_losTex, losTexture.GetTextureSmooth()); waterSimpleShader->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection()); - waterSimpleShader->Uniform(str_losMatrix, losTexture.GetTextureMatrix()); + waterSimpleShader->Uniform(str_losTransform, losTexture.GetTextureMatrix()[0], losTexture.GetTextureMatrix()[12], 0.f, 0.f); waterSimpleShader->Uniform(str_time, static_cast(time)); waterSimpleShader->Uniform(str_color, WaterMgr->m_WaterColor);