diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 2942ee9a..3af2ee8b 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -17,12 +17,7 @@ jobs: - name: Install dependencies from brew run: | - brew install glfw3 glew libpng openal-soft luajit libvorbis skypjack/entt/entt googletest - - - name: Install specific version of GLM - run: | - curl -O https://raw.githubusercontent.com/Homebrew/homebrew-core/5c7655a866646aa4b857c002b8ae5465b9d26f65/Formula/g/glm.rb - brew install --formula glm.rb + brew install glfw3 glew libpng openal-soft luajit libvorbis skypjack/entt/entt googletest glm - name: Configure run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DVOXELENGINE_BUILD_TESTS=ON -DVOXELENGINE_BUILD_APPDIR=1 diff --git a/.github/workflows/windows-clang.yml b/.github/workflows/windows-clang.yml index 7722ce4e..1356149f 100644 --- a/.github/workflows/windows-clang.yml +++ b/.github/workflows/windows-clang.yml @@ -28,9 +28,7 @@ jobs: msystem: clang64 install: >- mingw-w64-clang-x86_64-toolchain - mingw-w64-clang-x86_64-cmake - mingw-w64-clang-x86_64-make - mingw-w64-clang-x86_64-luajit + mingw-w64-clang-x86_64-cmake git - name: Set up vcpkg shell: msys2 {0} @@ -41,11 +39,12 @@ jobs: ./vcpkg integrate install cd .. - name: Configure project with CMake and vcpkg + env: + VCPKG_DEFAULT_TRIPLET: x64-mingw-static + VCPKG_DEFAULT_HOST_TRIPLET: x64-mingw-static shell: msys2 {0} run: | - export VCPKG_DEFAULT_TRIPLET=x64-mingw-static - export VCPKG_DEFAULT_HOST_TRIPLET=x64-mingw-static - export VCPKG_ROOT=./vcpkg + export VCPKG_ROOT=$(pwd)/vcpkg mkdir build cd build cmake -G "MinGW Makefiles" -DVCPKG_TARGET_TRIPLET=x64-mingw-static -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=./vcpkg/scripts/buildsystems/vcpkg.cmake .. diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f773002..f64a574e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,84 +1,47 @@ cmake_minimum_required(VERSION 3.26) project(VoxelEngine) -option(VOXELENGINE_BUILD_APPDIR "" OFF) -option(VOXELENGINE_BUILD_TESTS "" OFF) - set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +execute_process(COMMAND ${CMAKE_COMMAND} --version) + +option(VOXELENGINE_BUILD_APPDIR "Pack linux build" OFF) +option(VOXELENGINE_BUILD_TESTS "Build tests" OFF) + +# Need for static compilation on Windows with MSVC clang TODO: Make single build +# on Windows to avoid dependence on combinations of platforms and compilers and +# make it independent if(CMAKE_SYSTEM_NAME STREQUAL "Windows") # We use two types linking: for clang build is static (vcpkg triplet # x64-windows-static) and for msvc build is dynamic linking (vcpkg triplet # x64-windows) By default CMAKE_MSVC_RUNTIME_LIBRARY set by # MultiThreaded$<$:Debug>DLL if(VCPKG_TARGET_TRIPLET MATCHES "static") + # Need for MSVC clang set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") endif() endif() add_subdirectory(src) -add_executable(${PROJECT_NAME} src/main.cpp) -target_include_directories(${PROJECT_NAME} - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) +add_executable(VoxelEngine src/main.cpp) if(VOXELENGINE_BUILD_APPDIR) include(${CMAKE_CURRENT_SOURCE_DIR}/dev/cmake/BuildAppdir.cmake) endif() -if(MSVC) - if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE - Release - CACHE STRING "Build type" FORCE) - endif() - if((CMAKE_BUILD_TYPE EQUAL "Release") OR (CMAKE_BUILD_TYPE EQUAL - "RelWithDebInfo")) - target_compile_options(${PROJECT_NAME} PRIVATE /W4 /MT /O2) - else() - target_compile_options(${PROJECT_NAME} PRIVATE /W4) - endif() - set(CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} /source-charset:UTF-8 /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR" - ) -else() - target_compile_options( - ${PROJECT_NAME} - PRIVATE -Wall - -Wextra - # additional warnings - -Wformat-nonliteral - -Wcast-align - -Wpointer-arith - -Wundef - -Wwrite-strings - -Wno-unused-parameter) - if(CMAKE_BUILD_TYPE MATCHES "Debug") - target_compile_options(${PROJECT_NAME} PRIVATE -Og) - endif() - if(WIN32) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") - endif() -endif() +target_link_libraries(VoxelEngine PRIVATE VoxelEngineSrc + $<$:winmm>) -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-pie") -endif() - -if(WIN32) - target_link_libraries(${PROJECT_NAME} VoxelEngineSrc winmm) -endif() - -target_link_libraries(${PROJECT_NAME} VoxelEngineSrc ${CMAKE_DL_LIBS}) +target_link_options(VoxelEngine PRIVATE $<$:-no-pie>) # Deploy res to build dir add_custom_command( - TARGET ${PROJECT_NAME} + TARGET VoxelEngine POST_BUILD - COMMAND - ${CMAKE_COMMAND} -E copy_directory_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/res $/res) + COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different + ${CMAKE_CURRENT_SOURCE_DIR}/res $/res) if(VOXELENGINE_BUILD_TESTS) enable_testing() diff --git a/CMakePresets.json b/CMakePresets.json index d4c6aa47..bc81fc91 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -14,6 +14,34 @@ "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", "VOXELENGINE_BUILD_TESTS": "ON" } + }, + { + "name": "default-ninja-gnu-linux", + "condition": { + "type": "equals", + "rhs": "${hostSystemName}", + "lhs": "Linux" + }, + "generator": "Ninja Multi-Config", + "binaryDir": "${sourceDir}/build", + "cacheVariables": { + "VOXELENGINE_BUILD_TESTS": "ON", + "VOXELENGINE_BUILD_APPDIR": "ON" + } + }, + { + "name": "default-ninja-clang-macos", + "condition": { + "type": "equals", + "rhs": "${hostSystemName}", + "lhs": "Darwin" + }, + "generator": "Ninja", + "binaryDir": "${sourceDir}/build", + "cacheVariables": { + "VOXELENGINE_BUILD_TESTS": "ON", + "VOXELENGINE_BUILD_APPDIR": "ON" + } } ], "buildPresets": [ @@ -21,6 +49,16 @@ "name": "default-vs-msvc-windows", "configurePreset": "default-vs-msvc-windows", "configuration": "Debug" + }, + { + "name": "default-ninja-gnu-linux", + "configurePreset": "default-ninja-gnu-linux", + "configuration": "Debug" + }, + { + "name": "default-ninja-clang-macos", + "configurePreset": "default-ninja-clang-macos", + "configuration": "Debug" } ], "testPresets": [ @@ -30,6 +68,20 @@ "output": { "outputOnFailure": true } + }, + { + "name": "default-ninja-gnu-linux", + "configurePreset": "default-ninja-gnu-linux", + "output": { + "outputOnFailure": true + } + }, + { + "name": "default-ninja-clang-macos", + "configurePreset": "default-ninja-clang-macos", + "output": { + "outputOnFailure": true + } } ] } \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 09d3d0c8..f571b370 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,87 +1,123 @@ project(VoxelEngineSrc) -set(CMAKE_CXX_STANDARD 17) +file(GLOB_RECURSE headers ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp) +file(GLOB_RECURSE sources ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) +list(REMOVE_ITEM sources ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) -file(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp) -file(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) -list(REMOVE_ITEM SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) - -add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) +add_library(VoxelEngineSrc STATIC ${sources} ${headers}) find_package(OpenGL REQUIRED) find_package(GLEW REQUIRED) +find_package(glm REQUIRED) if(CMAKE_SYSTEM_NAME STREQUAL "Windows") # specific for vcpkg find_package(OpenAL CONFIG REQUIRED) - set(OPENAL_LIBRARY OpenAL::OpenAL) else() find_package(OpenAL REQUIRED) endif() find_package(ZLIB REQUIRED) find_package(PNG REQUIRED) find_package(CURL REQUIRED) +find_package(glfw3 REQUIRED) if(NOT APPLE) find_package(EnTT REQUIRED) endif() -set(LIBS "") - if(CMAKE_SYSTEM_NAME STREQUAL "Windows") - # Use directly linking to lib instead PkgConfig (because pkg-config dont - # install on windows as default) TODO: Do it with findLua. - if(MSVC) - set(LUA_INCLUDE_DIR - "$ENV{VCPKG_ROOT}/packages/luajit_${VCPKG_TARGET_TRIPLET}/include/luajit" - ) - find_package(Lua REQUIRED) - else() - # Used for mingw-clang cross compiling from msys2 - set(LIBS ${LIBS} luajit-5.1) - endif() - find_package(glfw3 REQUIRED) - find_package(glm REQUIRED) find_package(vorbis REQUIRED) - set(VORBISLIB Vorbis::vorbis Vorbis::vorbisfile) + if(VCPKG_TARGET_TRIPLET MATCHES "static") + add_library(luajit STATIC IMPORTED) + set_target_properties( + luajit + PROPERTIES + IMPORTED_LOCATION + "$ENV{VCPKG_ROOT}/packages/luajit_${VCPKG_TARGET_TRIPLET}/lib/libluajit-5.1.a" + INTERFACE_INCLUDE_DIRECTORIES + "$ENV{VCPKG_ROOT}/packages/luajit_${VCPKG_TARGET_TRIPLET}/include/" + ) + else() + add_library(luajit SHARED IMPORTED) + set_target_properties( + luajit + PROPERTIES + IMPORTED_LOCATION + "$ENV{VCPKG_ROOT}/packages/luajit_${VCPKG_TARGET_TRIPLET}/bin/lua51.dll" + IMPORTED_IMPLIB + "$ENV{VCPKG_ROOT}/packages/luajit_${VCPKG_TARGET_TRIPLET}/lib/lua51.lib" + INTERFACE_INCLUDE_DIRECTORIES + "$ENV{VCPKG_ROOT}/packages/luajit_${VCPKG_TARGET_TRIPLET}/include/luajit" + ) + endif() -elseif(APPLE) - find_package(PkgConfig) - pkg_check_modules(LUAJIT REQUIRED luajit) - pkg_check_modules(VORBIS REQUIRED vorbis vorbisfile) - set(LUA_INCLUDE_DIR "/opt/homebrew/include/luajit-2.1") - set(LUA_LIBRARIES "/opt/homebrew/lib/libluajit-5.1.a") - message(STATUS "LUA Libraries: ${LUA_LIBRARIES}") - message(STATUS "LUA Include Dir: ${LUA_INCLUDE_DIR}") - - set(VORBISLIB ${VORBIS_LDFLAGS}) - message(STATUS "Vorbis Lib: ${VORBIS_LDFLAGS}") + add_library(luajit::luajit ALIAS luajit) else() find_package(PkgConfig) - pkg_check_modules(LUAJIT REQUIRED luajit) - pkg_check_modules(VORBIS REQUIRED vorbis vorbisfile) - set(LUA_LIBRARIES ${LUAJIT_LIBRARIES}) - set(LUA_INCLUDE_DIR ${LUAJIT_INCLUDE_DIRS}) - set(VORBISLIB ${VORBIS_LDFLAGS}) + + pkg_check_modules(luajit REQUIRED IMPORTED_TARGET luajit) + pkg_check_modules(vorbis REQUIRED IMPORTED_TARGET vorbis) + pkg_check_modules(vorbisfile REQUIRED IMPORTED_TARGET vorbisfile) + add_library(Vorbis::vorbis ALIAS PkgConfig::vorbis) + add_library(Vorbis::vorbisfile ALIAS PkgConfig::vorbisfile) + add_library(luajit::luajit ALIAS PkgConfig::luajit) endif() -if(UNIX) - find_package(glfw3 3.3 REQUIRED) - find_package(Threads REQUIRED) - set(LIBS ${LIBS} Threads::Threads) -endif() +target_include_directories(VoxelEngineSrc PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) -include_directories(${LUA_INCLUDE_DIR}) -include_directories(${CURL_INCLUDE_DIR}) -target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries( - ${PROJECT_NAME} - ${LIBS} - glfw - OpenGL::GL - ${OPENAL_LIBRARY} - GLEW::GLEW - ZLIB::ZLIB - PNG::PNG - CURL::libcurl - ${VORBISLIB} - ${LUA_LIBRARIES} - ${CMAKE_DL_LIBS}) + VoxelEngineSrc + PRIVATE glfw + OpenGL::GL + GLEW::GLEW + ZLIB::ZLIB + PNG::PNG + CURL::libcurl + OpenAL::OpenAL + Vorbis::vorbis + Vorbis::vorbisfile + luajit::luajit + PUBLIC glm::glm # Need public for src/delegates.hpp, which including to + # main.cpp +) + +target_compile_options( + VoxelEngineSrc + PUBLIC $<$: + /utf-8 + /MP + /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR + /W4 + /wd4244 # conversion from 'a' to 'T', possible loss of data + /wd4267 # conversion from 'size_t' to 'int', possible loss of data + /wd4245 # conversion from 'int' to 'const size_t', signed/unsigned + # mismatch + /wd4100 # unreferenced formal parameter + /wd4458 # declaration of 'var' hides class member + /wd4101 # 'var': unreferenced local variable + /wd4388 # 'token' : signed/unsigned mismatch + /wd4018 # '>': signed/unsigned mismatch + > + $<$>: + -Wall + -Wextra + # additional warnings + -Wformat-nonliteral + -Wcast-align + -Wpointer-arith + -Wundef + -Wwrite-strings + -Wno-unused-parameter + -Wno-sign-compare + -Wno-unknown-pragmas + $<$:-Og> + >) + +target_link_options( + VoxelEngineSrc + PUBLIC + $<$: + -no-pie + > + # Need for static compilation on Windows with clang TODO: Make single build + # on Windows to avoid dependence on combinations of platforms and compilers + # and make it independent + $<$:$<$:-static>>) diff --git a/src/coders/BasicParser.inl b/src/coders/BasicParser.inl index cee3c89d..2d15d8e9 100644 --- a/src/coders/BasicParser.inl +++ b/src/coders/BasicParser.inl @@ -6,7 +6,7 @@ #include "util/stringutil.hpp" namespace { - int is_box(int c) { + inline int is_box(int c) { switch (c) { case 'B': case 'b': @@ -21,7 +21,7 @@ namespace { return 10; } - double power(double base, int64_t power) { + inline double power(double base, int64_t power) { double result = 1.0; for (int64_t i = 0; i < power; i++) { result *= base; diff --git a/src/coders/toml.cpp b/src/coders/toml.cpp index 8df231a2..8fe05391 100644 --- a/src/coders/toml.cpp +++ b/src/coders/toml.cpp @@ -30,7 +30,6 @@ class TomlReader : BasicParser { // todo: extract common part std::string parseMultilineString() { pos += 2; - char next = peek(); std::stringstream ss; while (hasNext()) { diff --git a/src/coders/vec3.cpp b/src/coders/vec3.cpp index 7d0c8c17..974b9a63 100644 --- a/src/coders/vec3.cpp +++ b/src/coders/vec3.cpp @@ -68,7 +68,7 @@ static model::Mesh build_mesh( const glm::vec2* uvs = nullptr; const glm::vec3* normals = nullptr; - int coordsIndex, uvsIndex, normalsIndex; + int coordsIndex = 0, uvsIndex = 0, normalsIndex = 0; for (int i = 0; i < attrs.size(); i++) { const auto& attr = attrs[i]; @@ -204,7 +204,7 @@ File vec3::load( // Header reader.checkMagic("\0\0VEC3\0\0", 8); int version = reader.getInt16(); - int reserved = reader.getInt16(); + [[maybe_unused]] int reserved = reader.getInt16(); if (version > VERSION) { throw std::runtime_error("unsupported VEC3 version"); } diff --git a/src/content/ContentReport.cpp b/src/content/ContentReport.cpp index 0d8a20e2..a8ecad40 100644 --- a/src/content/ContentReport.cpp +++ b/src/content/ContentReport.cpp @@ -41,13 +41,13 @@ static void process_blocks_data( continue; } if (def->dataStruct == nullptr) { - ContentIssue issue {ContentIssueType::BLOCK_DATA_LAYOUTS_UPDATE}; + ContentIssue issue {ContentIssueType::BLOCK_DATA_LAYOUTS_UPDATE, {}}; report.issues.push_back(issue); report.dataLoss.push_back(name + ": discard data"); continue; } if (layout != *def->dataStruct) { - ContentIssue issue {ContentIssueType::BLOCK_DATA_LAYOUTS_UPDATE}; + ContentIssue issue {ContentIssueType::BLOCK_DATA_LAYOUTS_UPDATE, {}}; report.issues.push_back(issue); report.dataLayoutsUpdated = true; } @@ -111,10 +111,10 @@ static void build_issues( ) { auto type = report.getContentType(); if (report.hasContentReorder()) { - issues.push_back(ContentIssue {ContentIssueType::REORDER, type}); + issues.push_back(ContentIssue {ContentIssueType::REORDER, {type}}); } if (report.hasMissingContent()) { - issues.push_back(ContentIssue {ContentIssueType::MISSING, type}); + issues.push_back(ContentIssue {ContentIssueType::MISSING, {type}}); } } @@ -126,7 +126,7 @@ void ContentReport::buildIssues() { for (int layer = REGION_LAYER_VOXELS; layer < REGION_LAYERS_COUNT; layer++) { - ContentIssue issue {ContentIssueType::REGION_FORMAT_UPDATE}; + ContentIssue issue {ContentIssueType::REGION_FORMAT_UPDATE, {}}; issue.regionLayer = static_cast(layer); issues.push_back(issue); } diff --git a/src/content/loading/GeneratorLoader.cpp b/src/content/loading/GeneratorLoader.cpp index 99ffde50..a845bc21 100644 --- a/src/content/loading/GeneratorLoader.cpp +++ b/src/content/loading/GeneratorLoader.cpp @@ -7,6 +7,7 @@ #include "io/io.hpp" #include "io/engine_paths.hpp" #include "logic/scripting/scripting.hpp" +#include "util/stringutil.hpp" #include "world/generator/GeneratorDef.hpp" #include "world/generator/VoxelFragment.hpp" #include "debug/Logger.hpp" diff --git a/src/data/StructLayout.hpp b/src/data/StructLayout.hpp index 02a5a435..47d59b3b 100644 --- a/src/data/StructLayout.hpp +++ b/src/data/StructLayout.hpp @@ -245,11 +245,11 @@ namespace data { return totalSize; } - [[nodiscard]] const auto begin() const { + [[nodiscard]] auto begin() const { return fields.begin(); } - [[nodiscard]] const auto end() const { + [[nodiscard]] auto end() const { return fields.end(); } diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index 48a699f1..ecf030dd 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -310,7 +310,6 @@ void Hud::updateWorldGenDebug() { } void Hud::update(bool visible) { - const auto& level = frontend.getLevel(); const auto& chunks = *player.chunks; const auto& menu = gui.getMenu(); diff --git a/src/frontend/menu.cpp b/src/frontend/menu.cpp index da2e6ba2..3b8e70fb 100644 --- a/src/frontend/menu.cpp +++ b/src/frontend/menu.cpp @@ -38,7 +38,6 @@ bool menus::call(Engine& engine, runnable func) { if (engine.isHeadless()) { throw std::runtime_error("menus::call(...) in headless mode"); } - auto gui = engine.getGUI(); try { func(); return true; diff --git a/src/frontend/screens/LevelScreen.cpp b/src/frontend/screens/LevelScreen.cpp index 9a471bff..e5c34f19 100644 --- a/src/frontend/screens/LevelScreen.cpp +++ b/src/frontend/screens/LevelScreen.cpp @@ -154,7 +154,6 @@ void LevelScreen::saveDecorations() { void LevelScreen::saveWorldPreview() { try { logger.info() << "saving world preview"; - const auto& paths = engine.getPaths(); auto player = playerController->getPlayer(); auto& settings = engine.getSettings(); int previewSize = settings.ui.worldPreviewSize.get(); diff --git a/src/graphics/core/Font.cpp b/src/graphics/core/Font.cpp index 74a78932..68cba17c 100644 --- a/src/graphics/core/Font.cpp +++ b/src/graphics/core/Font.cpp @@ -153,7 +153,6 @@ static inline void draw_text( } batch.texture(font.getPage(0)); for (size_t i = 0; i < text.length(); i++) { - uint c = text[i]; size_t styleIndex = styles->map.at( std::min(styles->map.size() - 1, i + styleMapOffset) ); diff --git a/src/graphics/render/BlocksRenderer.cpp b/src/graphics/render/BlocksRenderer.cpp index 5cddcb57..22bab4d8 100644 --- a/src/graphics/render/BlocksRenderer.cpp +++ b/src/graphics/render/BlocksRenderer.cpp @@ -329,8 +329,6 @@ void BlocksRenderer::blockCube( bool lights, bool ao ) { - ubyte group = block.drawGroup; - glm::ivec3 X(1, 0, 0); glm::ivec3 Y(0, 1, 0); glm::ivec3 Z(0, 0, 1); @@ -557,7 +555,7 @@ SortingMeshData BlocksRenderer::renderTranslucent( y + 0.5f, z + chunk->z * CHUNK_D + 0.5f ), - util::Buffer(indexSize * CHUNK_VERTEX_SIZE)}; + util::Buffer(indexSize * CHUNK_VERTEX_SIZE), 0}; totalSize += entry.vertexData.size(); @@ -593,7 +591,8 @@ SortingMeshData BlocksRenderer::renderTranslucent( sortingMesh.entries.size() > 1) { SortingMeshEntry newEntry { sortingMesh.entries[0].position, - util::Buffer(totalSize) + util::Buffer(totalSize), + 0 }; size_t offset = 0; for (const auto& entry : sortingMesh.entries) { @@ -643,7 +642,7 @@ void BlocksRenderer::build(const Chunk* chunk, const Chunks* chunks) { vertexOffset = 0; indexOffset = indexSize = 0; - sortingMesh = std::move(renderTranslucent(voxels, beginEnds)); + sortingMesh = renderTranslucent(voxels, beginEnds); overflow = false; vertexOffset = 0; diff --git a/src/graphics/render/ChunksRenderer.cpp b/src/graphics/render/ChunksRenderer.cpp index 6e6b4bd3..535baa59 100644 --- a/src/graphics/render/ChunksRenderer.cpp +++ b/src/graphics/render/ChunksRenderer.cpp @@ -19,7 +19,6 @@ static debug::Logger logger("chunks-render"); size_t ChunksRenderer::visibleChunks = 0; class RendererWorker : public util::Worker, RendererResult> { - const Level& level; const Chunks& chunks; BlocksRenderer renderer; public: @@ -29,8 +28,7 @@ public: const ContentGfxCache& cache, const EngineSettings& settings ) - : level(level), - chunks(chunks), + : chunks(chunks), renderer( settings.graphics.denseRender.get() ? settings.graphics.chunkMaxVerticesDense.get() @@ -45,7 +43,7 @@ public: renderer.build(chunk.get(), &chunks); if (renderer.isCancelled()) { return RendererResult { - glm::ivec2(chunk->x, chunk->z), true, MeshData()}; + glm::ivec2(chunk->x, chunk->z), true, ChunkMeshData {}}; } auto meshData = renderer.createMesh(); return RendererResult { @@ -61,8 +59,7 @@ ChunksRenderer::ChunksRenderer( const ContentGfxCache& cache, const EngineSettings& settings ) - : level(*level), - chunks(chunks), + : chunks(chunks), assets(assets), frustum(frustum), settings(settings), diff --git a/src/graphics/render/ChunksRenderer.hpp b/src/graphics/render/ChunksRenderer.hpp index a25c4241..3e2ca9d9 100644 --- a/src/graphics/render/ChunksRenderer.hpp +++ b/src/graphics/render/ChunksRenderer.hpp @@ -42,7 +42,6 @@ struct RendererResult { }; class ChunksRenderer { - const Level& level; const Chunks& chunks; const Assets& assets; const Frustum& frustum; diff --git a/src/graphics/render/Decorator.cpp b/src/graphics/render/Decorator.cpp index c0c88ebb..2904c39f 100644 --- a/src/graphics/render/Decorator.cpp +++ b/src/graphics/render/Decorator.cpp @@ -40,11 +40,10 @@ Decorator::Decorator( const Assets& assets, Player& player ) - : engine(engine), - level(*controller.getLevel()), - renderer(renderer), + : level(*controller.getLevel()), assets(assets), - player(player) { + player(player), + renderer(renderer) { controller.getBlocksController()->listenBlockInteraction( [this](auto player, const auto& pos, const auto& def, BlockInteraction type) { if (type == BlockInteraction::placing && def.particles) { diff --git a/src/graphics/render/Decorator.hpp b/src/graphics/render/Decorator.hpp index 31b0d506..181fdcb5 100644 --- a/src/graphics/render/Decorator.hpp +++ b/src/graphics/render/Decorator.hpp @@ -18,11 +18,10 @@ class Block; class Engine; class LevelController; class WorldRenderer; -class Weather; +struct Weather; struct WeatherPreset; class Decorator { - Engine& engine; const Level& level; const Assets& assets; Player& player; diff --git a/src/graphics/render/Emitter.cpp b/src/graphics/render/Emitter.cpp index e908ece8..cdc883ae 100644 --- a/src/graphics/render/Emitter.cpp +++ b/src/graphics/render/Emitter.cpp @@ -19,7 +19,7 @@ Emitter::Emitter( ) : level(level), origin(std::move(origin)), - prototype({this, 0, {}, preset.velocity, preset.lifetime, region}), + prototype({this, 0, {}, preset.velocity, preset.lifetime, region, 0, 0}), texture(texture), count(count), preset(std::move(preset)) { diff --git a/src/graphics/render/ModelBatch.cpp b/src/graphics/render/ModelBatch.cpp index 51c2fe9f..558393c6 100644 --- a/src/graphics/render/ModelBatch.cpp +++ b/src/graphics/render/ModelBatch.cpp @@ -51,11 +51,10 @@ ModelBatch::ModelBatch( const Chunks& chunks, const EngineSettings& settings ) - : batch(std::make_unique(capacity)), - assets(assets), + : assets(assets), chunks(chunks), - settings(settings) { -} + settings(settings), + batch(std::make_unique(capacity)) {} ModelBatch::~ModelBatch() = default; diff --git a/src/graphics/render/ParticlesRenderer.cpp b/src/graphics/render/ParticlesRenderer.cpp index 1be7272a..4c6a913e 100644 --- a/src/graphics/render/ParticlesRenderer.cpp +++ b/src/graphics/render/ParticlesRenderer.cpp @@ -21,11 +21,10 @@ ParticlesRenderer::ParticlesRenderer( const Chunks& chunks, const GraphicsSettings* settings ) - : batch(std::make_unique(4096)), - level(level), - chunks(chunks), + : chunks(chunks), assets(assets), - settings(settings) { + settings(settings), + batch(std::make_unique(4096)) { } ParticlesRenderer::~ParticlesRenderer() = default; @@ -171,7 +170,6 @@ void ParticlesRenderer::render(const Camera& camera, float delta) { continue; } auto texture = emitter.getTexture(); - const auto& found = particles.find(texture); std::vector* vec; vec = &particles[texture]; emitter.update(delta, camera.position, *vec); diff --git a/src/graphics/render/ParticlesRenderer.hpp b/src/graphics/render/ParticlesRenderer.hpp index a01f1018..506a3eac 100644 --- a/src/graphics/render/ParticlesRenderer.hpp +++ b/src/graphics/render/ParticlesRenderer.hpp @@ -16,7 +16,6 @@ class Level; struct GraphicsSettings; class ParticlesRenderer { - const Level& level; const Chunks& chunks; const Assets& assets; const GraphicsSettings* settings; diff --git a/src/graphics/render/PrecipitationRenderer.cpp b/src/graphics/render/PrecipitationRenderer.cpp index 1b138fc8..60f2c026 100644 --- a/src/graphics/render/PrecipitationRenderer.cpp +++ b/src/graphics/render/PrecipitationRenderer.cpp @@ -18,15 +18,13 @@ PrecipitationRenderer::PrecipitationRenderer( const Assets& assets, - const Level& level, + const Level&, const Chunks& chunks, - const GraphicsSettings* settings + const GraphicsSettings* ) : batch(std::make_unique(4096)), - level(level), chunks(chunks), - assets(assets), - settings(settings) { + assets(assets) { } PrecipitationRenderer::~PrecipitationRenderer() = default; diff --git a/src/graphics/render/PrecipitationRenderer.hpp b/src/graphics/render/PrecipitationRenderer.hpp index 9a691aca..d482e90a 100644 --- a/src/graphics/render/PrecipitationRenderer.hpp +++ b/src/graphics/render/PrecipitationRenderer.hpp @@ -12,10 +12,8 @@ struct WeatherPreset; class PrecipitationRenderer { std::unique_ptr batch; - const Level& level; const Chunks& chunks; const Assets& assets; - const GraphicsSettings* settings; float timer = 0.0f; int getHeightAt(int x, int z); diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 2903028c..ab140c77 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -72,10 +72,6 @@ WorldRenderer::WorldRenderer( modelBatch(std::make_unique( MODEL_BATCH_CAPACITY, assets, *player.chunks, engine.getSettings() )), - particles(std::make_unique( - assets, level, *player.chunks, &engine.getSettings().graphics - )), - texts(std::make_unique(*batch3d, assets, *frustumCulling)), guides(std::make_unique()), chunks(std::make_unique( &level, @@ -85,6 +81,10 @@ WorldRenderer::WorldRenderer( frontend.getContentGfxCache(), engine.getSettings() )), + particles(std::make_unique( + assets, level, *player.chunks, &engine.getSettings().graphics + )), + texts(std::make_unique(*batch3d, assets, *frustumCulling)), blockWraps( std::make_unique(assets, level, *player.chunks) ), diff --git a/src/graphics/render/WorldRenderer.hpp b/src/graphics/render/WorldRenderer.hpp index 8d3914be..f3189fb0 100644 --- a/src/graphics/render/WorldRenderer.hpp +++ b/src/graphics/render/WorldRenderer.hpp @@ -43,10 +43,10 @@ class WorldRenderer { std::unique_ptr frustumCulling; std::unique_ptr lineBatch; std::unique_ptr batch3d; - std::unique_ptr chunks; - std::unique_ptr guides; - std::unique_ptr skybox; std::unique_ptr modelBatch; + std::unique_ptr guides; + std::unique_ptr chunks; + std::unique_ptr skybox; Weather weather {}; float timer = 0.0f; @@ -73,8 +73,8 @@ class WorldRenderer { float fogFactor ); public: - std::unique_ptr texts; std::unique_ptr particles; + std::unique_ptr texts; std::unique_ptr blockWraps; std::unique_ptr precipitation; diff --git a/src/graphics/ui/elements/InputBindBox.hpp b/src/graphics/ui/elements/InputBindBox.hpp index 74b64d61..7d4a8855 100644 --- a/src/graphics/ui/elements/InputBindBox.hpp +++ b/src/graphics/ui/elements/InputBindBox.hpp @@ -7,9 +7,9 @@ namespace gui { class InputBindBox : public Panel { protected: + Binding& binding; glm::vec4 focusedColor {0.1f, 0.15f, 0.35f, 0.75f}; std::shared_ptr