Compare commits
	
		
			2 commits
		
	
	
		
			
				10cb797084
			
			...
			
				01697f9df4
			
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							
							
								
							
							
	
	
		
			
		
	
	01697f9df4 | 
						
						
							|||
| 
							
							
								
							
							
	
	
		
			
		
	
	9dfe0faa56 | 
						
						
							
					 9 changed files with 222 additions and 6 deletions
				
			
		
							
								
								
									
										128
									
								
								CMakeLists.txt
									
										
									
									
									
								
							
							
						
						
									
										128
									
								
								CMakeLists.txt
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,11 +1,131 @@
 | 
			
		|||
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_REQUIRED ON
 | 
			
		||||
					  CXX_EXTENSIONS OFF
 | 
			
		||||
					  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})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
- Spdlog: logging the app.
 | 
			
		||||
 | 
			
		||||
The others are:
 | 
			
		||||
- jemalloc
 | 
			
		||||
- ccache
 | 
			
		||||
- the gold linker
 | 
			
		||||
- OpenGL
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								include/gui.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/gui.hpp
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										21
									
								
								include/gui_data.hpp
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										25
									
								
								include/window.hpp
									
										
									
									
									
										Normal 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
									
								
							
							
						
						
									
										5
									
								
								src/gui.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
#include "gui.hpp"
 | 
			
		||||
 | 
			
		||||
gui::Gui::~Gui() noexcept {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								src/gui_data.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/gui_data.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
#include "gui_data.hpp"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,10 @@
 | 
			
		|||
#include <iostream>
 | 
			
		||||
#include <spdlog/spdlog.h>
 | 
			
		||||
#include <spdlog/sinks/stdout_sinks.h>
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								src/window.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/window.cpp
									
										
									
									
									
										Normal 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);
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue