Luanti 5.16.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 RenderingEngine(MyEventReceiver *eventReceiver);
68
69 void setResizable(bool resize);
70
71 video::IVideoDriver *getVideoDriver() { return driver; }
72
73 static const VideoDriverInfo &getVideoDriverInfo(video::E_DRIVER_TYPE type);
74 static float getDisplayDensity();
75
77 bool setWindowIcon();
78 void cleanupMeshCache();
79
80 void removeMesh(const scene::IMesh* mesh);
81
93
94 io::IFileSystem *get_filesystem()
95 {
96 return m_device->getFileSystem();
97 }
98
99 static video::IVideoDriver *get_video_driver()
100 {
102 return s_singleton->m_device->getVideoDriver();
103 }
104
105 scene::ISceneManager *get_scene_manager()
106 {
107 return m_device->getSceneManager();
108 }
109
110 static IrrlichtDevice *get_raw_device()
111 {
113 return s_singleton->m_device;
114 }
115
116 gui::IGUIEnvironment *get_gui_env()
117 {
118 return m_device->getGUIEnvironment();
119 }
120
121 // If "indef_pos" is given, the value of "percent" is ignored and an indefinite
122 // progress bar is drawn.
123 void draw_load_screen(const std::wstring &text,
124 gui::IGUIEnvironment *guienv, ITextureSource *tsrc,
125 float dtime = 0, int percent = 0, float *indef_pos = nullptr);
126
127 void draw_scene(video::SColor skycolor, bool show_hud,
128 bool draw_wield_tool, bool draw_crosshair);
129
130 void initialize(Client *client, Hud *hud);
131 void finalize();
132
133 bool run()
134 {
135 return m_device->run();
136 }
137
138 // FIXME: this is still global when it shouldn't be
140 {
143 return nullptr;
144 }
145 static std::vector<video::E_DRIVER_TYPE> getSupportedVideoDrivers();
146
147 static void autosaveScreensizeAndCo(
148 const core::dimension2d<u32> initial_screen_size,
149 const bool initial_window_maximized);
150
156
157 video::SColor m_menu_sky_color = video::SColor(255, 140, 186, 250);
158 video::SColor m_menu_clouds_color = video::SColor(255, 240, 240, 255);
159
160private:
161 static void settingChangedCallback(const std::string &name, void *data);
162 v2u32 _getWindowSize() const;
163
164 std::unique_ptr<RenderingCore> core;
165 IrrlichtDevice *m_device = nullptr;
166 video::IVideoDriver *driver;
169};
Definition client.h:107
Definition renderingengine.h:55
virtual IShaderUniformSetter * create(const std::string &name)
Called to create an uniform setter for a specific shader.
Definition renderingengine.cpp:104
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:296
static ShadowRenderer * get_shadow_renderer()
Definition renderingengine.h:139
IrrlichtDevice * m_device
Definition renderingengine.h:165
static RenderingEngine * s_singleton
Definition renderingengine.h:168
bool setWindowIcon()
Definition renderingengine.cpp:279
video::IVideoDriver * driver
Definition renderingengine.h:166
~RenderingEngine()
Definition renderingengine.cpp:223
static PointerType getLastPointerType()
Definition renderingengine.h:151
void initialize(Client *client, Hud *hud)
Definition renderingengine.cpp:394
RenderingEngine(MyEventReceiver *eventReceiver)
Definition renderingengine.cpp:159
void cleanupMeshCache()
Definition renderingengine.cpp:268
static std::vector< video::E_DRIVER_TYPE > getSupportedVideoDrivers()
Definition renderingengine.cpp:374
video::SColor m_menu_sky_color
Definition renderingengine.h:157
static video::IVideoDriver * get_video_driver()
Definition renderingengine.h:99
scene::ISceneManager * get_scene_manager()
Definition renderingengine.h:105
static float getDisplayDensity()
Definition renderingengine.cpp:422
static void settingChangedCallback(const std::string &name, void *data)
Definition renderingengine.cpp:235
static IrrlichtDevice * get_raw_device()
Definition renderingengine.h:110
video::IVideoDriver * getVideoDriver()
Definition renderingengine.h:71
video::SColor m_menu_clouds_color
Definition renderingengine.h:158
io::IFileSystem * get_filesystem()
Definition renderingengine.h:94
std::unique_ptr< RenderingCore > core
Definition renderingengine.h:164
void removeMesh(const scene::IMesh *mesh)
Definition renderingengine.cpp:263
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:116
void setResizable(bool resize)
Definition renderingengine.cpp:258
void finalize()
Definition renderingengine.cpp:400
bool run()
Definition renderingengine.h:133
v2u32 _getWindowSize() const
Definition renderingengine.cpp:251
bool setupTopLevelWindow()
Definition renderingengine.cpp:274
static v2u32 getWindowSize()
This takes 3d_mode into account - side-by-side will return a halved horizontal size.
Definition renderingengine.h:88
MyEventReceiver * m_receiver
Definition renderingengine.h:167
Definition dynamicshadowsrender.h:42
gui::IGUIEnvironment * guienv
Definition clientlauncher.cpp:35
#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:32
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:37
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