mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +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
|
@ -204,10 +204,6 @@ class GameGlobalShaderUniformSetter : public IShaderUniformSetter
|
||||||
CachedVertexShaderSetting<float, 3> m_camera_offset_vertex{"cameraOffset"};
|
CachedVertexShaderSetting<float, 3> m_camera_offset_vertex{"cameraOffset"};
|
||||||
CachedPixelShaderSetting<float, 3> m_camera_position_pixel{ "cameraPosition" };
|
CachedPixelShaderSetting<float, 3> m_camera_position_pixel{ "cameraPosition" };
|
||||||
CachedVertexShaderSetting<float, 3> m_camera_position_vertex{ "cameraPosition" };
|
CachedVertexShaderSetting<float, 3> m_camera_position_vertex{ "cameraPosition" };
|
||||||
CachedPixelShaderSetting<SamplerLayer_t> m_texture0{"texture0"};
|
|
||||||
CachedPixelShaderSetting<SamplerLayer_t> m_texture1{"texture1"};
|
|
||||||
CachedPixelShaderSetting<SamplerLayer_t> m_texture2{"texture2"};
|
|
||||||
CachedPixelShaderSetting<SamplerLayer_t> m_texture3{"texture3"};
|
|
||||||
CachedVertexShaderSetting<float, 2> m_texel_size0_vertex{"texelSize0"};
|
CachedVertexShaderSetting<float, 2> m_texel_size0_vertex{"texelSize0"};
|
||||||
CachedPixelShaderSetting<float, 2> m_texel_size0_pixel{"texelSize0"};
|
CachedPixelShaderSetting<float, 2> m_texel_size0_pixel{"texelSize0"};
|
||||||
v2f m_texel_size0;
|
v2f m_texel_size0;
|
||||||
|
@ -298,16 +294,6 @@ public:
|
||||||
m_camera_position_pixel.set(camera_position, services);
|
m_camera_position_pixel.set(camera_position, services);
|
||||||
m_camera_position_pixel.set(camera_position, services);
|
m_camera_position_pixel.set(camera_position, 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);
|
|
||||||
|
|
||||||
m_texel_size0_vertex.set(m_texel_size0, services);
|
m_texel_size0_vertex.set(m_texel_size0, services);
|
||||||
m_texel_size0_pixel.set(m_texel_size0, services);
|
m_texel_size0_pixel.set(m_texel_size0, services);
|
||||||
|
|
||||||
|
@ -423,6 +409,90 @@ 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;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
@ -837,11 +907,6 @@ Game::Game() :
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
MinetestApp Public
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
Game::~Game()
|
Game::~Game()
|
||||||
{
|
{
|
||||||
delete client;
|
delete client;
|
||||||
|
@ -1289,6 +1354,8 @@ bool Game::createClient(const GameStartData &start_data)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shader_src->addShaderConstantSetter(new NodeShaderConstantSetter());
|
||||||
|
|
||||||
auto *scsf = new GameGlobalShaderUniformSetterFactory(client);
|
auto *scsf = new GameGlobalShaderUniformSetterFactory(client);
|
||||||
shader_src->addShaderUniformSetterFactory(scsf);
|
shader_src->addShaderUniformSetterFactory(scsf);
|
||||||
|
|
||||||
|
|
|
@ -187,8 +187,7 @@ public:
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
MainShaderConstantSetter: Set some random general constants
|
MainShaderConstantSetter: Sets some random general constants
|
||||||
NodeShaderConstantSetter: Set constants for node rendering
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class MainShaderConstantSetter : public IShaderConstantSetter
|
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
|
MainShaderUniformSetter: Set basic uniforms required for almost everything
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class MainShaderUniformSetter : public IShaderUniformSetter
|
class MainShaderUniformSetter : public IShaderUniformSetter
|
||||||
{
|
{
|
||||||
|
using SamplerLayer_t = s32;
|
||||||
|
|
||||||
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"};
|
||||||
|
|
||||||
|
@ -348,6 +265,11 @@ class MainShaderUniformSetter : public IShaderUniformSetter
|
||||||
// Texture matrix
|
// Texture matrix
|
||||||
CachedVertexShaderSetting<float, 16> m_texture{"mTexture"};
|
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
|
// commonly used way to pass material color to shader
|
||||||
video::SColor m_material_color;
|
video::SColor m_material_color;
|
||||||
CachedPixelShaderSetting<float, 4> m_material_color_setting{"materialColor"};
|
CachedPixelShaderSetting<float, 4> m_material_color_setting{"materialColor"};
|
||||||
|
@ -385,6 +307,16 @@ public:
|
||||||
m_texture.set(texture, services);
|
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);
|
video::SColorf colorf(m_material_color);
|
||||||
m_material_color_setting.set(colorf, services);
|
m_material_color_setting.set(colorf, services);
|
||||||
}
|
}
|
||||||
|
@ -508,7 +440,6 @@ ShaderSource::ShaderSource()
|
||||||
|
|
||||||
// Add global stuff
|
// Add global stuff
|
||||||
addShaderConstantSetter(new MainShaderConstantSetter());
|
addShaderConstantSetter(new MainShaderConstantSetter());
|
||||||
addShaderConstantSetter(new NodeShaderConstantSetter());
|
|
||||||
addShaderUniformSetterFactory(new MainShaderUniformSetterFactory());
|
addShaderUniformSetterFactory(new MainShaderUniformSetterFactory());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -514,6 +514,9 @@ void ShadowRenderer::mixShadowsQuad()
|
||||||
* Shaders system with custom IShaderConstantSetCallBack without messing up the
|
* Shaders system with custom IShaderConstantSetCallBack without messing up the
|
||||||
* code too much. If anyone knows how to integrate this with the standard MT
|
* code too much. If anyone knows how to integrate this with the standard MT
|
||||||
* shaders, please feel free to change it.
|
* shaders, please feel free to change it.
|
||||||
|
*
|
||||||
|
* TODO: as of now (2025) it should be possible to hook these up to the normal
|
||||||
|
* shader system.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void ShadowRenderer::createShaders()
|
void ShadowRenderer::createShaders()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue