diff options
author | lhofhansl <lhofhansl@yahoo.com> | 2019-09-26 13:57:39 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-26 13:57:39 -0700 |
commit | 5fde69798c69b26b8f1cc5c3ed5b823d691599fd (patch) | |
tree | 3301e9ec0cca8f05bd81fe75fcf461ee000436ed /src | |
parent | 9e95bac75d43534614d168614624fa24048faf48 (diff) | |
download | minetest-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.cpp | 18 |
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; |