diff --git a/include/Nazara/Core/VirtualDirectory.inl b/include/Nazara/Core/VirtualDirectory.inl index 8a8f29026..c0caf7214 100644 --- a/include/Nazara/Core/VirtualDirectory.inl +++ b/include/Nazara/Core/VirtualDirectory.inl @@ -215,7 +215,8 @@ namespace Nz } else { - constexpr std::size_t blockSize = 4 * 1024; + // File size isn't know, read it block by block until the end of stream + constexpr std::size_t blockSize = 4u * 1024; while (!stream.EndOfStream()) { diff --git a/include/Nazara/Graphics/Tilemap.hpp b/include/Nazara/Graphics/Tilemap.hpp index e442f5a56..101b1f059 100644 --- a/include/Nazara/Graphics/Tilemap.hpp +++ b/include/Nazara/Graphics/Tilemap.hpp @@ -82,11 +82,11 @@ namespace Nz }; mutable std::vector m_vertices; - std::vector m_tiles; std::vector m_layers; - Vector2ui m_mapSize; + std::vector m_tiles; Vector2f m_origin; Vector2f m_tileSize; + Vector2ui m_mapSize; bool m_isometricModeEnabled; mutable bool m_shouldRebuildVertices; }; diff --git a/src/Nazara/Graphics/FrameGraph.cpp b/src/Nazara/Graphics/FrameGraph.cpp index f56ddc50f..440ca21e6 100644 --- a/src/Nazara/Graphics/FrameGraph.cpp +++ b/src/Nazara/Graphics/FrameGraph.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -1099,7 +1100,7 @@ namespace Nz void FrameGraph::RemoveDuplicatePasses() { // A way to remove duplicates from a std::vector without sorting it - std::vector seen(m_framePasses.size()); + Bitset<> seen(m_framePasses.size()); auto itRead = m_pending.passList.begin(); auto itWrite = m_pending.passList.begin(); diff --git a/src/Nazara/Graphics/Light.cpp b/src/Nazara/Graphics/Light.cpp index fab36c7d2..2be85eb47 100644 --- a/src/Nazara/Graphics/Light.cpp +++ b/src/Nazara/Graphics/Light.cpp @@ -11,8 +11,8 @@ namespace Nz Light::Light(UInt8 lightType) : m_boundingVolume(BoundingVolumef::Null()), m_shadowMapFormat(Graphics::Instance()->GetPreferredDepthFormat()), - m_shadowMapSize(512), m_lightType(lightType), + m_shadowMapSize(512), m_isShadowCaster(false) { } diff --git a/src/Nazara/Graphics/PropertyHandler/OptionValuePropertyHandler.cpp b/src/Nazara/Graphics/PropertyHandler/OptionValuePropertyHandler.cpp index 71c693bff..1e560c024 100644 --- a/src/Nazara/Graphics/PropertyHandler/OptionValuePropertyHandler.cpp +++ b/src/Nazara/Graphics/PropertyHandler/OptionValuePropertyHandler.cpp @@ -50,8 +50,6 @@ namespace Nz { constexpr MaterialPropertyType PropertyType = TypeToMaterialPropertyType_v; - using BufferType = typename MaterialPropertyTypeInfo::BufferType; - materialInstance.UpdateOptionValue(m_optionHash, MaterialPropertyTypeInfo::EncodeToOption(arg)); } else diff --git a/src/Nazara/Graphics/Tilemap.cpp b/src/Nazara/Graphics/Tilemap.cpp index 547cff5a6..c280927e1 100644 --- a/src/Nazara/Graphics/Tilemap.cpp +++ b/src/Nazara/Graphics/Tilemap.cpp @@ -23,11 +23,11 @@ namespace Nz * \remark The default material is used for every material requested */ Tilemap::Tilemap(const Vector2ui& mapSize, const Vector2f& tileSize, std::size_t materialCount) : - m_tiles(mapSize.x* mapSize.y), m_layers(materialCount), - m_mapSize(mapSize), - m_tileSize(tileSize), + m_tiles(mapSize.x* mapSize.y), m_origin(0.f, 0.f), + m_tileSize(tileSize), + m_mapSize(mapSize), m_isometricModeEnabled(false), m_shouldRebuildVertices(false) { diff --git a/src/Nazara/Platform/SDL2/WindowImpl.cpp b/src/Nazara/Platform/SDL2/WindowImpl.cpp index a2e0cf2f4..7651c4daa 100644 --- a/src/Nazara/Platform/SDL2/WindowImpl.cpp +++ b/src/Nazara/Platform/SDL2/WindowImpl.cpp @@ -117,6 +117,12 @@ namespace Nz return false; } + case WindowBackend::Web: + { + NazaraError("unsupported creation from a Web handle"); + return false; + } + case WindowBackend::Cocoa: systemHandle = handle.cocoa.window; break; case WindowBackend::X11: systemHandle = reinterpret_cast(std::uintptr_t(handle.x11.window)); break; case WindowBackend::Windows: systemHandle = handle.windows.window; break; diff --git a/src/Nazara/Platform/Window.cpp b/src/Nazara/Platform/Window.cpp index 67cf0ac20..5d08d1b40 100644 --- a/src/Nazara/Platform/Window.cpp +++ b/src/Nazara/Platform/Window.cpp @@ -20,11 +20,11 @@ namespace Nz } Window::Window(Window&& window) noexcept : - m_cursorController(std::move(window.m_cursorController)), m_cursor(std::move(window.m_cursor)), - m_eventHandler(std::move(window.m_eventHandler)), m_icon(std::move(window.m_icon)), m_impl(std::move(window.m_impl)), + m_cursorController(std::move(window.m_cursorController)), + m_eventHandler(std::move(window.m_eventHandler)), m_closed(window.m_closed), m_closeOnQuit(window.m_closeOnQuit), m_ownsWindow(window.m_ownsWindow), diff --git a/src/ShaderNode/DataModels/BufferField.cpp b/src/ShaderNode/DataModels/BufferField.cpp index da2ee4019..5bde16d76 100644 --- a/src/ShaderNode/DataModels/BufferField.cpp +++ b/src/ShaderNode/DataModels/BufferField.cpp @@ -96,6 +96,9 @@ unsigned int BufferField::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 0; case QtNodes::PortType::Out: return 1; } diff --git a/src/ShaderNode/DataModels/Cast.inl b/src/ShaderNode/DataModels/Cast.inl index 49fd1aba1..5877ccfe1 100644 --- a/src/ShaderNode/DataModels/Cast.inl +++ b/src/ShaderNode/DataModels/Cast.inl @@ -120,6 +120,9 @@ unsigned int CastVec::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 1; case QtNodes::PortType::Out: return 1; } diff --git a/src/ShaderNode/DataModels/ConditionalExpression.cpp b/src/ShaderNode/DataModels/ConditionalExpression.cpp index ffa8006e5..998ff8941 100644 --- a/src/ShaderNode/DataModels/ConditionalExpression.cpp +++ b/src/ShaderNode/DataModels/ConditionalExpression.cpp @@ -63,6 +63,9 @@ unsigned int ConditionalExpression::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 2; case QtNodes::PortType::Out: return 1; } diff --git a/src/ShaderNode/DataModels/Discard.cpp b/src/ShaderNode/DataModels/Discard.cpp index 724a64e04..4910a9b96 100644 --- a/src/ShaderNode/DataModels/Discard.cpp +++ b/src/ShaderNode/DataModels/Discard.cpp @@ -44,6 +44,9 @@ unsigned int Discard::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 1; case QtNodes::PortType::Out: return 0; } diff --git a/src/ShaderNode/DataModels/InputValue.cpp b/src/ShaderNode/DataModels/InputValue.cpp index 10f05daa1..7f0fa75ba 100644 --- a/src/ShaderNode/DataModels/InputValue.cpp +++ b/src/ShaderNode/DataModels/InputValue.cpp @@ -34,6 +34,9 @@ unsigned int InputValue::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 0; case QtNodes::PortType::Out: return 1; } diff --git a/src/ShaderNode/DataModels/Mat4VecMul.cpp b/src/ShaderNode/DataModels/Mat4VecMul.cpp index b60a6455c..f35268e3d 100644 --- a/src/ShaderNode/DataModels/Mat4VecMul.cpp +++ b/src/ShaderNode/DataModels/Mat4VecMul.cpp @@ -32,6 +32,9 @@ QtNodes::NodeDataType Mat4VecMul::dataType(QtNodes::PortType portType, QtNodes:: { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: { assert(portIndex == 0 || portIndex == 1); @@ -57,6 +60,9 @@ unsigned int Mat4VecMul::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 2; case QtNodes::PortType::Out: return 1; } diff --git a/src/ShaderNode/DataModels/PositionOutputValue.cpp b/src/ShaderNode/DataModels/PositionOutputValue.cpp index d904f8d8d..b7f88ee50 100644 --- a/src/ShaderNode/DataModels/PositionOutputValue.cpp +++ b/src/ShaderNode/DataModels/PositionOutputValue.cpp @@ -37,6 +37,9 @@ unsigned int PositionOutputValue::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 1; case QtNodes::PortType::Out: return 0; } diff --git a/src/ShaderNode/DataModels/SampleTexture.cpp b/src/ShaderNode/DataModels/SampleTexture.cpp index 516e68783..a183773a6 100644 --- a/src/ShaderNode/DataModels/SampleTexture.cpp +++ b/src/ShaderNode/DataModels/SampleTexture.cpp @@ -14,6 +14,9 @@ unsigned int SampleTexture::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 2; case QtNodes::PortType::Out: return 1; } diff --git a/src/ShaderNode/DataModels/TextureValue.cpp b/src/ShaderNode/DataModels/TextureValue.cpp index 5e55e3515..bffa786ef 100644 --- a/src/ShaderNode/DataModels/TextureValue.cpp +++ b/src/ShaderNode/DataModels/TextureValue.cpp @@ -36,6 +36,9 @@ unsigned int TextureValue::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 0; case QtNodes::PortType::Out: return 1; } diff --git a/src/ShaderNode/DataModels/VecDot.cpp b/src/ShaderNode/DataModels/VecDot.cpp index bb5206b9a..83b336b6b 100644 --- a/src/ShaderNode/DataModels/VecDot.cpp +++ b/src/ShaderNode/DataModels/VecDot.cpp @@ -37,6 +37,9 @@ QtNodes::NodeDataType VecDot::dataType(QtNodes::PortType portType, QtNodes::Port { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: { assert(portIndex == 0 || portIndex == 1); @@ -58,6 +61,9 @@ unsigned int VecDot::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 2; case QtNodes::PortType::Out: return 1; } diff --git a/src/ShaderNode/DataModels/VecFloatMul.cpp b/src/ShaderNode/DataModels/VecFloatMul.cpp index b2bde56e9..054f0d479 100644 --- a/src/ShaderNode/DataModels/VecFloatMul.cpp +++ b/src/ShaderNode/DataModels/VecFloatMul.cpp @@ -32,6 +32,9 @@ QtNodes::NodeDataType VecFloatMul::dataType(QtNodes::PortType portType, QtNodes: { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: { assert(portIndex == 0 || portIndex == 1); @@ -57,6 +60,9 @@ unsigned int VecFloatMul::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 2; case QtNodes::PortType::Out: return 1; } diff --git a/src/ShaderNode/DataModels/VecValue.inl b/src/ShaderNode/DataModels/VecValue.inl index 835e961a1..d90f5538a 100644 --- a/src/ShaderNode/DataModels/VecValue.inl +++ b/src/ShaderNode/DataModels/VecValue.inl @@ -46,6 +46,9 @@ unsigned int VecValue::nPorts(QtNodes::PortType portType) const { switch (portType) { + case QtNodes::PortType::None: + break; + case QtNodes::PortType::In: return 0; case QtNodes::PortType::Out: return 1; } diff --git a/xmake.lua b/xmake.lua index e24605c3f..51bc90761 100644 --- a/xmake.lua +++ b/xmake.lua @@ -246,7 +246,7 @@ if has_config("audio") then end if has_config("bulletphysics") then - add_requires("bullet3") + add_requires("bullet3", { configs = { debug = is_mode("debug") }}) end if has_config("chipmunkphysics") then @@ -254,7 +254,7 @@ if has_config("chipmunkphysics") then end if has_config("joltphysics") then - add_requires("joltphysics 3", { configs = { debug = is_mode("debug") }}) + add_requires("joltphysics >=3", { configs = { debug = is_mode("debug") }}) add_requires("ordered_map") end @@ -332,8 +332,17 @@ set_allowedplats("windows", "mingw", "linux", "macosx", "wasm") set_allowedmodes("debug", "releasedbg", "release", "asan", "tsan", "coverage") set_defaultmode("debug") +add_includedirs("include") +add_sysincludedirs("thirdparty/include") + +set_languages("c89", "cxx17") +set_rundir("./bin/$(plat)_$(arch)_$(mode)") +set_targetdir("./bin/$(plat)_$(arch)_$(mode)") +set_warnings("allextra") + if is_mode("debug") then add_rules("debug.suffix") + add_defines("NAZARA_DEBUG") elseif is_mode("asan") then set_optimize("none") -- by default xmake will optimize asan builds elseif is_mode("tsan") then @@ -347,35 +356,48 @@ elseif is_mode("releasedbg", "release") then add_vectorexts("sse", "sse2", "sse3", "ssse3") end -add_includedirs("include") -add_sysincludedirs("thirdparty/include") - -set_languages("c89", "cxx17") -set_rundir("./bin/$(plat)_$(arch)_$(mode)") -set_targetdir("./bin/$(plat)_$(arch)_$(mode)") -set_warnings("allextra") - if not is_mode("release") then set_symbols("debug", "hidden") end -if is_mode("debug") then - add_defines("NAZARA_DEBUG") +-- Compiler-specific options + +if is_plat("windows") then + -- MSVC + add_cxxflags("/bigobj", "/permissive-", "/Zc:__cplusplus", "/Zc:externConstexpr", "/Zc:inline", "/Zc:lambda", "/Zc:preprocessor", "/Zc:referenceBinding", "/Zc:strictStrings", "/Zc:throwingNew", {tools = "cl"}) + add_defines("_CRT_SECURE_NO_WARNINGS", "_ENABLE_EXTENDED_ALIGNED_STORAGE") + + -- Enable the following additional warnings: + add_cxflags("/we4062", {tools = "cl"}) -- Switch case not handled (warning as error) + add_cxflags("/we4426", {tools = "cl"}) -- Optimization flags changed after including header, may be due to #pragma optimize() + add_cxflags("/we5038", {tools = "cl"}) -- Data member will be initialized after data member + + -- Disable the following warnings: + add_cxflags("/wd4251", {tools = "cl"}) -- class needs to have dll-interface to be used by clients of class blah blah blah + add_cxflags("/wd4275", {tools = "cl"}) -- DLL-interface class 'class_1' used as base for DLL-interface blah +else + -- GCC-compatible (GCC, Clang, ...) + add_cxflags("-pedantic", "-pedantic-errors") + add_cxflags("-Wtrampolines") + add_cxflags("-Werror=reorder") + add_cxflags("-Werror=switch") end +-- Platform-specific options + if is_plat("windows") then if has_config("override_runtime") then set_runtimes(is_mode("debug") and "MDd" or "MD") end - - add_defines("_CRT_SECURE_NO_WARNINGS", "_ENABLE_EXTENDED_ALIGNED_STORAGE") - add_cxxflags("/bigobj", "/permissive-", "/Zc:__cplusplus", "/Zc:externConstexpr", "/Zc:inline", "/Zc:lambda", "/Zc:preprocessor", "/Zc:referenceBinding", "/Zc:strictStrings", "/Zc:throwingNew") - add_cxflags("/w44062") -- Enable warning: switch case not handled - add_cxflags("/wd4251") -- Disable warning: class needs to have dll-interface to be used by clients of class blah blah blah - add_cxflags("/wd4275") -- Disable warning: DLL-interface class 'class_1' used as base for DLL-interface blah elseif is_plat("mingw") then - add_cxflags("-Og", "-Wa,-mbig-obj") + -- Use some optimizations even in debug for MinGW to reduce object size + if is_mode("debug") then + add_cxflags("-Og") + end + add_cxflags("-Wa,-mbig-obj") add_ldflags("-Wa,-mbig-obj") + + -- Disable -Isystem for external packages as it seems to break Assimp set_policy("package.include_external_headers", false) elseif is_plat("wasm") then add_cxflags("-sNO_DISABLE_EXCEPTION_CATCHING")