@@ -1,21 +1,24 @@ | |||
[submodule "third_party/cpptoml"] | |||
path = third_party/cpptoml | |||
[submodule "third-party/cpptoml"] | |||
path = third-party/cpptoml | |||
url = https://github.com/skystrife/cpptoml.git | |||
[submodule "third_party/msgpack-c"] | |||
path = third_party/msgpack-c | |||
[submodule "third-party/msgpack-c"] | |||
path = third-party/msgpack-c | |||
url = https://github.com/msgpack/msgpack-c.git | |||
[submodule "third_party/imgui"] | |||
path = third_party/imgui | |||
[submodule "third-party/imgui"] | |||
path = third-party/imgui | |||
url = https://github.com/ocornut/imgui.git | |||
[submodule "third_party/PerlinNoise"] | |||
path = third_party/PerlinNoise | |||
[submodule "third-party/PerlinNoise"] | |||
path = third-party/PerlinNoise | |||
url = https://github.com/Reputeless/PerlinNoise.git | |||
[submodule "third_party/imgui_sdl"] | |||
path = third_party/imgui_sdl | |||
[submodule "third-party/imgui_sdl"] | |||
path = third-party/imgui_sdl | |||
url = https://github.com/mortie/imgui_sdl | |||
[submodule "third_party/imgui-plot"] | |||
path = third_party/imgui-plot | |||
[submodule "third-party/imgui-plot"] | |||
path = third-party/imgui-plot | |||
url = https://github.com/soulthreads/imgui-plot.git | |||
[submodule "third_party/fmt"] | |||
path = third_party/fmt | |||
[submodule "third-party/fmt"] | |||
path = third-party/fmt | |||
url = https://github.com/fmtlib/fmt.git | |||
[submodule "third-party/tracy"] | |||
path = third-party/fmt | |||
url = https://github.com/wolfpld/tracy.git |
@@ -20,38 +20,49 @@ if(CMAKE_GENERATOR STREQUAL "Ninja") | |||
endif() | |||
add_compile_options(-std=c++2a -Wall -Wextra -Wpedantic -Wno-unused-parameter) | |||
set(libraries | |||
third-party imgui fmt cpptoml msgpack | |||
SDL2 SDL2_image dl z) | |||
if(CMAKE_BUILD_TYPE STREQUAL Sanitize OR CMAKE_BUILD_TYPE STREQUAL "") | |||
message(STATUS "Build mode: Sanitize") | |||
add_compile_options(-g -Og -fsanitize=address -fsanitize=undefined) | |||
add_link_options(-fsanitize=address -fsanitize=undefined) | |||
elseif(CMAKE_BUILD_TYPE STREQUAL Debug) | |||
message(STATUS "Build mode: Debug") | |||
add_compile_options(-g -Og) | |||
add_compile_options(-g -Og -DTRACY_ENABLE) | |||
elseif(CMAKE_BUILD_TYPE STREQUAL DebugRelease) | |||
message(STATUS "Build mode: DebugRelease") | |||
add_compile_options(-O3 -flto -DNDEBUG -g) | |||
elseif(CMAKE_BUILD_TYPE STREQUAL Tracy) | |||
message(STATUS "Build mode: Tracy") | |||
add_compile_options(-O3 -flto -DNDEBUG -g -DTRACY_ENABLE) | |||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto") | |||
list(APPEND libraries tracy) | |||
elseif(CMAKE_BUILD_TYPE STREQUAL Release) | |||
message(STATUS "Build mode: Release") | |||
add_compile_options(-O3 -flto -DNDEBUG) | |||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto") | |||
else() | |||
message(FATAL_ERROR "CMAKE_BUILD_TYPE must be Debug or Release.") | |||
endif() | |||
add_subdirectory(third_party) | |||
set(libraries imgui fmt cpptoml msgpack SDL2 SDL2_image dl z) | |||
# We want to be able to use C++20 designated initializers, | |||
# but Clang doesn't support them yet. | |||
# Remove once Clang 9.1 or something comes out. | |||
add_compile_options(-Wno-c99-extensions) | |||
include_directories( | |||
${PROJECT_SOURCE_DIR}/third_party | |||
${SDL2_INCLUDE_DIRS}) | |||
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;${CMAKE_INSTALL_PREFIX}/lib64;${CMAKE_INSTALL_PREFIX}/swan/libswan;${CMAKE_INSTALL_PREFIX}/swan/third_party") | |||
include_directories(${SDL2_INCLUDE_DIRS}) | |||
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;${CMAKE_INSTALL_PREFIX}/lib64;${CMAKE_INSTALL_PREFIX}/swan/libswan;${CMAKE_INSTALL_PREFIX}/swan/third-party") | |||
add_subdirectory(third-party) | |||
add_subdirectory(tracy-tools) | |||
add_subdirectory(libswan) | |||
add_subdirectory(core.mod) | |||
@@ -174,20 +174,29 @@ inline EntityRef EntityCollectionImpl<Ent>::spawn(const Context &ctx, const Enti | |||
template<typename Ent> | |||
inline void EntityCollectionImpl<Ent>::update(const Context &ctx, float dt) { | |||
for (auto &ent: entities_) | |||
ZoneScopedN(typeid(Ent).name()); | |||
for (auto &ent: entities_) { | |||
ZoneScopedN("update"); | |||
ent->ent.update(ctx, dt); | |||
} | |||
} | |||
template<typename Ent> | |||
inline void EntityCollectionImpl<Ent>::tick(const Context &ctx, float dt) { | |||
for (auto &ent: entities_) | |||
ZoneScopedN(typeid(Ent).name()); | |||
for (auto &ent: entities_) { | |||
ZoneScopedN("tick"); | |||
ent->ent.tick(ctx, dt); | |||
} | |||
} | |||
template<typename Ent> | |||
inline void EntityCollectionImpl<Ent>::draw(const Context &ctx, Win &win) { | |||
for (auto &ent: entities_) | |||
ZoneScopedN(typeid(Ent).name()); | |||
for (auto &ent: entities_) { | |||
ZoneScopedN("draw"); | |||
ent->ent.draw(ctx, win); | |||
} | |||
} | |||
} |
@@ -1,5 +1,8 @@ | |||
#pragma once | |||
// We want every file to be able to easily add Tracy zones | |||
#include <tracy/Tracy.hpp> | |||
#include "Vector2.h" | |||
namespace Swan { |
@@ -33,6 +33,7 @@ World::World(Game *game, unsigned long rand_seed): | |||
} | |||
void World::ChunkRenderer::tick(WorldPlane &plane, ChunkPos abspos) { | |||
ZoneScopedN("World::ChunkRenderer tick"); | |||
int l = 0; | |||
RTClock clock; | |||
@@ -140,17 +141,20 @@ SDL_Color World::backgroundColor() { | |||
} | |||
void World::draw(Win &win) { | |||
ZoneScopedN("World draw"); | |||
auto bounds = player_->getBody().getBounds(); | |||
win.cam_ = bounds.pos - (win.getSize() / 2) + (bounds.size / 2); | |||
planes_[current_plane_].draw(win); | |||
} | |||
void World::update(float dt) { | |||
ZoneScopedN("World update"); | |||
for (auto &plane: planes_) | |||
plane.update(dt); | |||
} | |||
void World::tick(float dt) { | |||
ZoneScopedN("World tick"); | |||
for (auto &plane: planes_) | |||
plane.tick(dt); | |||
@@ -63,6 +63,8 @@ bool WorldPlane::hasChunk(ChunkPos pos) { | |||
// This function will be a bit weird because it's a really fucking hot function. | |||
Chunk &WorldPlane::getChunk(ChunkPos pos) { | |||
ZoneScopedN("WorldPlane getChunk"); | |||
// First, look through all chunks which have been in use this tick | |||
for (auto [chpos, chunk]: tick_chunks_) { | |||
if (chpos == pos) | |||
@@ -75,6 +77,7 @@ Chunk &WorldPlane::getChunk(ChunkPos pos) { | |||
} | |||
Chunk &WorldPlane::slowGetChunk(ChunkPos pos) { | |||
ZoneScopedN("WorldPlane slowGetChunk"); | |||
auto iter = chunks_.find(pos); | |||
// Create chunk if that turns out to be necessary | |||
@@ -112,6 +115,7 @@ void WorldPlane::setTile(TilePos pos, const std::string &name) { | |||
} | |||
Tile::ID WorldPlane::getTileID(TilePos pos) { | |||
ZoneScopedN("WorldPlane getTileID"); | |||
return getChunk(chunkPos(pos)).getTileID(relPos(pos)); | |||
} | |||
@@ -166,6 +170,7 @@ SDL_Color WorldPlane::backgroundColor() { | |||
} | |||
void WorldPlane::draw(Win &win) { | |||
ZoneScopedN("WorldPlane draw"); | |||
auto ctx = getContext(); | |||
auto pbounds = world_->player_->getBody().getBounds(); | |||
@@ -202,6 +207,7 @@ void WorldPlane::draw(Win &win) { | |||
} | |||
void WorldPlane::update(float dt) { | |||
ZoneScopedN("WorldPlane update"); | |||
auto ctx = getContext(); | |||
debug_boxes_.clear(); | |||
@@ -210,6 +216,7 @@ void WorldPlane::update(float dt) { | |||
} | |||
void WorldPlane::tick(float dt) { | |||
ZoneScopedN("WorldPlane tick"); | |||
auto ctx = getContext(); | |||
// Any chunk which has been in use since last tick should be kept alive |
@@ -254,6 +254,7 @@ int main(int argc, char **argv) { | |||
RTClock present_clock; | |||
SDL_RenderPresent(renderer.get()); | |||
FrameMark | |||
pcounter.countRenderPresent(present_clock.duration()); | |||
pcounter.countTotalTime(total_time_clock.duration()); |
@@ -0,0 +1,42 @@ | |||
add_library(third-party INTERFACE) | |||
target_include_directories(third-party SYSTEM INTERFACE | |||
${CMAKE_CURRENT_SOURCE_DIR}) | |||
add_library(cpptoml INTERFACE) | |||
target_include_directories(cpptoml SYSTEM INTERFACE | |||
${CMAKE_CURRENT_SOURCE_DIR}/cpptoml/include) | |||
add_library(fmt SHARED | |||
${CMAKE_CURRENT_SOURCE_DIR}/fmt/src/format.cc | |||
${CMAKE_CURRENT_SOURCE_DIR}/fmt/src/os.cc) | |||
target_include_directories(fmt SYSTEM PUBLIC | |||
${CMAKE_CURRENT_SOURCE_DIR}/fmt/include) | |||
set_target_properties(fmt PROPERTIES CXX_CLANG_TIDY "") | |||
install(TARGETS fmt DESTINATION swan/third-party) | |||
add_library(imgui SHARED | |||
${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui_demo.cpp | |||
${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui_draw.cpp | |||
${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui_widgets.cpp | |||
${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui.cpp | |||
${CMAKE_CURRENT_SOURCE_DIR}/imgui_sdl/imgui_sdl.cpp | |||
${CMAKE_CURRENT_SOURCE_DIR}/imgui-plot/src/imgui_plot.cpp) | |||
target_include_directories(imgui SYSTEM PUBLIC | |||
${CMAKE_CURRENT_SOURCE_DIR}/imgui | |||
${CMAKE_CURRENT_SOURCE_DIR}/imgui-plot/include | |||
${SDL2_INCLUDE_DIRS}) | |||
set_target_properties(imgui PROPERTIES CXX_CLANG_TIDY "") | |||
target_compile_options(imgui PRIVATE -Wno-sign-compare) | |||
install(TARGETS imgui DESTINATION swan/third-party) | |||
add_library(msgpack INTERFACE) | |||
target_include_directories(msgpack SYSTEM INTERFACE | |||
${CMAKE_CURRENT_SOURCE_DIR}/msgpack-c/include) | |||
add_library(tracy SHARED | |||
${CMAKE_CURRENT_SOURCE_DIR}/tracy/TracyClient.cpp) | |||
set_target_properties(tracy PROPERTIES CXX_CLANG_TIDY "") | |||
target_compile_options(tracy PRIVATE | |||
-Wno-unused-function -Wno-unused-result -Wno-sign-compare -Wno-pedantic | |||
-Wno-enum-compare -Wno-unused-variable) | |||
install(TARGETS tracy DESTINATION swan/third-party) |
@@ -0,0 +1 @@ | |||
Subproject commit b4d8cdd714bfe2dc652084b93ab4f4979650a7d8 |
@@ -1,29 +0,0 @@ | |||
add_library(imgui SHARED | |||
${PROJECT_SOURCE_DIR}/third_party/imgui/imgui_demo.cpp | |||
${PROJECT_SOURCE_DIR}/third_party/imgui/imgui_draw.cpp | |||
${PROJECT_SOURCE_DIR}/third_party/imgui/imgui_widgets.cpp | |||
${PROJECT_SOURCE_DIR}/third_party/imgui/imgui.cpp | |||
${PROJECT_SOURCE_DIR}/third_party/imgui_sdl/imgui_sdl.cpp | |||
${PROJECT_SOURCE_DIR}/third_party/imgui-plot/src/imgui_plot.cpp) | |||
target_include_directories(imgui PUBLIC | |||
${PROJECT_SOURCE_DIR}/third_party/imgui | |||
${PROJECT_SOURCE_DIR}/third_party/imgui-plot/include | |||
${SDL2_INCLUDE_DIRS}) | |||
set_target_properties(imgui PROPERTIES CXX_CLANG_TIDY "") | |||
install(TARGETS imgui DESTINATION swan/third_party) | |||
add_library(fmt SHARED | |||
${PROJECT_SOURCE_DIR}/third_party/fmt/src/format.cc | |||
${PROJECT_SOURCE_DIR}/third_party/fmt/src/os.cc) | |||
target_include_directories(fmt PUBLIC | |||
${PROJECT_SOURCE_DIR}/third_party/fmt/include) | |||
install(TARGETS fmt DESTINATION swan/third_party) | |||
add_library(cpptoml INTERFACE) | |||
target_include_directories(cpptoml INTERFACE | |||
${PROJECT_SOURCE_DIR}/third_party/cpptoml/include) | |||
add_library(msgpack INTERFACE) | |||
target_include_directories(msgpack INTERFACE | |||
${PROJECT_SOURCE_DIR}/third_party/msgpack-c/include) | |||
@@ -0,0 +1,100 @@ | |||
find_package(Freetype) | |||
find_package(glfw3) | |||
find_package(GTK2 REQUIRED COMPONENTS gtk) | |||
#add_library(tracy-stuff OBJECT | |||
add_library(tracy-libs-unix OBJECT EXCLUDE_FROM_ALL | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/nfd/nfd_gtk.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/libbacktrace/posix.cpp) | |||
target_include_directories(tracy-libs-unix PRIVATE ${GTK2_INCLUDE_DIRS}) | |||
target_link_libraries(tracy-libs-unix ${GTK2_LIBRARIES}) | |||
target_compile_options(tracy-libs-unix | |||
PUBLIC -UTRACY_ENABLE | |||
PRIVATE -Wno-deprecated-declarations) | |||
add_library(tracy-libs STATIC EXCLUDE_FROM_ALL | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/profiler/libs/gl3w/GL/gl3w.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/common/TracySocket.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/common/TracySystem.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/common/tracy_lz4.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/common/tracy_lz4hc.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/client/tracy_rpmalloc.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/client/TracyCallstack.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/client/TracyDxt1.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/client/TracyProfiler.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/client/TracySysTime.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/client/TracySysTrace.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/imguicolortextedit/TextEditor.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/imgui/imgui.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/imgui/imgui_demo.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/imgui/imgui_draw.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/imgui/imgui_widgets.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/nfd/nfd_common.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/libbacktrace/alloc.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/libbacktrace/dwarf.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/libbacktrace/elf.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/libbacktrace/fileline.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/libbacktrace/mmapio.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/libbacktrace/sort.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/libbacktrace/state.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/server/TracyBadVersion.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/server/TracyMemory.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/server/TracyMmap.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/server/TracyPrint.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/server/TracyStorage.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/server/TracyTaskDispatch.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/server/TracyTexture.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/server/TracyThreadCompress.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/server/TracyUserData.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/server/TracyView.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/server/TracyWorker.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/debug.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/entropy_common.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/error_private.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/fse_compress.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/fse_decompress.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/hist.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/huf_compress.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/huf_decompress.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/pool.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/threading.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/xxhash.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstdmt_compress.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_common.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_compress.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_compress_literals.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_compress_sequences.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_compress_superblock.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_ddict.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_decompress.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_decompress_block.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_double_fast.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_fast.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_lazy.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_ldm.c | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/zstd/zstd_opt.c) | |||
set_target_properties(tracy-libs PROPERTIES CXX_CLANG_TIDY "") | |||
target_include_directories(tracy-libs PUBLIC | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/profiler/libs/gl3w | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/imgui) | |||
target_link_libraries(tracy-libs tracy-libs-unix | |||
pthread dl Freetype::Freetype glfw GL) | |||
target_compile_options(tracy-libs PUBLIC | |||
-UTRACY_ENABLE | |||
-Wno-class-memaccess -Wno-unused-variable -Wno-pedantic -Wno-ignored-qualifiers | |||
-Wno-missing-field-initializers -Wno-unused-result -Wno-sign-compare | |||
-Wno-reorder -Wno-sequence-point -Wno-enum-compare -Wno-unused-function | |||
-Wno-deprecated-decleration | |||
-DTRACY_FILESELECTOR -DTRACY_EXTENDED_FONT -DTRACY_ROOT_WINDOW | |||
-DIMGUI_IMPL_OPENGL_LOADER_GL3W) | |||
add_executable(tracy-profiler EXCLUDE_FROM_ALL | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/profiler/src/imgui_freetype.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/profiler/src/imgui_impl_glfw.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/profiler/src/imgui_impl_opengl3.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/profiler/src/main.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/profiler/src/ResolvService.cpp | |||
${PROJECT_SOURCE_DIR}/third-party/tracy/profiler/src/winmainArchDiscovery.cpp) | |||
set_target_properties(tracy-libs PROPERTIES CXX_CLANG_TIDY "") | |||
target_link_libraries(tracy-profiler tracy-libs tbb) |