summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlhofhansl <lhofhansl@yahoo.com>2019-09-26 13:57:39 -0700
committerGitHub <noreply@github.com>2019-09-26 13:57:39 -0700
commit5fde69798c69b26b8f1cc5c3ed5b823d691599fd (patch)
tree3301e9ec0cca8f05bd81fe75fcf461ee000436ed /src
parent9e95bac75d43534614d168614624fa24048faf48 (diff)
downloadminetest-5fde69798c69b26b8f1cc5c3ed5b823d691599fd.tar.gz
minetest-5fde69798c69b26b8f1cc5c3ed5b823d691599fd.tar.bz2
minetest-5fde69798c69b26b8f1cc5c3ed5b823d691599fd.zip
Simple shader fixes. (#8991)
1. Pass current camera offset to shader, so shader have access to the global coordinates 2. Pass animation timer to fragment shader. C++ code is already there, just wasn't declared in the shader 3. Delay animation timer wrap-around (from 100s to about 16 minutes)
Diffstat (limited to 'src')
-rw-r--r--src/client/game.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/client/game.cpp b/src/client/game.cpp
index 722e6d0ad..fb2a81973 100644
--- a/src/client/game.cpp
+++ b/src/client/game.cpp
@@ -413,6 +413,8 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
CachedPixelShaderSetting<float, 3> m_eye_position_pixel;
CachedVertexShaderSetting<float, 3> m_eye_position_vertex;
CachedPixelShaderSetting<float, 3> m_minimap_yaw;
+ CachedPixelShaderSetting<float, 3> m_camera_offset_pixel;
+ CachedPixelShaderSetting<float, 3> m_camera_offset_vertex;
CachedPixelShaderSetting<SamplerLayer_t> m_base_texture;
CachedPixelShaderSetting<SamplerLayer_t> m_normal_texture;
CachedPixelShaderSetting<SamplerLayer_t> m_texture_flags;
@@ -445,6 +447,8 @@ public:
m_eye_position_pixel("eyePosition"),
m_eye_position_vertex("eyePosition"),
m_minimap_yaw("yawVec"),
+ m_camera_offset_pixel("cameraOffset"),
+ m_camera_offset_vertex("cameraOffset"),
m_base_texture("baseTexture"),
m_normal_texture("normalTexture"),
m_texture_flags("textureFlags"),
@@ -493,7 +497,7 @@ public:
sunlight.b };
m_day_light.set(dnc, services);
- u32 animation_timer = porting::getTimeMs() % 100000;
+ u32 animation_timer = porting::getTimeMs() % 1000000;
float animation_timer_f = (float)animation_timer / 100000.f;
m_animation_timer_vertex.set(&animation_timer_f, services);
m_animation_timer_pixel.set(&animation_timer_f, services);
@@ -523,6 +527,18 @@ public:
m_minimap_yaw.set(minimap_yaw_array, services);
}
+ float camera_offset_array[3];
+ v3f offset = intToFloat(m_client->getCamera()->getOffset(), BS);
+#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
+ camera_offset_array[0] = offset.X;
+ camera_offset_array[1] = offset.Y;
+ camera_offset_array[2] = offset.Z;
+#else
+ offset.getAs3Values(camera_offset_array);
+#endif
+ m_camera_offset_pixel.set(camera_offset_array, services);
+ m_camera_offset_vertex.set(camera_offset_array, services);
+
SamplerLayer_t base_tex = 0,
normal_tex = 1,
flags_tex = 2;