Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
renderingengine.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4// Copyright (C) 2017 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
5
6#pragma once
7
8#include <vector>
9#include <memory>
10#include <string>
11#include "client/inputhandler.h"
12#include "debug.h"
13#include "config.h"
14#include "client/shader.h"
15#include "client/render/core.h"
16// include the shadow mapper classes too
18#include <IVideoDriver.h>
19
20#if !IS_CLIENT_BUILD
21#error Do not include in server builds
22#endif
23
25 std::string name;
26 std::string friendly_name;
27};
28
29class ITextureSource;
30class Client;
31class Hud;
32
33class RenderingCore;
34
35// Instead of a mechanism to disable fog we just set it to be really far away
36#define FOG_RANGE_ALL (100000 * BS)
37
38/* Helpers */
39
40struct FpsControl {
42
43 void reset();
44
45 void limit(IrrlichtDevice *device, f32 *dtime);
46
47 u32 getBusyMs() const { return busy_time / 1000; }
48
49 // all values in microseconds (us)
51};
52
53// Populates fogColor, fogDistance, fogShadingParameter with values from Irrlicht
55{
56public:
58 virtual IShaderUniformSetter *create(const std::string &name);
59};
60
61/* Rendering engine class */
62
64{
65public:
66 static const video::SColor MENU_SKY_COLOR;
67
68 RenderingEngine(MyEventReceiver *eventReceiver);
70
71 void setResizable(bool resize);
72
73 video::IVideoDriver *getVideoDriver() { return driver; }
74
75 static const VideoDriverInfo &getVideoDriverInfo(video::E_DRIVER_TYPE type);
76 static float getDisplayDensity();
77
79 bool setWindowIcon();
80 void cleanupMeshCache();
81
82 void removeMesh(const scene::IMesh* mesh);
83
95
96 io::IFileSystem *get_filesystem()
97 {
98 return m_device->getFileSystem();
99 }
100
101 static video::IVideoDriver *get_video_driver()
102 {
104 return s_singleton->m_device->getVideoDriver();
105 }
106
107 scene::ISceneManager *get_scene_manager()
108 {
109 return m_device->getSceneManager();
110 }
111
112 static IrrlichtDevice *get_raw_device()
113 {
115 return s_singleton->m_device;
116 }
117
118 gui::IGUIEnvironment *get_gui_env()
119 {
120 return m_device->getGUIEnvironment();
121 }
122
123 // If "indef_pos" is given, the value of "percent" is ignored and an indefinite
124 // progress bar is drawn.
125 void draw_load_screen(const std::wstring &text,
126 gui::IGUIEnvironment *guienv, ITextureSource *tsrc,
127 float dtime = 0, int percent = 0, float *indef_pos = nullptr);
128
129 void draw_scene(video::SColor skycolor, bool show_hud,
130 bool draw_wield_tool, bool draw_crosshair);
131
132 void initialize(Client *client, Hud *hud);
133 void finalize();
134
135 bool run()
136 {
137 return m_device->run();
138 }
139
140 // FIXME: this is still global when it shouldn't be
142 {
145 return nullptr;
146 }
147 static std::vector<video::E_DRIVER_TYPE> getSupportedVideoDrivers();
148
149 static void autosaveScreensizeAndCo(
150 const core::dimension2d<u32> initial_screen_size,
151 const bool initial_window_maximized);
152
158
159private:
160 static void settingChangedCallback(const std::string &name, void *data);
161 v2u32 _getWindowSize() const;
162
163 std::unique_ptr<RenderingCore> core;
164 IrrlichtDevice *m_device = nullptr;
165 video::IVideoDriver *driver;
168};
Definition client.h:106
Definition renderingengine.h:55
virtual IShaderUniformSetter * create(const std::string &name)
Called to create an uniform setter for a specific shader.
Definition renderingengine.cpp:105
FogShaderUniformSetterFactory()
Definition renderingengine.h:57
Definition hud.h:35
Definition shader.h:74
Definition shader.h:56
Definition texturesource.h:45
Definition inputhandler.h:25
PointerType getLastPointerType()
Definition inputhandler.h:88
Definition core.h:20
ShadowRenderer * get_shadow_renderer()
Definition core.h:49
Definition renderingengine.h:64
void draw_load_screen(const std::wstring &text, gui::IGUIEnvironment *guienv, ITextureSource *tsrc, float dtime=0, int percent=0, float *indef_pos=nullptr)
Definition renderingengine.cpp:297
static ShadowRenderer * get_shadow_renderer()
Definition renderingengine.h:141
IrrlichtDevice * m_device
Definition renderingengine.h:164
static RenderingEngine * s_singleton
Definition renderingengine.h:167
bool setWindowIcon()
Definition renderingengine.cpp:280
video::IVideoDriver * driver
Definition renderingengine.h:165
~RenderingEngine()
Definition renderingengine.cpp:224
static PointerType getLastPointerType()
Definition renderingengine.h:153
void initialize(Client *client, Hud *hud)
Definition renderingengine.cpp:394
RenderingEngine(MyEventReceiver *eventReceiver)
Definition renderingengine.cpp:160
void cleanupMeshCache()
Definition renderingengine.cpp:269
static std::vector< video::E_DRIVER_TYPE > getSupportedVideoDrivers()
Definition renderingengine.cpp:374
static video::IVideoDriver * get_video_driver()
Definition renderingengine.h:101
scene::ISceneManager * get_scene_manager()
Definition renderingengine.h:107
static float getDisplayDensity()
Definition renderingengine.cpp:422
static void settingChangedCallback(const std::string &name, void *data)
Definition renderingengine.cpp:236
static IrrlichtDevice * get_raw_device()
Definition renderingengine.h:112
video::IVideoDriver * getVideoDriver()
Definition renderingengine.h:73
static const video::SColor MENU_SKY_COLOR
Definition renderingengine.h:66
io::IFileSystem * get_filesystem()
Definition renderingengine.h:96
std::unique_ptr< RenderingCore > core
Definition renderingengine.h:163
void removeMesh(const scene::IMesh *mesh)
Definition renderingengine.cpp:264
void draw_scene(video::SColor skycolor, bool show_hud, bool draw_wield_tool, bool draw_crosshair)
Definition renderingengine.cpp:405
static void autosaveScreensizeAndCo(const core::dimension2d< u32 > initial_screen_size, const bool initial_window_maximized)
Definition renderingengine.cpp:435
static const VideoDriverInfo & getVideoDriverInfo(video::E_DRIVER_TYPE type)
Definition renderingengine.cpp:411
gui::IGUIEnvironment * get_gui_env()
Definition renderingengine.h:118
void setResizable(bool resize)
Definition renderingengine.cpp:259
void finalize()
Definition renderingengine.cpp:400
bool run()
Definition renderingengine.h:135
v2u32 _getWindowSize() const
Definition renderingengine.cpp:252
bool setupTopLevelWindow()
Definition renderingengine.cpp:275
static v2u32 getWindowSize()
This takes 3d_mode into account - side-by-side will return a halved horizontal size.
Definition renderingengine.h:90
MyEventReceiver * m_receiver
Definition renderingengine.h:166
Definition dynamicshadowsrender.h:42
gui::IGUIEnvironment * guienv
Definition clientlauncher.cpp:34
#define sanity_check(expr)
Definition debug.h:55
PointerType
Definition inputhandler.h:19
core::vector2d< u32 > v2u32
Definition irr_v2d.h:14
Definition activeobjectmgr.cpp:11
Definition renderingengine.h:40
void reset()
Definition renderingengine.cpp:33
u64 busy_time
Definition renderingengine.h:50
FpsControl()
Definition renderingengine.h:41
u64 sleep_time
Definition renderingengine.h:50
void limit(IrrlichtDevice *device, f32 *dtime)
Definition renderingengine.cpp:38
u32 getBusyMs() const
Definition renderingengine.h:47
u64 last_time
Definition renderingengine.h:50
Definition renderingengine.h:24
std::string friendly_name
Definition renderingengine.h:26
std::string name
Definition renderingengine.h:25