Simple empty window
This commit is contained in:
21
.clang-format
Normal file
21
.clang-format
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
BasedOnStyle: LLVM
|
||||
AlignConsecutiveAssignments:
|
||||
Enabled: true
|
||||
AlignConsecutiveBitFields:
|
||||
Enabled: true
|
||||
AlignConsecutiveDeclarations:
|
||||
Enabled: true
|
||||
AlignConsecutiveMacros:
|
||||
Enabled: true
|
||||
AlignConsecutiveShortCaseStatements:
|
||||
Enabled: true
|
||||
AllowShortBlocksOnASingleLine: Always
|
||||
AllowShortCaseLabelsOnASingleLine: true
|
||||
AllowShortIfStatementsOnASingleLine: AllIfsAndElse
|
||||
AllowShortLoopsOnASingleLine: true
|
||||
ColumnLimit: 120
|
||||
IndentCaseLabels: true
|
||||
IndentPPDirectives: AfterHash
|
||||
PointerAlignment: Left
|
||||
LambdaBodyIndentation: OuterScope
|
||||
158
.gitignore
vendored
158
.gitignore
vendored
@@ -12,3 +12,161 @@
|
||||
# Built Visual Studio Code Extensions
|
||||
*.vsix
|
||||
|
||||
# Ignore build output directories
|
||||
[Bb]uild*/
|
||||
.[Cc]ache/
|
||||
|
||||
#
|
||||
# From macOS gitignore template
|
||||
#
|
||||
|
||||
# General
|
||||
.DS_Store
|
||||
__MACOSX/
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
Icon[]
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
#
|
||||
# From Windows gitignore template
|
||||
#
|
||||
|
||||
# Windows thumbnail cache files
|
||||
Thumbs.db
|
||||
Thumbs.db:encryptable
|
||||
ehthumbs.db
|
||||
ehthumbs_vista.db
|
||||
|
||||
# Dump file
|
||||
*.stackdump
|
||||
|
||||
# Folder config file
|
||||
[Dd]esktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# Windows shortcuts
|
||||
*.lnk
|
||||
|
||||
#
|
||||
# From Linux gitignore template
|
||||
#
|
||||
|
||||
*~
|
||||
|
||||
# temporary files which can be created if a process still has a handle open of a deleted file
|
||||
.fuse_hidden*
|
||||
|
||||
# Metadata left by Dolphin file manager, which comes with KDE Plasma
|
||||
.directory
|
||||
|
||||
# Linux trash folder which might appear on any partition or disk
|
||||
.Trash-*
|
||||
|
||||
# .nfs files are created when an open file is removed but is still being accessed
|
||||
.nfs*
|
||||
|
||||
# Log files created by default by the nohup command
|
||||
nohup.out
|
||||
|
||||
#
|
||||
# From VSCode gitignore template
|
||||
#
|
||||
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
!.vscode/*.code-snippets
|
||||
!*.code-workspace
|
||||
|
||||
# Built Visual Studio Code Extensions
|
||||
*.vsix
|
||||
|
||||
#
|
||||
# From C gitignore template
|
||||
#
|
||||
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
*.obj
|
||||
*.elf
|
||||
|
||||
# Linker output
|
||||
*.ilk
|
||||
*.map
|
||||
*.exp
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Libraries
|
||||
*.lib
|
||||
*.a
|
||||
*.la
|
||||
*.lo
|
||||
|
||||
# Shared objects (inc. Windows DLLs)
|
||||
*.dll
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
*.i*86
|
||||
*.x86_64
|
||||
*.hex
|
||||
|
||||
# Debug files
|
||||
*.dSYM/
|
||||
*.su
|
||||
*.idb
|
||||
*.pdb
|
||||
|
||||
# Kernel Module Compile Results
|
||||
*.mod*
|
||||
*.cmd
|
||||
.tmp_versions/
|
||||
modules.order
|
||||
Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
|
||||
# debug information files
|
||||
*.dwo
|
||||
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"editor.tabSize": 2,
|
||||
"editor.formatOnSave": true,
|
||||
"editor.formatOnPaste": true,
|
||||
}
|
||||
15
CMakeLists.txt
Normal file
15
CMakeLists.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
cmake_minimum_required(VERSION 3.30)
|
||||
project(chkEngine LANGUAGES CXX VERSION 0.1.0)
|
||||
|
||||
include(cmake/deps.cmake)
|
||||
include(cmake/chk.cmake)
|
||||
|
||||
chk_add(NAME Launcher KIND exe
|
||||
HDR
|
||||
"Launcher.hpp"
|
||||
SRC
|
||||
"Launcher.cpp"
|
||||
"Main.cpp"
|
||||
PUB
|
||||
SDL3pp::SDL3pp
|
||||
)
|
||||
105
cmake/chk.cmake
Normal file
105
cmake/chk.cmake
Normal file
@@ -0,0 +1,105 @@
|
||||
include_guard()
|
||||
|
||||
include(GenerateExportHeader)
|
||||
|
||||
function(chk_add)
|
||||
cmake_parse_arguments(CHK "" "NAME;KIND;PREFIX;SRCBASE;BINBASE" "SRC;HDR;PUB;PRV" ${ARGN})
|
||||
|
||||
set(CHK_IS_LIB FALSE)
|
||||
set(CHK_IS_EXE FALSE)
|
||||
|
||||
if(NOT CHK_NAME)
|
||||
message(FATAL_ERROR "NAME is required")
|
||||
endif()
|
||||
if(CHK_KIND STREQUAL "lib")
|
||||
set(CHK_IS_LIB TRUE)
|
||||
elseif(CHK_KIND STREQUAL "exe")
|
||||
set(CHK_IS_EXE TRUE)
|
||||
elseif(NOT CHK_KIND)
|
||||
message(FATAL_ERROR "KIND is required")
|
||||
else()
|
||||
message(FATAL_ERROR "KIND must be either \"lib\" or \"exe\". was \"${CHK_KIND}\"")
|
||||
endif()
|
||||
if(NOT CHK_PREFIX)
|
||||
set(CHK_PREFIX "chk")
|
||||
endif()
|
||||
if(NOT CHK_SRCBASE)
|
||||
set(CHK_SRCBASE "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
endif()
|
||||
if(NOT CHK_BINBASE)
|
||||
set(CHK_BINBASE "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
endif()
|
||||
|
||||
set(CHK_TARGET "${CHK_PREFIX}_${CHK_NAME}")
|
||||
string(TOUPPER "${CHK_NAME}" CHK_NAME_CAPS)
|
||||
string(TOUPPER "${CHK_PREFIX}" CHK_PREFIX_CAPS)
|
||||
string(TOUPPER "${CHK_TARGET}" CHK_TARGET_CAPS)
|
||||
|
||||
list(TRANSFORM CHK_SRC PREPEND "${CHK_SRCBASE}/src/${CHK_PREFIX}/${CHK_NAME}/")
|
||||
list(TRANSFORM CHK_HDR PREPEND "${CHK_SRCBASE}/include/${CHK_PREFIX}/${CHK_NAME}/")
|
||||
|
||||
if(CHK_IS_LIB)
|
||||
add_library(${CHK_TARGET})
|
||||
add_library(${CHK_PREFIX}::${CHK_NAME} ALIAS ${CHK_TARGET})
|
||||
|
||||
set(CHK_EXP_EXT "hpp")
|
||||
set(CHK_EXP_DIR ${CHK_BINBASE}/include/${CHK_PREFIX}/${CHK_NAME})
|
||||
set(CHK_EXP_HDR ${CHK_EXP_DIR}/Api.${CHK_EXP_EXT})
|
||||
|
||||
generate_export_header(${CHK_TARGET}
|
||||
EXPORT_FILE_NAME ${CHK_EXP_HDR}
|
||||
EXPORT_MACRO_NAME ${CHK_NAME_CAPS}_API
|
||||
NO_EXPORT_MACRO_NAME ${CHK_NAME_CAPS}_LOCAL
|
||||
PREFIX_NAME ${CHK_PREFIX_CAPS}_
|
||||
)
|
||||
|
||||
list(APPEND CHK_HDR ${CHK_EXP_HDR})
|
||||
elseif(CHK_IS_EXE)
|
||||
add_executable(${CHK_TARGET})
|
||||
endif()
|
||||
|
||||
target_sources(${CHK_TARGET}
|
||||
PUBLIC
|
||||
FILE_SET "${CHK_PREFIX}_${CHK_NAME}_headers"
|
||||
TYPE HEADERS
|
||||
BASE_DIRS
|
||||
"${CHK_SRCBASE}/include"
|
||||
"${CHK_BINBASE}/include"
|
||||
FILES
|
||||
${CHK_HDR}
|
||||
|
||||
PRIVATE
|
||||
${CHK_SRC}
|
||||
)
|
||||
|
||||
target_include_directories(${CHK_TARGET}
|
||||
PUBLIC
|
||||
$<BUILD_INTERFACE:${CHK_SRCBASE}/include>
|
||||
$<BUILD_INTERFACE:${CHK_BINBASE}/include>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
|
||||
target_link_libraries(${CHK_TARGET}
|
||||
PUBLIC
|
||||
${CHK_PUB}
|
||||
|
||||
PRIVATE
|
||||
${CHK_PRV}
|
||||
)
|
||||
|
||||
target_compile_features(${CHK_TARGET} PUBLIC cxx_std_23)
|
||||
|
||||
# Set linker language to C++
|
||||
set_target_properties(${CHK_TARGET} PROPERTIES LINKER_LANGUAGE CXX)
|
||||
|
||||
# Copy DLLs alongside the executable on Windows
|
||||
if (WIN32 AND CHK_IS_EXE)
|
||||
add_custom_command(TARGET ${CHK_TARGET} POST_BUILD
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy_if_different
|
||||
$<TARGET_RUNTIME_DLLS:${CHK_TARGET}>
|
||||
$<TARGET_FILE_DIR:${CHK_TARGET}>
|
||||
COMMAND_EXPAND_LISTS
|
||||
)
|
||||
endif()
|
||||
endfunction(chk_add)
|
||||
15
cmake/deps.cmake
Normal file
15
cmake/deps.cmake
Normal file
@@ -0,0 +1,15 @@
|
||||
include(FetchContent)
|
||||
|
||||
set(SDL3PP_FORCE_BUNDLED ON CACHE BOOL "")
|
||||
set(SDL3PP_ENABLE_IMAGE OFF CACHE BOOL "")
|
||||
set(SDL3PP_ENABLE_TTF OFF CACHE BOOL "")
|
||||
set(SDL3PP_ENABLE_MIXER OFF CACHE BOOL "")
|
||||
set(SDL3PP_BUILD_EXAMPLES OFF CACHE BOOL "")
|
||||
set(SDL3PP_BUILD_TESTS OFF CACHE BOOL "")
|
||||
set(SDL3PP_GEN_DOCS OFF CACHE BOOL "")
|
||||
|
||||
FetchContent_Declare(SDL3ppExternal
|
||||
URL https://github.com/talesm/SDL3pp/releases/download/0.9.2/SDL3pp-0.9.2.tar.gz
|
||||
OVERRIDE_FIND_PACKAGE
|
||||
)
|
||||
FetchContent_MakeAvailable(SDL3ppExternal)
|
||||
40
include/chk/Launcher/Launcher.hpp
Normal file
40
include/chk/Launcher/Launcher.hpp
Normal file
@@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL3pp/SDL3pp.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace chk {
|
||||
|
||||
struct LauncherState {
|
||||
bool running : 1 = false;
|
||||
};
|
||||
|
||||
class Launcher {
|
||||
public:
|
||||
Launcher(const std::string& title, int w = 1280, int h = 720);
|
||||
~Launcher();
|
||||
|
||||
// Disable copy and move semantics
|
||||
Launcher(const Launcher&) = delete;
|
||||
Launcher(Launcher&&) = delete;
|
||||
Launcher& operator=(const Launcher&) = delete;
|
||||
Launcher& operator=(Launcher&&) = delete;
|
||||
|
||||
void Step();
|
||||
void Event(const SDL::Event& event);
|
||||
|
||||
auto& Is() const { return _is; }
|
||||
auto& Was() const { return _was; }
|
||||
|
||||
auto& Win() { return _win; }
|
||||
auto& Ctx() { return _ctx; }
|
||||
|
||||
private:
|
||||
LauncherState _is, _was;
|
||||
|
||||
SDL::Window _win = nullptr;
|
||||
SDL::Renderer _ctx = nullptr;
|
||||
};
|
||||
|
||||
} // namespace chk
|
||||
41
src/chk/Launcher/Launcher.cpp
Normal file
41
src/chk/Launcher/Launcher.cpp
Normal file
@@ -0,0 +1,41 @@
|
||||
#include <chk/Launcher/Launcher.hpp>
|
||||
|
||||
namespace chk {
|
||||
|
||||
Launcher::Launcher(const std::string& title, int w, int h) {
|
||||
auto winFlags = SDL::WINDOW_HIDDEN;
|
||||
winFlags |= SDL::WINDOW_RESIZABLE;
|
||||
winFlags |= SDL::WINDOW_HIGH_PIXEL_DENSITY;
|
||||
|
||||
_win = SDL::Window(title, SDL::Point{w, h}, winFlags);
|
||||
_ctx = SDL::Renderer(Win());
|
||||
|
||||
this->Step();
|
||||
_win.Show();
|
||||
|
||||
_is.running = true;
|
||||
}
|
||||
|
||||
Launcher::~Launcher() = default;
|
||||
|
||||
void Launcher::Step() {
|
||||
try {
|
||||
Ctx().SetTarget(nullptr);
|
||||
Ctx().SetDrawColorFloat({0.1f, 0.2f, 0.3f, 1.0f});
|
||||
Ctx().RenderClear();
|
||||
|
||||
Ctx().Present();
|
||||
|
||||
_was = _is;
|
||||
} catch (const SDL::Error& e) { SDL::Log("[SDL] {}", e.what()); }
|
||||
}
|
||||
|
||||
void Launcher::Event(const SDL::Event& event) {
|
||||
switch (event.type) {
|
||||
case SDL::EVENT_QUIT: {
|
||||
_is.running = false;
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace chk
|
||||
54
src/chk/Launcher/Main.cpp
Normal file
54
src/chk/Launcher/Main.cpp
Normal file
@@ -0,0 +1,54 @@
|
||||
#include <chk/Launcher/Launcher.hpp>
|
||||
|
||||
#define SDL3PP_MAIN_USE_CALLBACKS
|
||||
#include <SDL3pp/SDL3pp_main.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace chk {
|
||||
|
||||
class EntryPoint {
|
||||
public:
|
||||
EntryPoint() {
|
||||
SDL::SetAppMetadata("chkEngine", "0.1.0", "net.jp.chk.engine");
|
||||
SDL::Init(SDL::INIT_VIDEO);
|
||||
_launcher = std::make_unique<chk::Launcher>("chkEngine");
|
||||
}
|
||||
|
||||
~EntryPoint() = default;
|
||||
|
||||
SDL::AppResult Iterate() {
|
||||
SDL::AppResult result = SDL::APP_SUCCESS;
|
||||
|
||||
try {
|
||||
_launcher->Step();
|
||||
result = _launcher->Is().running ? SDL::APP_CONTINUE : SDL::APP_SUCCESS;
|
||||
} catch (const SDL::Error& e) {
|
||||
SDL::Log("[SDL] {}", e.what());
|
||||
result = SDL::APP_FAILURE;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
SDL::AppResult Event(const SDL::Event& event) {
|
||||
SDL::AppResult result = SDL::APP_SUCCESS;
|
||||
|
||||
try {
|
||||
_launcher->Event(event);
|
||||
result = _launcher->Is().running ? SDL::APP_CONTINUE : SDL::APP_SUCCESS;
|
||||
} catch (const SDL::Error& e) {
|
||||
SDL::Log("[SDL] {}", e.what());
|
||||
result = SDL::APP_FAILURE;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<chk::Launcher> _launcher;
|
||||
};
|
||||
|
||||
} // namespace chk
|
||||
|
||||
SDL3PP_DEFINE_CALLBACKS(chk::EntryPoint);
|
||||
Reference in New Issue
Block a user