aboutsummaryrefslogtreecommitdiff
path: root/src/client/renderingengine.cpp
Commit message (Collapse)AuthorAge
* Remove unused header includeshecks2021-07-21
|
* Fix build on Ubuntu 16.04 and macOSsfan52021-07-12
| | | | | | Apparently the C++ standard library is supposed to provide specializations of std::hash for enums (even in C++11) but those don't always work for whatever reason.
* Refactor video driver name retrieval (#11413)hecks2021-07-11
| | | Co-authored-by: hecktest <>
* Remove unsupported video drivers (#11395)hecks2021-06-30
| | | This completely removes any mention of the software and D3D drivers from MT, preventing the user from accidentally attempting to use them. Users who need a software renderer should be asked to install Mesa drivers which offer superior fidelity and performance over the 'burningsvideo' driver.
* Drop --videomodes, fullscreen_bpp and high_precision_fpu settingssfan52021-06-16
| | | | These have been pointless for a while.
* fix: some code tidy about includes & irr namespacesLoic Blot2021-05-03
|
* refacto: remove get_gui_env & draw_load_screen from RenderingEngine singletonLoic Blot2021-05-03
|
* refacto: RenderingEngine is now better hiddenLoic Blot2021-05-03
| | | | | | | | | | * No more access to the singleton instance from everywhere (RenderingEngine::get_instance dropped) * RenderingEngine::get_timer_time is now non static * RenderingEngine::draw_menu_scene is now non static * RenderingEngine::draw_scene is now non static * RenderingEngine::{initialize,finalize} are now non static * RenderingEngine::run is now non static * RenderingEngine::getWindowSize now have a static helper. It was mandatory to hide the global get_instance access
* refacto: hide mesh_cache inside the rendering engineLoic Blot2021-05-03
| | | | This permit cleaner access to meshCache and ensure we don't access to it from all the code
* refacto: add RenderingEngine::cleanupMeshCacheLoic Blot2021-05-03
| | | | This permits to prevent client to own the mesh cache cleanup logic. It's better in RenderingEngine
* GLES fixes (#11205)sfan52021-04-18
| | | | | * Consistently set float precision for GLES * Enable DPI scaling on Windows+GLES
* Enable Irrlicht debug logging with --tracesfan52021-03-12
|
* Restore Irrlicht 1.9 supportsfan52021-03-09
|
* Fix memory leak detected by address sanitizer (#10896)k.h.lai2021-02-02
|
* Android: add OpenGL ES 2 support (#9715)Maksim2020-04-22
| | | .. and bump gradle to 3.6.3
* Implement DPI scaling for Windows (#9586)sfan52020-04-11
|
* Overall improvements to log messages (#9598)sfan52020-04-08
| | | | Hide some unnecessarily verbose ones behind --trace or disable them entirely. Remove duplicate ones. Improve their contents in some places.
* Unify OpenGL ES supportsfan52019-08-04
|
* Add styles to most elementsrubenwardy2019-08-03
|
* Add custom colorable GUIButton implementationrubenwardy2019-08-03
|
* Fix crash if display resolution is not set (#7950)Martin Renold2018-12-08
| | | | On my wayland / gnome3 setup DisplayHeightMM() returns 0. This resulted in a misleading startup error suggesting to fix my font paths.
* Provide Xorg/net wm process ID (#7445)thoughtjigs2018-06-17
| | | | | | Adding support for _NET_WM_PID as defined in Extended Window Manager Hints Move verbose messaging to setupXorgTopLevelWindow method as Xorg messages should only occur when running in Xorg env. Irrlicht returns the XDisplay as a void* and XWindow as an unsigned long so reinterpret those as the appropriate type. Also fixed a spaces for tab formating issue
* Android build fixes for c++11stujones112018-03-11
|
* [CSM] Add basic HUD manipulation. (#6067)red-0012018-01-20
| | | | | | * [CSM] Add basic HUD manipulation. Workaround for on_connect not working right now.
* Add confirmation on new player registration (#6849)Muhammad Rifqi Priyo Susanto2018-01-13
| | | | | | | | | | | | | | * Attempt to add registration confirmation Using SRP auth mechanism, if server sent AUTH_MECHANISM_FIRST_SRP that means the player isn't exist. Also tell player about the server and chosen username. Local game has localhost as IP address of the server. Add RenderingEngine::draw_menu_scene() to draw GUI and clouds background. aborted -> connection_aborted * Rewrite information message text Client::promptConfirmRegister() -> Client::promptConfirmRegistration()
* Rewrite rendering engine (#6253)Vitaliy2017-10-31
| | | | | | | | | | | | * Clean draw_*() arguments * Split rendering core * Add anaglyph 3D * Interlaced 3D * Drop obsolete methods
* Initial Haiku support (#6568)miqlas2017-10-30
| | | | * Iitial Haiku support
* Travis: Update clang from 4.0 to 5.0 (#6467)Loïc Blot2017-10-09
| | | | * Update clang from 4.0 to 5.0
* Cleanup various headers to reduce compilation times (#6255)Loïc Blot2017-08-16
| | | | * Cleanup various headers to reduce compilation times
* Modernize client code (#6250)Loïc Blot2017-08-15
| | | | | | | | * Various code style fixes * Use range based for loops * Use empty instead of empty objects * Use C++11 default keyword for trivial constructors and destructors * Drop some useless casts * Use emplace_back instead of push_back to improve performance of some vectors push
* Isolate irrlicht references and use a singleton (#6041)Loïc Blot2017-06-26
* Add Device3D class which will contain IrrlichtDevice interface move getSupportedVideoDrivers to Device3D Add Device3D singleton & use it in various places Rename Device3D to Rendering engine & add helper functions to various device pointers More singleton work RenderingEngine owns draw_load_screen move draw functions to RenderingEngine Reduce IrrlichtDevice exposure and guienvironment RenderingEngine: Expose get_timer_time() to remove device from guiEngine Make irrlichtdevice & scene manager less exposed * Code style fixes * Move porting::getVideoDriverName, getVideoDriverFriendlyName, getDisplayDensity, getDisplaySize to RenderingEngine Fix XORG_USED macro -> RenderingEngine + create_engine_device from RenderingEngine constructor directly * enum paralax => enum parallax
span class="hl num">8)&0xff); data[3] = ((i>> 0)&0xff); } inline void writeU16(u8 *data, u16 i) { data[0] = ((i>> 8)&0xff); data[1] = ((i>> 0)&0xff); } inline void writeU8(u8 *data, u8 i) { data[0] = ((i>> 0)&0xff); } inline u64 readU64(const u8 *data) { return ((u64)data[0]<<56) | ((u64)data[1]<<48) | ((u64)data[2]<<40) | ((u64)data[3]<<32) | ((u64)data[4]<<24) | ((u64)data[5]<<16) | ((u64)data[6]<<8) | ((u64)data[7]<<0); } inline u32 readU32(const u8 *data) { return (data[0]<<24) | (data[1]<<16) | (data[2]<<8) | (data[3]<<0); } inline u16 readU16(const u8 *data) { return (data[0]<<8) | (data[1]<<0); } inline u8 readU8(const u8 *data) { return (data[0]<<0); } inline void writeS32(u8 *data, s32 i){ writeU32(data, (u32)i); } inline s32 readS32(const u8 *data){ return (s32)readU32(data); } inline void writeS16(u8 *data, s16 i){ writeU16(data, (u16)i); } inline s16 readS16(const u8 *data){ return (s16)readU16(data); } inline void writeS8(u8 *data, s8 i){ writeU8(data, (u8)i); } inline s8 readS8(const u8 *data){ return (s8)readU8(data); } inline void writeF1000(u8 *data, f32 i){ writeS32(data, i*1000); } inline f32 readF1000(const u8 *data){ return (f32)readS32(data)/1000.; } inline void writeV3S32(u8 *data, v3s32 p) { writeS32(&data[0], p.X); writeS32(&data[4], p.Y); writeS32(&data[8], p.Z); } inline v3s32 readV3S32(const u8 *data) { v3s32 p; p.X = readS32(&data[0]); p.Y = readS32(&data[4]); p.Z = readS32(&data[8]); return p; } inline void writeV3F1000(u8 *data, v3f p) { writeF1000(&data[0], p.X); writeF1000(&data[4], p.Y); writeF1000(&data[8], p.Z); } inline v3f readV3F1000(const u8 *data) { v3f p; p.X = (float)readF1000(&data[0]); p.Y = (float)readF1000(&data[4]); p.Z = (float)readF1000(&data[8]); return p; } inline void writeV2F1000(u8 *data, v2f p) { writeF1000(&data[0], p.X); writeF1000(&data[4], p.Y); } inline v2f readV2F1000(const u8 *data) { v2f p; p.X = (float)readF1000(&data[0]); p.Y = (float)readF1000(&data[4]); return p; } inline void writeV2S16(u8 *data, v2s16 p) { writeS16(&data[0], p.X); writeS16(&data[2], p.Y); } inline v2s16 readV2S16(const u8 *data) { v2s16 p; p.X = readS16(&data[0]); p.Y = readS16(&data[2]); return p; } inline void writeV2S32(u8 *data, v2s32 p) { writeS32(&data[0], p.X); writeS32(&data[2], p.Y); } inline v2s32 readV2S32(const u8 *data) { v2s32 p; p.X = readS32(&data[0]); p.Y = readS32(&data[2]); return p; } inline void writeV3S16(u8 *data, v3s16 p) { writeS16(&data[0], p.X); writeS16(&data[2], p.Y); writeS16(&data[4], p.Z); } inline v3s16 readV3S16(const u8 *data) { v3s16 p; p.X = readS16(&data[0]); p.Y = readS16(&data[2]); p.Z = readS16(&data[4]); return p; } inline void writeARGB8(u8 *data, video::SColor p) { writeU8(&data[0], p.getAlpha()); writeU8(&data[1], p.getRed()); writeU8(&data[2], p.getGreen()); writeU8(&data[3], p.getBlue()); } inline video::SColor readARGB8(const u8 *data) { video::SColor p; p.setAlpha(readU8(&data[0])); p.setRed(readU8(&data[1])); p.setGreen(readU8(&data[2])); p.setBlue(readU8(&data[3])); return p; } /* The above stuff directly interfaced to iostream */ inline void writeU8(std::ostream &os, u8 p) { char buf[1] = {0}; writeU8((u8*)buf, p); os.write(buf, 1); } inline u8 readU8(std::istream &is) { char buf[1] = {0}; is.read(buf, 1); return readU8((u8*)buf); } inline void writeU16(std::ostream &os, u16 p) { char buf[2] = {0}; writeU16((u8*)buf, p); os.write(buf, 2); } inline u16 readU16(std::istream &is) { char buf[2] = {0}; is.read(buf, 2); return readU16((u8*)buf); } inline void writeU32(std::ostream &os, u32 p) { char buf[4] = {0}; writeU32((u8*)buf, p); os.write(buf, 4); } inline u32 readU32(std::istream &is) { char buf[4] = {0}; is.read(buf, 4); return readU32((u8*)buf); } inline void writeS32(std::ostream &os, s32 p) { char buf[4] = {0}; writeS32((u8*)buf, p); os.write(buf, 4); } inline s32 readS32(std::istream &is) { char buf[4] = {0}; is.read(buf, 4); return readS32((u8*)buf); } inline void writeS16(std::ostream &os, s16 p) { char buf[2] = {0}; writeS16((u8*)buf, p); os.write(buf, 2); } inline s16 readS16(std::istream &is) { char buf[2] = {0}; is.read(buf, 2); return readS16((u8*)buf); } inline void writeS8(std::ostream &os, s8 p) { char buf[1] = {0}; writeS8((u8*)buf, p); os.write(buf, 1); } inline s8 readS8(std::istream &is) { char buf[1] = {0}; is.read(buf, 1); return readS8((u8*)buf); } inline void writeF1000(std::ostream &os, f32 p) { char buf[4] = {0}; writeF1000((u8*)buf, p); os.write(buf, 4); } inline f32 readF1000(std::istream &is) { char buf[4] = {0}; is.read(buf, 4); return readF1000((u8*)buf); } inline void writeV3F1000(std::ostream &os, v3f p) { char buf[12]; writeV3F1000((u8*)buf, p); os.write(buf, 12); } inline v3f readV3F1000(std::istream &is) { char buf[12]; is.read(buf, 12); return readV3F1000((u8*)buf); } inline void writeV2F1000(std::ostream &os, v2f p) { char buf[8] = {0}; writeV2F1000((u8*)buf, p); os.write(buf, 8); } inline v2f readV2F1000(std::istream &is) { char buf[8] = {0}; is.read(buf, 8); return readV2F1000((u8*)buf); } inline void writeV2S16(std::ostream &os, v2s16 p) { char buf[4] = {0}; writeV2S16((u8*)buf, p); os.write(buf, 4); } inline v2s16 readV2S16(std::istream &is) { char buf[4] = {0}; is.read(buf, 4); return readV2S16((u8*)buf); } inline void writeV3S16(std::ostream &os, v3s16 p) { char buf[6] = {0}; writeV3S16((u8*)buf, p); os.write(buf, 6); } inline v3s16 readV3S16(std::istream &is) { char buf[6] = {0}; is.read(buf, 6); return readV3S16((u8*)buf); } inline void writeARGB8(std::ostream &os, video::SColor p) { char buf[4] = {0}; writeARGB8((u8*)buf, p); os.write(buf, 4); } inline video::SColor readARGB8(std::istream &is) { char buf[4] = {0}; is.read(buf, 4); return readARGB8((u8*)buf); } /* More serialization stuff */ // Creates a string with the length as the first two bytes inline std::string serializeString(const std::string &plain) { //assert(plain.size() <= 65535); if(plain.size() > 65535) throw SerializationError("String too long for serializeString"); char buf[2]; writeU16((u8*)&buf[0], plain.size()); std::string s; s.append(buf, 2); s.append(plain); return s; } // Creates a string with the length as the first two bytes from wide string inline std::string serializeWideString(const std::wstring &plain) { //assert(plain.size() <= 65535); if(plain.size() > 65535) throw SerializationError("String too long for serializeString"); char buf[2]; writeU16((u8*)buf, plain.size()); std::string s; s.append(buf, 2); for(u32 i=0; i<plain.size(); i++) { writeU16((u8*)buf, plain[i]); s.append(buf, 2); } return s; } // Reads a string with the length as the first two bytes inline std::string deSerializeString(std::istream &is) { char buf[2]; is.read(buf, 2); if(is.gcount() != 2) throw SerializationError("deSerializeString: size not read"); u16 s_size = readU16((u8*)buf); if(s_size == 0) return ""; Buffer<char> buf2(s_size); is.read(&buf2[0], s_size); std::string s; s.reserve(s_size); s.append(&buf2[0], s_size); return s; } // Reads a wide string with the length as the first two bytes inline std::wstring deSerializeWideString(std::istream &is) { char buf[2]; is.read(buf, 2); if(is.gcount() != 2) throw SerializationError("deSerializeString: size not read"); u16 s_size = readU16((u8*)buf); if(s_size == 0) return L""; std::wstring s; s.reserve(s_size); for(u32 i=0; i<s_size; i++) { is.read(&buf[0], 2); wchar_t c16 = readU16((u8*)buf); s.append(&c16, 1); } return s; } // Creates a string with the length as the first four bytes inline std::string serializeLongString(const std::string &plain) { char buf[4]; writeU32((u8*)&buf[0], plain.size()); std::string s; s.append(buf, 4); s.append(plain); return s; } // Reads a string with the length as the first four bytes inline std::string deSerializeLongString(std::istream &is) { char buf[4]; is.read(buf, 4); if(is.gcount() != 4) throw SerializationError("deSerializeLongString: size not read"); u32 s_size = readU32((u8*)buf); if(s_size == 0) return ""; Buffer<char> buf2(s_size); is.read(&buf2[0], s_size); std::string s; s.reserve(s_size); s.append(&buf2[0], s_size); return s; } // Creates a string encoded in JSON format (almost equivalent to a C string literal) std::string serializeJsonString(const std::string &plain); // Reads a string encoded in JSON format std::string deSerializeJsonString(std::istream &is); #endif