Browse Source

integrate tracy, cmake stuff, etc

opengl-renderer-broken
Martin Dørum 4 years ago
parent
commit
abc277b256

+ 17
- 14
.gitmodules View File

@@ -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

+ 19
- 8
CMakeLists.txt View File

@@ -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)


+ 12
- 3
libswan/include/swan/Collection.h View File

@@ -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);
}
}

}

+ 3
- 0
libswan/include/swan/common.h View File

@@ -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 {

+ 4
- 0
libswan/src/World.cc View File

@@ -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);


+ 7
- 0
libswan/src/WorldPlane.cc View File

@@ -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

+ 1
- 0
src/main.cc View File

@@ -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());

+ 42
- 0
third-party/CMakeLists.txt View File

@@ -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)

third_party/PerlinNoise → third-party/PerlinNoise View File


third_party/cpptoml → third-party/cpptoml View File


third_party/fmt → third-party/fmt View File


third_party/imgui → third-party/imgui View File


third_party/imgui-plot → third-party/imgui-plot View File


third_party/imgui_sdl → third-party/imgui_sdl View File


third_party/msgpack-c → third-party/msgpack-c View File


+ 1
- 0
third-party/tracy

@@ -0,0 +1 @@
Subproject commit b4d8cdd714bfe2dc652084b93ab4f4979650a7d8

+ 0
- 29
third_party/CMakeLists.txt View File

@@ -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)


+ 100
- 0
tracy-tools/CMakeLists.txt View File

@@ -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)

Loading…
Cancel
Save