aboutsummaryrefslogtreecommitdiff
path: root/src/client/render/core.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/render/core.cpp')
-rw-r--r--src/client/render/core.cpp105
1 files changed, 21 insertions, 84 deletions
diff --git a/src/client/render/core.cpp b/src/client/render/core.cpp
index ca5d3c614..622ea1f9f 100644
--- a/src/client/render/core.cpp
+++ b/src/client/render/core.cpp
@@ -19,111 +19,48 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "core.h"
-#include "client/camera.h"
-#include "client/client.h"
-#include "client/clientmap.h"
-#include "client/hud.h"
-#include "client/minimap.h"
+#include "plain.h"
#include "client/shadows/dynamicshadowsrender.h"
+#include "settings.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),
- shadow_renderer(nullptr)
+RenderingCore::RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud,
+ ShadowRenderer *_shadow_renderer, RenderPipeline *_pipeline, v2f _virtual_size_scale)
+ : device(_device), client(_client), hud(_hud), shadow_renderer(_shadow_renderer),
+ pipeline(_pipeline), virtual_size_scale(_virtual_size_scale)
{
- screensize = driver->getScreenSize();
- virtual_size = screensize;
-
- // 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")) {
- shadow_renderer = new ShadowRenderer(device, client);
- }
}
RenderingCore::~RenderingCore()
{
- clearTextures();
+ delete pipeline;
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();
-}
+ pipeline->addStep<RenderShadowMapStep>();
-void RenderingCore::updateScreenSize()
-{
- virtual_size = screensize;
- clearTextures();
- initTextures();
+ createPipeline();
}
void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _show_minimap,
bool _draw_wield_tool, bool _draw_crosshair)
{
- v2u32 ss = driver->getScreenSize();
- if (screensize != ss) {
- screensize = ss;
- updateScreenSize();
- }
- skycolor = _skycolor;
- show_hud = _show_hud;
- show_minimap = _show_minimap;
- draw_wield_tool = _draw_wield_tool;
- draw_crosshair = _draw_crosshair;
-
- if (shadow_renderer) {
- // This is necessary to render shadows for animations correctly
- smgr->getRootSceneNode()->OnAnimate(device->getTimer()->getTime());
- shadow_renderer->update();
- }
-
- beforeDraw();
- drawAll();
-}
-
-void RenderingCore::draw3D()
-{
- smgr->drawAll();
- if (shadow_renderer)
- shadow_renderer->drawDebug();
+ v2u32 screensize = device->getVideoDriver()->getScreenSize();
+ virtual_size = v2u32(screensize.X * virtual_size_scale.X, screensize.Y * virtual_size_scale.Y);
- driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
- if (!show_hud)
- return;
- hud->drawBlockBounds();
- hud->drawSelectionMesh();
- if (draw_wield_tool)
- camera->drawWieldedTool();
-}
+ PipelineContext context(device, client, hud, shadow_renderer, _skycolor, screensize);
+ context.draw_crosshair = _draw_crosshair;
+ context.draw_wield_tool = _draw_wield_tool;
+ context.show_hud = _show_hud;
+ context.show_minimap = _show_minimap;
-void RenderingCore::drawHUD()
-{
- if (show_hud) {
- if (draw_crosshair)
- hud->drawCrosshair();
-
- hud->drawHotbar(client->getEnv().getLocalPlayer()->getWieldIndex());
- hud->drawLuaElements(camera->getOffset());
- camera->drawNametags();
- if (mapper && show_minimap)
- mapper->drawMinimap();
- }
- guienv->drawAll();
+ pipeline->reset(context);
+ pipeline->run(context);
}
-void RenderingCore::drawPostFx()
+v2u32 RenderingCore::getVirtualSize() const
{
- client->getEnv().getClientMap().renderPostFx(camera->getCameraMode());
-}
+ return virtual_size;
+} \ No newline at end of file