aboutsummaryrefslogtreecommitdiff
path: root/src/client/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/render')
-rw-r--r--src/client/render/anaglyph.cpp3
-rw-r--r--src/client/render/core.cpp19
-rw-r--r--src/client/render/core.h5
-rw-r--r--src/client/render/interlaced.cpp4
4 files changed, 29 insertions, 2 deletions
diff --git a/src/client/render/anaglyph.cpp b/src/client/render/anaglyph.cpp
index 9ba4464a2..2571f7333 100644
--- a/src/client/render/anaglyph.cpp
+++ b/src/client/render/anaglyph.cpp
@@ -30,6 +30,7 @@ void RenderingCoreAnaglyph::drawAll()
void RenderingCoreAnaglyph::setupMaterial(int color_mask)
{
video::SOverrideMaterial &mat = driver->getOverrideMaterial();
+ mat.reset();
mat.Material.ColorMask = color_mask;
mat.EnableFlags = video::EMF_COLOR_MASK;
mat.EnablePasses = scene::ESNRP_SKY_BOX | scene::ESNRP_SOLID |
@@ -40,7 +41,7 @@ void RenderingCoreAnaglyph::setupMaterial(int color_mask)
void RenderingCoreAnaglyph::useEye(bool right)
{
RenderingCoreStereo::useEye(right);
- driver->clearZBuffer();
+ driver->clearBuffers(video::ECBF_DEPTH);
setupMaterial(right ? video::ECP_GREEN | video::ECP_BLUE : video::ECP_RED);
}
diff --git a/src/client/render/core.cpp b/src/client/render/core.cpp
index 92a7137ea..44ef1c98c 100644
--- a/src/client/render/core.cpp
+++ b/src/client/render/core.cpp
@@ -24,25 +24,35 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/clientmap.h"
#include "client/hud.h"
#include "client/minimap.h"
+#include "client/shadows/dynamicshadowsrender.h"
RenderingCore::RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud)
: device(_device), driver(device->getVideoDriver()), smgr(device->getSceneManager()),
guienv(device->getGUIEnvironment()), client(_client), camera(client->getCamera()),
- mapper(client->getMinimap()), hud(_hud)
+ mapper(client->getMinimap()), hud(_hud),
+ shadow_renderer(nullptr)
{
screensize = driver->getScreenSize();
virtual_size = screensize;
+
+ if (g_settings->getBool("enable_shaders") &&
+ false && g_settings->getBool("enable_dynamic_shadows")) {
+ shadow_renderer = new ShadowRenderer(device, client);
+ }
}
RenderingCore::~RenderingCore()
{
clearTextures();
+ delete shadow_renderer;
}
void RenderingCore::initialize()
{
// have to be called late as the VMT is not ready in the constructor:
initTextures();
+ if (shadow_renderer)
+ shadow_renderer->initialize();
}
void RenderingCore::updateScreenSize()
@@ -66,6 +76,9 @@ void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _show_min
draw_wield_tool = _draw_wield_tool;
draw_crosshair = _draw_crosshair;
+ if (shadow_renderer)
+ shadow_renderer->update();
+
beforeDraw();
drawAll();
}
@@ -73,9 +86,13 @@ void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _show_min
void RenderingCore::draw3D()
{
smgr->drawAll();
+ if (shadow_renderer)
+ shadow_renderer->drawDebug();
+
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
if (!show_hud)
return;
+ hud->drawBlockBounds();
hud->drawSelectionMesh();
if (draw_wield_tool)
camera->drawWieldedTool();
diff --git a/src/client/render/core.h b/src/client/render/core.h
index 52ea8f99f..cabfbbfad 100644
--- a/src/client/render/core.h
+++ b/src/client/render/core.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include "irrlichttypes_extrabloated.h"
+class ShadowRenderer;
class Camera;
class Client;
class Hud;
@@ -47,6 +48,8 @@ protected:
Minimap *mapper;
Hud *hud;
+ ShadowRenderer *shadow_renderer;
+
void updateScreenSize();
virtual void initTextures() {}
virtual void clearTextures() {}
@@ -72,4 +75,6 @@ public:
bool _draw_wield_tool, bool _draw_crosshair);
inline v2u32 getVirtualSize() const { return virtual_size; }
+
+ ShadowRenderer *get_shadow_renderer() { return shadow_renderer; };
};
diff --git a/src/client/render/interlaced.cpp b/src/client/render/interlaced.cpp
index ce8e92f21..3f79a8eb5 100644
--- a/src/client/render/interlaced.cpp
+++ b/src/client/render/interlaced.cpp
@@ -35,7 +35,11 @@ void RenderingCoreInterlaced::initMaterial()
IShaderSource *s = client->getShaderSource();
mat.UseMipMaps = false;
mat.ZBuffer = false;
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+ mat.ZWriteEnable = video::EZW_OFF;
+#else
mat.ZWriteEnable = false;
+#endif
u32 shader = s->getShader("3d_interlaced_merge", TILE_MATERIAL_BASIC);
mat.MaterialType = s->getShaderInfo(shader).material;
for (int k = 0; k < 3; ++k) {