aboutsummaryrefslogtreecommitdiff
path: root/src/client/shadows
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/shadows')
-rw-r--r--src/client/shadows/dynamicshadowsrender.cpp19
-rw-r--r--src/client/shadows/dynamicshadowsrender.h9
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);