diff options
Diffstat (limited to 'src/client/shadows')
| -rw-r--r-- | src/client/shadows/dynamicshadowsrender.cpp | 19 | ||||
| -rw-r--r-- | src/client/shadows/dynamicshadowsrender.h | 9 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/client/shadows/dynamicshadowsrender.cpp b/src/client/shadows/dynamicshadowsrender.cpp index 944deb801..fd3841d2d 100644 --- a/src/client/shadows/dynamicshadowsrender.cpp +++ b/src/client/shadows/dynamicshadowsrender.cpp @@ -707,3 +707,22 @@ std::string ShadowRenderer::readShaderFile(const std::string &path) return prefix + content; } + +ShadowRenderer *createShadowRenderer(IrrlichtDevice *device, Client *client) +{ + // disable if unsupported + if (g_settings->getBool("enable_dynamic_shadows") && ( + g_settings->get("video_driver") != "opengl" || + !g_settings->getBool("enable_shaders"))) { + g_settings->setBool("enable_dynamic_shadows", false); + } + + if (g_settings->getBool("enable_shaders") && + g_settings->getBool("enable_dynamic_shadows")) { + ShadowRenderer *shadow_renderer = new ShadowRenderer(device, client); + shadow_renderer->initialize(); + return shadow_renderer; + } + + return nullptr; +} diff --git a/src/client/shadows/dynamicshadowsrender.h b/src/client/shadows/dynamicshadowsrender.h index bd27f6f20..79dd25c44 100644 --- a/src/client/shadows/dynamicshadowsrender.h +++ b/src/client/shadows/dynamicshadowsrender.h @@ -160,3 +160,12 @@ private: shadowScreenQuad *m_screen_quad{nullptr}; shadowScreenQuadCB *m_shadow_mix_cb{nullptr}; }; + +/** + * @brief Create a shadow renderer if settings allow this. + * + * @param device Device to be used to render shadows. + * @param client Reference to the client context. + * @return A new ShadowRenderer instance or nullptr if shadows are disabled or not supported. + */ +ShadowRenderer *createShadowRenderer(IrrlichtDevice *device, Client *client); |
