Compare commits

...

2 commits

Author SHA1 Message Date
01697f9df4
Compiles, not run yet. 2022-01-08 23:40:31 +01:00
9dfe0faa56
Beginning writing gui and window wrapper for GLFW 2022-01-08 21:57:17 +01:00
9 changed files with 222 additions and 6 deletions

View file

@ -1,11 +1,131 @@
cmake_minimum_required(VERSION 3.19 FATAL_ERROR) cmake_minimum_required(VERSION 3.19 FATAL_ERROR)
project(BillySheet) project(BillySheet LANGUAGES CXX C)
add_executable(BillySheet src/main.cpp) find_package(OpenGL REQUIRED)
set_target_properties(BillySheet PROPERTIES set(PRECOMPILE_HEADERS
include/gui.hpp
include/gui_data.hpp
include/window.hpp
)
set(SOURCE_HEADERS
include/imgui/imconfig.h
include/imgui/imgui.h
include/imgui/imgui_impl_glfw.h
include/imgui/imgui_impl_opengl3.h
include/imgui/imgui_impl_opengl3_loader.h
include/imgui/imgui_internal.h
include/imgui/imstb_rectpack.h
include/imgui/imstb_textedit.h
include/imgui/imstb_truetype.h
include/gui.hpp
include/gui_data.hpp
include/window.hpp)
set(SOURCE_FILES
src/imgui/imgui.cpp
src/imgui/imgui_draw.cpp
src/imgui/imgui_impl_glfw.cpp
src/imgui/imgui_impl_opengl3.cpp
src/imgui/imgui_tables.cpp
src/imgui/imgui_widgets.cpp
src/main.cpp
src/gui.cpp
src/gui_data.cpp
src/window.cpp)
set(SOURCES
${SOURCE_HEADERS}
${SOURCE_FILES})
find_program(CCACHE_FOUND ccache)
if (CCACHE_FOUND)
message(STATUS "ccache found !")
set_property(GLOBAL PROPERTY C_COMPILER_LAUNCHER ccache)
set_property(GLOBAL PROPERTY C_LINKER_LAUNCHER ccache)
set_property(GLOBAL PROPERTY CXX_COMPILER_LAUNCHER ccache)
set_property(GLOBAL PROPERTY CXX_LINKER_LAUNCHER ccache)
else ()
message(STATUS "ccache not found")
endif ()
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" OFF)
option(GLFW_BUILD_TESTS "Build the GLFW test programs" OFF)
option(GLFW_BUILD_DOCS "Build the GLFW documentation" OFF)
option(GLFW_INSTALL "Generate installation target" OFF)
option(GLFW_VULKAN_STATIC "Assume the Vulkan loader is linked with the application" OFF)
add_subdirectory(external/glfw)
option(SPDLOG_ENABLE_PCH "Build static or shared library using precompiled header to speed up compilation time" ON)
option(SPDLOG_BUILD_WARNINGS "Enable compiler warnings" ON)
option(SPDLOG_PREVENT_CHILD_FD "Prevent from child processes to inherit log file descriptors" ON)
option(SPDLOG_NO_THREAD_ID "prevent spdlog from querying the thread id on each log call if thread id is not needed" ON)
option(SPDLOG_NO_TLS "prevent spdlog from using thread local storage" ON)
option(SPDLOG_NO_ATOMIC_LEVELS "prevent spdlog from using of std::atomic log levels (use only if your code never modifies log levels concurrently" ON)
add_subdirectory(external/spdlog)
set(COMPILE_FLAGS
-pipe
-march=skylake # change to native or your architecture.
-mtune=skylake # same as above
-mrdseed # be careful about this, this is linked to the x86 architecture.
-mrdrnd # same as above
-Wall
-Wextra
-Wpedantic
-pedantic
-ffunction-sections
-fdata-sections
-fuse-ld=gold
-funroll-loops
-fdevirtualize-at-ltrans
-fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
)
set(LINKER_OPTIONS
-Wl,--sort-common,--as-needed,--gc-sections,--strip-all
-fuse-ld=gold
-fdevirtualize-at-ltrans
)
set(LINKER_FLAGS
jemalloc
)
add_executable(BillySheet ${SOURCES})
target_include_directories(BillySheet PRIVATE include include/imgui)
set_target_properties(BillySheet spdlog PROPERTIES
CXX_STANDARD 17 CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF CXX_EXTENSIONS OFF
INTERPROCEDURAL_OPTIMIZATION ON INTERPROCEDURAL_OPTIMIZATION ON
UNITY_BUILD ON) # UNITY_BUILD ON
)
set_target_properties(glfw PROPERTIES
C_STANDARD 11
C_STANDARD_REQUIRED ON
C_EXTENSIONS OFF
INTERPROCEDURAL_OPTIMIZATION ON
# UNITY_BUILD ON
)
#target_precompile_headers(BillySheet PRIVATE ${PRECOMPILE_HEADERS})
target_compile_definitions(BillySheet PRIVATE
$<$<CONFIG:Debug>:_GLIBCXX_DEBUG>
$<$<CONFIG:Debug>:SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_DEBUG>
$<$<CONFIG:Release>:SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_ERROR>)
target_compile_options(spdlog PRIVATE ${COMPILE_FLAGS})
target_compile_options(glfw PRIVATE ${COMPILE_FLAGS})
target_compile_options(BillySheet PRIVATE ${COMPILE_FLAGS})
target_link_options(spdlog PRIVATE ${LINKER_OPTIONS})
target_link_options(glfw PRIVATE ${LINKER_OPTIONS})
target_link_options(BillySheet PRIVATE ${LINKER_OPTIONS})
target_link_libraries(spdlog PRIVATE ${LINKER_FLAGS})
target_link_libraries(glfw PRIVATE ${LINKER_FLAGS})
target_link_libraries(BillySheet glfw spdlog OpenGL::OpenGL ${LINKER_FLAGS})

View file

@ -2,6 +2,12 @@
This project is about to digitally control your character sheet from the book "La Forteresse du Chaudron Noir" from Bob Lennon. This project is about to digitally control your character sheet from the book "La Forteresse du Chaudron Noir" from Bob Lennon.
## External dependencies ## External dependencies
All dependencies are inside the "external" directory. The followings are inside: Some dependencies are inside the "external" directory. The followings are inside:
- GLFW: windowing - GLFW: windowing
- Spdlog: logging the app. - Spdlog: logging the app.
The others are:
- jemalloc
- ccache
- the gold linker
- OpenGL

16
include/gui.hpp Normal file
View file

@ -0,0 +1,16 @@
#ifndef BILLYSHEET_GUI_HPP
#define BILLYSHEET_GUI_HPP
namespace gui {
class Gui final {
private:
public:
Gui() = delete;
~Gui() noexcept;
};
}
#endif //BILLYSHEET_GUI_HPP

21
include/gui_data.hpp Normal file
View file

@ -0,0 +1,21 @@
#ifndef BILLYSHEET_GUI_DATA_HPP
#define BILLYSHEET_GUI_DATA_HPP
#include "window.hpp"
namespace gui {
class GuiData final {
private:
Window &window;
public:
GuiData() = delete;
explicit GuiData(Window &wwindow) : window(wwindow) {}
~GuiData() noexcept = default;
};
}
#endif //BILLYSHEET_GUI_DATA_HPP

25
include/window.hpp Normal file
View file

@ -0,0 +1,25 @@
#ifndef BILLYSHEET_WINDOW_HPP
#define BILLYSHEET_WINDOW_HPP
#include <memory>
#include <GLFW/glfw3.h>
namespace gui {
class Window final {
private:
static void delete_glfw_window(GLFWwindow *glfWwindow) {
glfwDestroyWindow(glfWwindow);
glfwTerminate();
}
std::unique_ptr<GLFWwindow, decltype(&delete_glfw_window)> wwindow{ nullptr, delete_glfw_window };
public:
Window();
~Window() noexcept = default;
};
}
#endif //BILLYSHEET_WINDOW_HPP

5
src/gui.cpp Normal file
View file

@ -0,0 +1,5 @@
#include "gui.hpp"
gui::Gui::~Gui() noexcept {
}

1
src/gui_data.cpp Normal file
View file

@ -0,0 +1 @@
#include "gui_data.hpp"

View file

@ -1,6 +1,10 @@
#include <iostream> #include <iostream>
#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_sinks.h>
int main() { int main() {
std::cout << "Hello, World!" << std::endl; std::ios::sync_with_stdio(false);
spdlog::set_default_logger(spdlog::stdout_logger_st("console"));
SPDLOG_WARN("Hello world !");
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }

18
src/window.cpp Normal file
View file

@ -0,0 +1,18 @@
#include "window.hpp"
#include <stdexcept>
#include <spdlog/spdlog.h>
static void glfwErrorCallback(int error, const char *message) {
spdlog::error("Error code {}: {}", error, message);
}
gui::Window::Window() {
glfwSetErrorCallback(glfwErrorCallback);
if (glfwInit() == GLFW_FALSE) {
throw std::runtime_error("GLFW init failed.");
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
wwindow = std::unique_ptr<GLFWwindow, decltype(&delete_glfw_window)>(glfwCreateWindow(600, 800, "Billy Sheet tracker", nullptr, nullptr),
delete_glfw_window);
}