mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-06 17:41:04 +00:00
Shadow mapping render pass (#11244)
Co-authored-by: x2048 <codeforsmile@gmail.com>
This commit is contained in:
parent
46f42e15c4
commit
c47313db65
35 changed files with 2624 additions and 38 deletions
|
@ -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") &&
|
||||
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()
|
||||
|
@ -72,7 +82,14 @@ void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _show_min
|
|||
|
||||
void RenderingCore::draw3D()
|
||||
{
|
||||
smgr->drawAll();
|
||||
if (shadow_renderer) {
|
||||
// Shadow renderer will handle the draw stage
|
||||
shadow_renderer->setClearColor(skycolor);
|
||||
shadow_renderer->update();
|
||||
} else {
|
||||
smgr->drawAll();
|
||||
}
|
||||
|
||||
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
|
||||
if (!show_hud)
|
||||
return;
|
||||
|
|
|
@ -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; };
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue