mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-06 17:41:04 +00:00
Rename IShaderConstantSetter
This commit is contained in:
parent
4c4e296274
commit
b2c2a6ff47
9 changed files with 55 additions and 55 deletions
|
@ -126,7 +126,7 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
|
||||||
// This is only global so it can be used by RenderingEngine::draw_load_screen().
|
// This is only global so it can be used by RenderingEngine::draw_load_screen().
|
||||||
assert(!g_menucloudsmgr && !g_menuclouds);
|
assert(!g_menucloudsmgr && !g_menuclouds);
|
||||||
std::unique_ptr<IWritableShaderSource> ssrc(createShaderSource());
|
std::unique_ptr<IWritableShaderSource> ssrc(createShaderSource());
|
||||||
ssrc->addShaderConstantSetterFactory(new FogShaderConstantSetterFactory());
|
ssrc->addShaderUniformSetterFactory(new FogShaderUniformSetterFactory());
|
||||||
g_menucloudsmgr = m_rendering_engine->get_scene_manager()->createNewSceneManager();
|
g_menucloudsmgr = m_rendering_engine->get_scene_manager()->createNewSceneManager();
|
||||||
g_menuclouds = new Clouds(g_menucloudsmgr, ssrc.get(), -1, rand());
|
g_menuclouds = new Clouds(g_menucloudsmgr, ssrc.get(), -1, rand());
|
||||||
g_menuclouds->setHeight(100.0f);
|
g_menuclouds->setHeight(100.0f);
|
||||||
|
|
|
@ -188,7 +188,7 @@ public:
|
||||||
typedef s32 SamplerLayer_t;
|
typedef s32 SamplerLayer_t;
|
||||||
|
|
||||||
|
|
||||||
class GameGlobalShaderConstantSetter : public IShaderConstantSetter
|
class GameGlobalShaderUniformSetter : public IShaderUniformSetter
|
||||||
{
|
{
|
||||||
Sky *m_sky;
|
Sky *m_sky;
|
||||||
Client *m_client;
|
Client *m_client;
|
||||||
|
@ -247,12 +247,12 @@ public:
|
||||||
|
|
||||||
static void settingsCallback(const std::string &name, void *userdata)
|
static void settingsCallback(const std::string &name, void *userdata)
|
||||||
{
|
{
|
||||||
reinterpret_cast<GameGlobalShaderConstantSetter*>(userdata)->onSettingsChange(name);
|
reinterpret_cast<GameGlobalShaderUniformSetter*>(userdata)->onSettingsChange(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSky(Sky *sky) { m_sky = sky; }
|
void setSky(Sky *sky) { m_sky = sky; }
|
||||||
|
|
||||||
GameGlobalShaderConstantSetter(Sky *sky, Client *client) :
|
GameGlobalShaderUniformSetter(Sky *sky, Client *client) :
|
||||||
m_sky(sky),
|
m_sky(sky),
|
||||||
m_client(client)
|
m_client(client)
|
||||||
{
|
{
|
||||||
|
@ -264,12 +264,12 @@ public:
|
||||||
m_volumetric_light_enabled = g_settings->getBool("enable_volumetric_lighting") && m_bloom_enabled;
|
m_volumetric_light_enabled = g_settings->getBool("enable_volumetric_lighting") && m_bloom_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
~GameGlobalShaderConstantSetter()
|
~GameGlobalShaderUniformSetter()
|
||||||
{
|
{
|
||||||
g_settings->deregisterAllChangedCallbacks(this);
|
g_settings->deregisterAllChangedCallbacks(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void onSetConstants(video::IMaterialRendererServices *services) override
|
void onSetUniforms(video::IMaterialRendererServices *services) override
|
||||||
{
|
{
|
||||||
u32 daynight_ratio = (float)m_client->getEnv().getDayNightRatio();
|
u32 daynight_ratio = (float)m_client->getEnv().getDayNightRatio();
|
||||||
video::SColorf sunlight;
|
video::SColorf sunlight;
|
||||||
|
@ -395,28 +395,28 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class GameGlobalShaderConstantSetterFactory : public IShaderConstantSetterFactory
|
class GameGlobalShaderUniformSetterFactory : public IShaderUniformSetterFactory
|
||||||
{
|
{
|
||||||
Sky *m_sky = nullptr;
|
Sky *m_sky = nullptr;
|
||||||
Client *m_client;
|
Client *m_client;
|
||||||
std::vector<GameGlobalShaderConstantSetter *> created_nosky;
|
std::vector<GameGlobalShaderUniformSetter *> created_nosky;
|
||||||
public:
|
public:
|
||||||
GameGlobalShaderConstantSetterFactory(Client *client) :
|
GameGlobalShaderUniformSetterFactory(Client *client) :
|
||||||
m_client(client)
|
m_client(client)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void setSky(Sky *sky)
|
void setSky(Sky *sky)
|
||||||
{
|
{
|
||||||
m_sky = sky;
|
m_sky = sky;
|
||||||
for (GameGlobalShaderConstantSetter *ggscs : created_nosky) {
|
for (GameGlobalShaderUniformSetter *ggscs : created_nosky) {
|
||||||
ggscs->setSky(m_sky);
|
ggscs->setSky(m_sky);
|
||||||
}
|
}
|
||||||
created_nosky.clear();
|
created_nosky.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual IShaderConstantSetter* create()
|
virtual IShaderUniformSetter* create()
|
||||||
{
|
{
|
||||||
auto *scs = new GameGlobalShaderConstantSetter(m_sky, m_client);
|
auto *scs = new GameGlobalShaderUniformSetter(m_sky, m_client);
|
||||||
if (!m_sky)
|
if (!m_sky)
|
||||||
created_nosky.push_back(scs);
|
created_nosky.push_back(scs);
|
||||||
return scs;
|
return scs;
|
||||||
|
@ -1289,11 +1289,11 @@ bool Game::createClient(const GameStartData &start_data)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto *scsf = new GameGlobalShaderConstantSetterFactory(client);
|
auto *scsf = new GameGlobalShaderUniformSetterFactory(client);
|
||||||
shader_src->addShaderConstantSetterFactory(scsf);
|
shader_src->addShaderUniformSetterFactory(scsf);
|
||||||
|
|
||||||
shader_src->addShaderConstantSetterFactory(
|
shader_src->addShaderUniformSetterFactory(
|
||||||
new FogShaderConstantSetterFactory());
|
new FogShaderUniformSetterFactory());
|
||||||
|
|
||||||
ShadowRenderer::preInit(shader_src);
|
ShadowRenderer::preInit(shader_src);
|
||||||
|
|
||||||
|
|
|
@ -67,14 +67,14 @@ void FpsControl::limit(IrrlichtDevice *device, f32 *dtime)
|
||||||
last_time = time;
|
last_time = time;
|
||||||
}
|
}
|
||||||
|
|
||||||
class FogShaderConstantSetter : public IShaderConstantSetter
|
class FogShaderUniformSetter : public IShaderUniformSetter
|
||||||
{
|
{
|
||||||
CachedPixelShaderSetting<float, 4> m_fog_color{"fogColor"};
|
CachedPixelShaderSetting<float, 4> m_fog_color{"fogColor"};
|
||||||
CachedPixelShaderSetting<float> m_fog_distance{"fogDistance"};
|
CachedPixelShaderSetting<float> m_fog_distance{"fogDistance"};
|
||||||
CachedPixelShaderSetting<float> m_fog_shading_parameter{"fogShadingParameter"};
|
CachedPixelShaderSetting<float> m_fog_shading_parameter{"fogShadingParameter"};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void onSetConstants(video::IMaterialRendererServices *services) override
|
void onSetUniforms(video::IMaterialRendererServices *services) override
|
||||||
{
|
{
|
||||||
auto *driver = services->getVideoDriver();
|
auto *driver = services->getVideoDriver();
|
||||||
assert(driver);
|
assert(driver);
|
||||||
|
@ -101,9 +101,9 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
IShaderConstantSetter *FogShaderConstantSetterFactory::create()
|
IShaderUniformSetter *FogShaderUniformSetterFactory::create()
|
||||||
{
|
{
|
||||||
return new FogShaderConstantSetter();
|
return new FogShaderUniformSetter();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Other helpers */
|
/* Other helpers */
|
||||||
|
|
|
@ -54,11 +54,11 @@ struct FpsControl {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Populates fogColor, fogDistance, fogShadingParameter with values from Irrlicht
|
// Populates fogColor, fogDistance, fogShadingParameter with values from Irrlicht
|
||||||
class FogShaderConstantSetterFactory : public IShaderConstantSetterFactory
|
class FogShaderUniformSetterFactory : public IShaderUniformSetterFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FogShaderConstantSetterFactory() {};
|
FogShaderUniformSetterFactory() {};
|
||||||
virtual IShaderConstantSetter *create();
|
virtual IShaderUniformSetter *create();
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Rendering engine class */
|
/* Rendering engine class */
|
||||||
|
|
|
@ -159,7 +159,7 @@ private:
|
||||||
|
|
||||||
class ShaderCallback : public video::IShaderConstantSetCallBack
|
class ShaderCallback : public video::IShaderConstantSetCallBack
|
||||||
{
|
{
|
||||||
std::vector<std::unique_ptr<IShaderConstantSetter>> m_setters;
|
std::vector<std::unique_ptr<IShaderUniformSetter>> m_setters;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
template <typename Factories>
|
template <typename Factories>
|
||||||
|
@ -175,7 +175,7 @@ public:
|
||||||
virtual void OnSetConstants(video::IMaterialRendererServices *services, s32 userData) override
|
virtual void OnSetConstants(video::IMaterialRendererServices *services, s32 userData) override
|
||||||
{
|
{
|
||||||
for (auto &&setter : m_setters)
|
for (auto &&setter : m_setters)
|
||||||
setter->onSetConstants(services);
|
setter->onSetUniforms(services);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void OnSetMaterial(const video::SMaterial& material) override
|
virtual void OnSetMaterial(const video::SMaterial& material) override
|
||||||
|
@ -187,10 +187,10 @@ public:
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
MainShaderConstantSetter: Set basic constants required for almost everything
|
MainShaderUniformSetter: Set basic uniforms required for almost everything
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class MainShaderConstantSetter : public IShaderConstantSetter
|
class MainShaderUniformSetter : public IShaderUniformSetter
|
||||||
{
|
{
|
||||||
CachedVertexShaderSetting<f32, 16> m_world_view_proj{"mWorldViewProj"};
|
CachedVertexShaderSetting<f32, 16> m_world_view_proj{"mWorldViewProj"};
|
||||||
CachedVertexShaderSetting<f32, 16> m_world{"mWorld"};
|
CachedVertexShaderSetting<f32, 16> m_world{"mWorld"};
|
||||||
|
@ -205,14 +205,14 @@ class MainShaderConstantSetter : public IShaderConstantSetter
|
||||||
CachedPixelShaderSetting<float, 4> m_material_color_setting{"materialColor"};
|
CachedPixelShaderSetting<float, 4> m_material_color_setting{"materialColor"};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~MainShaderConstantSetter() = default;
|
~MainShaderUniformSetter() = default;
|
||||||
|
|
||||||
virtual void onSetMaterial(const video::SMaterial& material) override
|
virtual void onSetMaterial(const video::SMaterial& material) override
|
||||||
{
|
{
|
||||||
m_material_color = material.ColorParam;
|
m_material_color = material.ColorParam;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void onSetConstants(video::IMaterialRendererServices *services) override
|
virtual void onSetUniforms(video::IMaterialRendererServices *services) override
|
||||||
{
|
{
|
||||||
video::IVideoDriver *driver = services->getVideoDriver();
|
video::IVideoDriver *driver = services->getVideoDriver();
|
||||||
assert(driver);
|
assert(driver);
|
||||||
|
@ -243,11 +243,11 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class MainShaderConstantSetterFactory : public IShaderConstantSetterFactory
|
class MainShaderUniformSetterFactory : public IShaderUniformSetterFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual IShaderConstantSetter* create()
|
virtual IShaderUniformSetter* create()
|
||||||
{ return new MainShaderConstantSetter(); }
|
{ return new MainShaderUniformSetter(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -306,9 +306,9 @@ public:
|
||||||
// Shall be called from the main thread.
|
// Shall be called from the main thread.
|
||||||
void rebuildShaders() override;
|
void rebuildShaders() override;
|
||||||
|
|
||||||
void addShaderConstantSetterFactory(IShaderConstantSetterFactory *setter) override
|
void addShaderUniformSetterFactory(IShaderUniformSetterFactory *setter) override
|
||||||
{
|
{
|
||||||
m_setter_factories.emplace_back(setter);
|
m_uniform_factories.emplace_back(setter);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -331,8 +331,8 @@ private:
|
||||||
RequestQueue<std::string, u32, u8, u8> m_get_shader_queue;
|
RequestQueue<std::string, u32, u8, u8> m_get_shader_queue;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Global constant setter factories
|
// Global uniform setter factories
|
||||||
std::vector<std::unique_ptr<IShaderConstantSetterFactory>> m_setter_factories;
|
std::vector<std::unique_ptr<IShaderUniformSetterFactory>> m_uniform_factories;
|
||||||
|
|
||||||
// Generate shader given the shader name.
|
// Generate shader given the shader name.
|
||||||
ShaderInfo generateShader(const std::string &name,
|
ShaderInfo generateShader(const std::string &name,
|
||||||
|
@ -352,7 +352,7 @@ ShaderSource::ShaderSource()
|
||||||
m_shaderinfo_cache.emplace_back();
|
m_shaderinfo_cache.emplace_back();
|
||||||
|
|
||||||
// Add main global constant setter
|
// Add main global constant setter
|
||||||
addShaderConstantSetterFactory(new MainShaderConstantSetterFactory());
|
addShaderUniformSetterFactory(new MainShaderUniformSetterFactory());
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderSource::~ShaderSource()
|
ShaderSource::~ShaderSource()
|
||||||
|
@ -773,7 +773,7 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
|
||||||
geometry_shader_ptr = geometry_shader.c_str();
|
geometry_shader_ptr = geometry_shader.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto cb = make_irr<ShaderCallback>(m_setter_factories);
|
auto cb = make_irr<ShaderCallback>(m_uniform_factories);
|
||||||
infostream << "Compiling high level shaders for " << log_name << std::endl;
|
infostream << "Compiling high level shaders for " << log_name << std::endl;
|
||||||
s32 shadermat = gpu->addHighLevelShaderMaterial(
|
s32 shadermat = gpu->addHighLevelShaderMaterial(
|
||||||
vertex_shader.c_str(), fragment_shader.c_str(), geometry_shader_ptr,
|
vertex_shader.c_str(), fragment_shader.c_str(), geometry_shader_ptr,
|
||||||
|
|
|
@ -40,7 +40,7 @@ struct ShaderInfo {
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Setter of constants for shaders
|
Abstraction for updating uniforms used by shaders
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace irr::video {
|
namespace irr::video {
|
||||||
|
@ -48,19 +48,19 @@ namespace irr::video {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class IShaderConstantSetter {
|
class IShaderUniformSetter {
|
||||||
public:
|
public:
|
||||||
virtual ~IShaderConstantSetter() = default;
|
virtual ~IShaderUniformSetter() = default;
|
||||||
virtual void onSetConstants(video::IMaterialRendererServices *services) = 0;
|
virtual void onSetUniforms(video::IMaterialRendererServices *services) = 0;
|
||||||
virtual void onSetMaterial(const video::SMaterial& material)
|
virtual void onSetMaterial(const video::SMaterial& material)
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class IShaderConstantSetterFactory {
|
class IShaderUniformSetterFactory {
|
||||||
public:
|
public:
|
||||||
virtual ~IShaderConstantSetterFactory() = default;
|
virtual ~IShaderUniformSetterFactory() = default;
|
||||||
virtual IShaderConstantSetter* create() = 0;
|
virtual IShaderUniformSetter* create() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -236,7 +236,7 @@ public:
|
||||||
virtual void rebuildShaders()=0;
|
virtual void rebuildShaders()=0;
|
||||||
|
|
||||||
/// @note Takes ownership of @p setter.
|
/// @note Takes ownership of @p setter.
|
||||||
virtual void addShaderConstantSetterFactory(IShaderConstantSetterFactory *setter) = 0;
|
virtual void addShaderUniformSetterFactory(IShaderUniformSetterFactory *setter) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
IWritableShaderSource *createShaderSource();
|
IWritableShaderSource *createShaderSource();
|
||||||
|
|
|
@ -107,7 +107,7 @@ void ShadowRenderer::disable()
|
||||||
void ShadowRenderer::preInit(IWritableShaderSource *shsrc)
|
void ShadowRenderer::preInit(IWritableShaderSource *shsrc)
|
||||||
{
|
{
|
||||||
if (g_settings->getBool("enable_dynamic_shadows")) {
|
if (g_settings->getBool("enable_dynamic_shadows")) {
|
||||||
shsrc->addShaderConstantSetterFactory(new ShadowConstantSetterFactory());
|
shsrc->addShaderUniformSetterFactory(new ShadowUniformSetterFactory());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include "client/shadows/shadowsshadercallbacks.h"
|
#include "client/shadows/shadowsshadercallbacks.h"
|
||||||
#include "client/renderingengine.h"
|
#include "client/renderingengine.h"
|
||||||
|
|
||||||
void ShadowConstantSetter::onSetConstants(video::IMaterialRendererServices *services)
|
void ShadowUniformSetter::onSetUniforms(video::IMaterialRendererServices *services)
|
||||||
{
|
{
|
||||||
auto *shadow = RenderingEngine::get_shadow_renderer();
|
auto *shadow = RenderingEngine::get_shadow_renderer();
|
||||||
if (!shadow)
|
if (!shadow)
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
// Used by main game rendering
|
// Used by main game rendering
|
||||||
|
|
||||||
class ShadowConstantSetter : public IShaderConstantSetter
|
class ShadowUniformSetter : public IShaderUniformSetter
|
||||||
{
|
{
|
||||||
CachedPixelShaderSetting<f32, 16> m_shadow_view_proj{"m_ShadowViewProj"};
|
CachedPixelShaderSetting<f32, 16> m_shadow_view_proj{"m_ShadowViewProj"};
|
||||||
CachedPixelShaderSetting<f32, 3> m_light_direction{"v_LightDirection"};
|
CachedPixelShaderSetting<f32, 3> m_light_direction{"v_LightDirection"};
|
||||||
|
@ -33,17 +33,17 @@ class ShadowConstantSetter : public IShaderConstantSetter
|
||||||
CachedPixelShaderSetting<f32> m_perspective_zbias_pixel{"zPerspectiveBias"};
|
CachedPixelShaderSetting<f32> m_perspective_zbias_pixel{"zPerspectiveBias"};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ShadowConstantSetter() = default;
|
ShadowUniformSetter() = default;
|
||||||
~ShadowConstantSetter() = default;
|
~ShadowUniformSetter() = default;
|
||||||
|
|
||||||
virtual void onSetConstants(video::IMaterialRendererServices *services) override;
|
virtual void onSetUniforms(video::IMaterialRendererServices *services) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ShadowConstantSetterFactory : public IShaderConstantSetterFactory
|
class ShadowUniformSetterFactory : public IShaderUniformSetterFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual IShaderConstantSetter *create() {
|
virtual IShaderUniformSetter *create() {
|
||||||
return new ShadowConstantSetter();
|
return new ShadowUniformSetter();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue