/* Minetest Copyright (C) 2010-2013 celeron55, Perttu Ahola Copyright (C) 2017 numzero, Lobachevskiy Vitaliy This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "core.h" #include "plain.h" #include "client/shadows/dynamicshadowsrender.h" #include "settings.h" 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) { auto light_node = device->getSceneManager()->addLightSceneNode(); // FIXME: light should be directional, but when enabled, there are massive z-fighting issues // light_node->getLightData().Type = video::ELT_DIRECTIONAL; // TODO: sun angle // TODO: reasonable values for ambient, diffuse, specular light_node->setPosition(v3f(0, 700, 0)); light_node->setRotation(v3f(90, 0, 0)); light_node->setRadius(1000); } RenderingCore::~RenderingCore() { delete pipeline; delete shadow_renderer; } void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _show_minimap, bool _draw_wield_tool, bool _draw_crosshair) { v2u32 screensize = device->getVideoDriver()->getScreenSize(); virtual_size = v2u32(screensize.X * virtual_size_scale.X, screensize.Y * virtual_size_scale.Y); 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; pipeline->reset(context); pipeline->run(context); } v2u32 RenderingCore::getVirtualSize() const { return virtual_size; }