/* Minetest Copyright (C) 2021 Liso This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #pragma once #include "irrlichttypes_extrabloated.h" #include #include #include "client/shader.h" // Used by main game rendering class ShadowConstantSetter : public IShaderConstantSetter { CachedPixelShaderSetting m_shadow_view_proj{"m_ShadowViewProj"}; CachedPixelShaderSetting m_light_direction{"v_LightDirection"}; CachedPixelShaderSetting m_texture_res{"f_textureresolution"}; CachedPixelShaderSetting m_shadow_strength{"f_shadow_strength"}; CachedPixelShaderSetting m_time_of_day{"f_timeofday"}; CachedPixelShaderSetting m_shadowfar{"f_shadowfar"}; CachedPixelShaderSetting m_camera_pos{"CameraPos"}; CachedPixelShaderSetting m_shadow_texture{"ShadowMapSampler"}; CachedVertexShaderSetting m_perspective_bias0_vertex{"xyPerspectiveBias0"}; CachedPixelShaderSetting m_perspective_bias0_pixel{"xyPerspectiveBias0"}; CachedVertexShaderSetting m_perspective_bias1_vertex{"xyPerspectiveBias1"}; CachedPixelShaderSetting m_perspective_bias1_pixel{"xyPerspectiveBias1"}; CachedVertexShaderSetting m_perspective_zbias_vertex{"zPerspectiveBias"}; CachedPixelShaderSetting m_perspective_zbias_pixel{"zPerspectiveBias"}; public: ShadowConstantSetter() = default; ~ShadowConstantSetter() = default; virtual void onSetConstants(video::IMaterialRendererServices *services) override; }; class ShadowConstantSetterFactory : public IShaderConstantSetterFactory { public: virtual IShaderConstantSetter *create() { return new ShadowConstantSetter(); } }; // Used by depth shader class ShadowDepthShaderCB : public video::IShaderConstantSetCallBack { public: void OnSetMaterial(const video::SMaterial &material) override {} void OnSetConstants(video::IMaterialRendererServices *services, s32 userData) override; f32 MaxFar{2048.0f}, MapRes{1024.0f}; f32 PerspectiveBiasXY {0.9f}, PerspectiveBiasZ {0.5f}; v3f CameraPos; private: CachedVertexShaderSetting m_light_mvp_setting{"LightMVP"}; CachedVertexShaderSetting m_map_resolution_setting{"MapResolution"}; CachedVertexShaderSetting m_max_far_setting{"MaxFar"}; CachedPixelShaderSetting m_color_map_sampler_setting{"ColorMapSampler"}; CachedVertexShaderSetting m_perspective_bias0{"xyPerspectiveBias0"}; CachedVertexShaderSetting m_perspective_bias1{"xyPerspectiveBias1"}; CachedVertexShaderSetting m_perspective_zbias{"zPerspectiveBias"}; CachedVertexShaderSetting m_cam_pos_setting{"CameraPos"}; };