mirror of
https://github.com/luanti-org/luanti.git
synced 2025-10-05 19:31:04 +00:00
Move NodeShaderConstantSetter to game.cpp
This commit is contained in:
parent
f3c2bbfb48
commit
900cf896db
3 changed files with 107 additions and 106 deletions
|
@ -187,8 +187,7 @@ public:
|
|||
|
||||
|
||||
/*
|
||||
MainShaderConstantSetter: Set some random general constants
|
||||
NodeShaderConstantSetter: Set constants for node rendering
|
||||
MainShaderConstantSetter: Sets some random general constants
|
||||
*/
|
||||
|
||||
class MainShaderConstantSetter : public IShaderConstantSetter
|
||||
|
@ -250,96 +249,14 @@ public:
|
|||
};
|
||||
|
||||
|
||||
class NodeShaderConstantSetter : public IShaderConstantSetter
|
||||
{
|
||||
public:
|
||||
NodeShaderConstantSetter() = default;
|
||||
~NodeShaderConstantSetter() = default;
|
||||
|
||||
void onGenerate(const std::string &name, ShaderConstants &constants) override
|
||||
{
|
||||
if (constants.find("DRAWTYPE") == constants.end())
|
||||
return; // not a node shader
|
||||
[[maybe_unused]] const auto drawtype =
|
||||
static_cast<NodeDrawType>(std::get<int>(constants["DRAWTYPE"]));
|
||||
[[maybe_unused]] const auto material_type =
|
||||
static_cast<MaterialType>(std::get<int>(constants["MATERIAL_TYPE"]));
|
||||
|
||||
#define PROVIDE(constant) constants[ #constant ] = (int)constant
|
||||
|
||||
PROVIDE(NDT_NORMAL);
|
||||
PROVIDE(NDT_AIRLIKE);
|
||||
PROVIDE(NDT_LIQUID);
|
||||
PROVIDE(NDT_FLOWINGLIQUID);
|
||||
PROVIDE(NDT_GLASSLIKE);
|
||||
PROVIDE(NDT_ALLFACES);
|
||||
PROVIDE(NDT_ALLFACES_OPTIONAL);
|
||||
PROVIDE(NDT_TORCHLIKE);
|
||||
PROVIDE(NDT_SIGNLIKE);
|
||||
PROVIDE(NDT_PLANTLIKE);
|
||||
PROVIDE(NDT_FENCELIKE);
|
||||
PROVIDE(NDT_RAILLIKE);
|
||||
PROVIDE(NDT_NODEBOX);
|
||||
PROVIDE(NDT_GLASSLIKE_FRAMED);
|
||||
PROVIDE(NDT_FIRELIKE);
|
||||
PROVIDE(NDT_GLASSLIKE_FRAMED_OPTIONAL);
|
||||
PROVIDE(NDT_PLANTLIKE_ROOTED);
|
||||
|
||||
PROVIDE(TILE_MATERIAL_BASIC);
|
||||
PROVIDE(TILE_MATERIAL_ALPHA);
|
||||
PROVIDE(TILE_MATERIAL_LIQUID_TRANSPARENT);
|
||||
PROVIDE(TILE_MATERIAL_LIQUID_OPAQUE);
|
||||
PROVIDE(TILE_MATERIAL_WAVING_LEAVES);
|
||||
PROVIDE(TILE_MATERIAL_WAVING_PLANTS);
|
||||
PROVIDE(TILE_MATERIAL_OPAQUE);
|
||||
PROVIDE(TILE_MATERIAL_WAVING_LIQUID_BASIC);
|
||||
PROVIDE(TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT);
|
||||
PROVIDE(TILE_MATERIAL_WAVING_LIQUID_OPAQUE);
|
||||
PROVIDE(TILE_MATERIAL_PLAIN);
|
||||
PROVIDE(TILE_MATERIAL_PLAIN_ALPHA);
|
||||
|
||||
#undef PROVIDE
|
||||
|
||||
bool enable_waving_water = g_settings->getBool("enable_waving_water");
|
||||
constants["ENABLE_WAVING_WATER"] = enable_waving_water ? 1 : 0;
|
||||
if (enable_waving_water) {
|
||||
constants["WATER_WAVE_HEIGHT"] = g_settings->getFloat("water_wave_height");
|
||||
constants["WATER_WAVE_LENGTH"] = g_settings->getFloat("water_wave_length");
|
||||
constants["WATER_WAVE_SPEED"] = g_settings->getFloat("water_wave_speed");
|
||||
}
|
||||
switch (material_type) {
|
||||
case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT:
|
||||
case TILE_MATERIAL_WAVING_LIQUID_OPAQUE:
|
||||
case TILE_MATERIAL_WAVING_LIQUID_BASIC:
|
||||
constants["MATERIAL_WAVING_LIQUID"] = 1;
|
||||
break;
|
||||
default:
|
||||
constants["MATERIAL_WAVING_LIQUID"] = 0;
|
||||
break;
|
||||
}
|
||||
switch (material_type) {
|
||||
case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT:
|
||||
case TILE_MATERIAL_WAVING_LIQUID_OPAQUE:
|
||||
case TILE_MATERIAL_WAVING_LIQUID_BASIC:
|
||||
case TILE_MATERIAL_LIQUID_TRANSPARENT:
|
||||
constants["MATERIAL_WATER_REFLECTIONS"] = 1;
|
||||
break;
|
||||
default:
|
||||
constants["MATERIAL_WATER_REFLECTIONS"] = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
constants["ENABLE_WAVING_LEAVES"] = g_settings->getBool("enable_waving_leaves") ? 1 : 0;
|
||||
constants["ENABLE_WAVING_PLANTS"] = g_settings->getBool("enable_waving_plants") ? 1 : 0;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
MainShaderUniformSetter: Set basic uniforms required for almost everything
|
||||
*/
|
||||
|
||||
class MainShaderUniformSetter : public IShaderUniformSetter
|
||||
{
|
||||
using SamplerLayer_t = s32;
|
||||
|
||||
CachedVertexShaderSetting<f32, 16> m_world_view_proj{"mWorldViewProj"};
|
||||
CachedVertexShaderSetting<f32, 16> m_world{"mWorld"};
|
||||
|
||||
|
@ -348,6 +265,11 @@ class MainShaderUniformSetter : public IShaderUniformSetter
|
|||
// Texture matrix
|
||||
CachedVertexShaderSetting<float, 16> m_texture{"mTexture"};
|
||||
|
||||
CachedPixelShaderSetting<SamplerLayer_t> m_texture0{"texture0"};
|
||||
CachedPixelShaderSetting<SamplerLayer_t> m_texture1{"texture1"};
|
||||
CachedPixelShaderSetting<SamplerLayer_t> m_texture2{"texture2"};
|
||||
CachedPixelShaderSetting<SamplerLayer_t> m_texture3{"texture3"};
|
||||
|
||||
// commonly used way to pass material color to shader
|
||||
video::SColor m_material_color;
|
||||
CachedPixelShaderSetting<float, 4> m_material_color_setting{"materialColor"};
|
||||
|
@ -385,6 +307,16 @@ public:
|
|||
m_texture.set(texture, services);
|
||||
}
|
||||
|
||||
SamplerLayer_t tex_id;
|
||||
tex_id = 0;
|
||||
m_texture0.set(&tex_id, services);
|
||||
tex_id = 1;
|
||||
m_texture1.set(&tex_id, services);
|
||||
tex_id = 2;
|
||||
m_texture2.set(&tex_id, services);
|
||||
tex_id = 3;
|
||||
m_texture3.set(&tex_id, services);
|
||||
|
||||
video::SColorf colorf(m_material_color);
|
||||
m_material_color_setting.set(colorf, services);
|
||||
}
|
||||
|
@ -508,7 +440,6 @@ ShaderSource::ShaderSource()
|
|||
|
||||
// Add global stuff
|
||||
addShaderConstantSetter(new MainShaderConstantSetter());
|
||||
addShaderConstantSetter(new NodeShaderConstantSetter());
|
||||
addShaderUniformSetterFactory(new MainShaderUniformSetterFactory());
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue