From 3be734ae2f1de0675bf1de86ecf4ec684650d79d Mon Sep 17 00:00:00 2001 From: Asuro Date: Fri, 7 Feb 2025 00:32:38 +0100 Subject: [PATCH] setup --- .gitmodules | 3 + src/CMakeLists.txt | 45 +++++++-------- src/build.bat | 2 +- src/build.ps1 | 1 + src/dependency/bgfx | 1 - src/dependency/bgfx.cmake | 1 + src/dependency/bimg | 1 - src/dependency/bx | 1 - src/engine/main.cpp | 112 ++++++++++++++++++++++++++++++++++++-- src/game/Log.cpp | 10 ++++ src/game/Log.h | 6 ++ src/game/Setup.cpp | 25 +++++++++ src/game/Setup.h | 9 +++ src/setup-vs.bat | 4 ++ src/setup.bat | 4 +- tools/remedy-session.rdbg | Bin 0 -> 232 bytes 16 files changed, 193 insertions(+), 32 deletions(-) create mode 100644 src/build.ps1 delete mode 160000 src/dependency/bgfx create mode 160000 src/dependency/bgfx.cmake delete mode 160000 src/dependency/bimg delete mode 160000 src/dependency/bx create mode 100644 src/game/Log.cpp create mode 100644 src/game/Log.h create mode 100644 src/game/Setup.cpp create mode 100644 src/game/Setup.h create mode 100644 src/setup-vs.bat create mode 100644 tools/remedy-session.rdbg diff --git a/.gitmodules b/.gitmodules index e68e484..cd7d21c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "src/dependency/bimg"] path = src/dependency/bimg url = https://github.com/bkaradzic/bimg +[submodule "src/dependency/bgfx.cmake"] + path = src/dependency/bgfx.cmake + url = https://github.com/bkaradzic/bgfx.cmake diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6ed3600..2414c16 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,30 +1,31 @@ cmake_minimum_required(VERSION 3.10) project(PuzGameProj) +if (MSVC) +else() +add_compile_options(-g -gcodeview) +add_link_options(-fuse-ld=lld -g -Wl,--pdb=) +endif() + +# Engine file(GLOB_RECURSE sources_engine engine/*.cpp engine/*.h) -#file(GLOB_RECURSE data resources/xyz) - -add_executable(PuzGame ${sources_engine}) -#target_compile_options(PuzGame PUBLIC xyz) -set_property(TARGET PuzGame PROPERTY CXX_STANDARD 17) +add_executable(PuzGameEngine ${sources_engine}) +set_property(TARGET PuzGameEngine PROPERTY CXX_STANDARD 17) #file(COPY ${data} DESTINATION resources) -# BGFX -add_library(bx STATIC IMPORTED) -add_library(bimg STATIC IMPORTED) -add_library(bgfx STATIC IMPORTED) -set_target_properties(bx PROPERTIES - IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/dependency/bgfx/.build/win64_vs2022/bin/bxDebug.lib" - INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/dependency/bx/include/" -) -set_target_properties(bimg PROPERTIES - IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/dependency/bgfx/.build/win64_vs2022/bin/bimgDebug.lib" - INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/dependency/bimg/include/" -) -set_target_properties(bgfx PROPERTIES - IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/dependency/bgfx/.build/win64_vs2022/bin/bgfxDebug.lib" - INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/dependency/bgfx/include/" -) +#target_compile_options(PuzGameEngine PUBLIC xyz) +#file(GLOB_RECURSE data resources/xyz) + +# Game +file(GLOB_RECURSE sources_game game/*.cpp game/*.h) +add_library(PuzGame SHARED ${sources_game}) +set_property(TARGET PuzGame PROPERTY CXX_STANDARD 17) + +SET(BGFX_BUILD_TOOLS OFF) +SET(BGFX_BUILD_EXAMPLES OFF) +add_subdirectory("${CMAKE_SOURCE_DIR}/dependency/bgfx.cmake") + target_link_libraries(PuzGame bx bimg bgfx) -target_compile_definitions(PuzGame PUBLIC BX_CONFIG_DEBUG=1) +target_link_libraries(PuzGameEngine bx) + diff --git a/src/build.bat b/src/build.bat index 6baeea7..04d43c0 100644 --- a/src/build.bat +++ b/src/build.bat @@ -1 +1 @@ -cmake --build cmake-build && start ./cmake-build/PuzGame.exe +cmake --build cmake-build && .\cmake-build\PuzGameEngine.exe diff --git a/src/build.ps1 b/src/build.ps1 new file mode 100644 index 0000000..5ba655e --- /dev/null +++ b/src/build.ps1 @@ -0,0 +1 @@ +cmake --build cmake-build && start ./cmake-build/PuzGameEngine.exe diff --git a/src/dependency/bgfx b/src/dependency/bgfx deleted file mode 160000 index b927871..0000000 --- a/src/dependency/bgfx +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b92787168f845aa3c90002c8145521b5bf4a4fd0 diff --git a/src/dependency/bgfx.cmake b/src/dependency/bgfx.cmake new file mode 160000 index 0000000..cf79284 --- /dev/null +++ b/src/dependency/bgfx.cmake @@ -0,0 +1 @@ +Subproject commit cf79284dad04727eb56cbdbd81e641627484fa09 diff --git a/src/dependency/bimg b/src/dependency/bimg deleted file mode 160000 index c5c7b6e..0000000 --- a/src/dependency/bimg +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c5c7b6e1874cf60caa18b643391f5122f89a4ca8 diff --git a/src/dependency/bx b/src/dependency/bx deleted file mode 160000 index 8e9a998..0000000 --- a/src/dependency/bx +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8e9a9983574171b80ae96150f32a3eef2093bb39 diff --git a/src/engine/main.cpp b/src/engine/main.cpp index ca99dc5..a672c4e 100644 --- a/src/engine/main.cpp +++ b/src/engine/main.cpp @@ -1,11 +1,115 @@ -#include +#define WIN32_LEAN_AND_MEAN +#include +#undef min +#undef max #include +#include +#include + +//#define VISUAL_STUDIO + +typedef void (*Startup)(void*); +typedef void (*Update)(); + +LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) +{ + LRESULT Res = 0; + + switch (message) + { + default: + { + Res = DefWindowProcW(hwnd, message, wparam, lparam); + break; + } + } + return Res; +} + +HWND InitWindow() +{ + uint32_t startWidth = 1920; + uint32_t startHeight = 1080; + HINSTANCE instance = (HINSTANCE)GetModuleHandle(NULL); + + WNDCLASSEXW wnd; + bx::memSet(&wnd, 0, sizeof(wnd)); + wnd.cbSize = sizeof(wnd); + wnd.style = CS_HREDRAW | CS_VREDRAW; + wnd.lpfnWndProc = WndProc; + wnd.hInstance = instance; + wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wnd.hCursor = LoadCursor(NULL, IDC_ARROW); + wnd.lpszClassName = L"EngineWin"; + wnd.hIconSm = LoadIcon(NULL, IDI_APPLICATION); + RegisterClassExW(&wnd); + + HWND window = CreateWindowExW(0, L"EngineWin", L"PuzGame", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, startWidth, startHeight, NULL, NULL, instance, 0); + if (window == NULL) + { + DWORD err = GetLastError(); + printf("Failed to create window: %#x!\n", err); + } + return window; +} int main() { - while (true) + HWND window = InitWindow(); + if (window == NULL) return 1; + + char Buf[512]; + GetCurrentDirectoryA(sizeof(Buf), Buf); + +#ifdef VISUAL_STUDIO + const char* dllPath = "Debug/PuzGame.dll"; +#else + const char* dllPath = "libPuzGame.dll"; +#endif + HMODULE gameLibModule = LoadLibraryEx(dllPath, NULL, 0); + if (gameLibModule == NULL) { - printf("a\n"); + printf("Failed to load game DLL from %s!", dllPath); + return 1; } - return 1; + +#ifdef VISUAL_STUDIO + Startup StartFunc = (Startup)GetProcAddress(gameLibModule, "?Setup@Game@@YAXPEAX@Z"); +#else + Startup StartFunc = (Startup)GetProcAddress(gameLibModule, "_ZN4Game5SetupEPv"); +#endif + if (StartFunc == NULL) + { + printf("Failed to load startup function from game DLL!\n"); + return 1; + } + +#ifdef VISUAL_STUDIO + Update UpdateFunc = (Update)GetProcAddress(gameLibModule, "?Update@Game@@YAXXZ"); +#else + Update UpdateFunc = (Update)GetProcAddress(gameLibModule, "_ZN4Game6UpdateEv"); +#endif + if (UpdateFunc == NULL) + { + printf("Failed to load update function from game DLL!\n"); + return 1; + } + + printf("Loaded Game DLL successfully!\n"); + + StartFunc(window); + bool isRunning = true; + while (isRunning) + { + MSG Message; + BOOL MessageResult = GetMessage(&Message, 0, 0, 0); + if (MessageResult > 0) + { + TranslateMessage(&Message); + DispatchMessageW(&Message); + } + // UpdateFunc(); + // Sleep(1000.0); + } + return 0; } diff --git a/src/game/Log.cpp b/src/game/Log.cpp new file mode 100644 index 0000000..a48d3a3 --- /dev/null +++ b/src/game/Log.cpp @@ -0,0 +1,10 @@ +#include "Log.h" +#include + +namespace Game +{ + void Log(const char* text) + { + printf("%s\n", text); + } +} diff --git a/src/game/Log.h b/src/game/Log.h new file mode 100644 index 0000000..96cafbe --- /dev/null +++ b/src/game/Log.h @@ -0,0 +1,6 @@ +#pragma once + +namespace Game +{ + void Log(const char* text); +} diff --git a/src/game/Setup.cpp b/src/game/Setup.cpp new file mode 100644 index 0000000..e6cf8ef --- /dev/null +++ b/src/game/Setup.cpp @@ -0,0 +1,25 @@ +#include "Setup.h" +#include "Log.h" +#include + +namespace Game +{ + void Setup(void* window) + { + Log("Setup"); + bgfx::Init init; + init.type = bgfx::RendererType::Direct3D12; + init.platformData.nwh = (void*)window; + init.platformData.ndt = nullptr; + init.platformData.type = bgfx::NativeWindowHandleType::Default; + init.resolution.width = 1920; + init.resolution.height = 1080; + init.resolution.reset = BGFX_RESET_VSYNC; + bgfx::init(init); + } + + void Update() + { + Log("Update"); + } +} diff --git a/src/game/Setup.h b/src/game/Setup.h new file mode 100644 index 0000000..420ccd6 --- /dev/null +++ b/src/game/Setup.h @@ -0,0 +1,9 @@ +#pragma once + +#define DLLEXPORT __declspec(dllexport) + +namespace Game +{ + DLLEXPORT void Setup(void* window); + DLLEXPORT void Update(); +} diff --git a/src/setup-vs.bat b/src/setup-vs.bat new file mode 100644 index 0000000..f9b7117 --- /dev/null +++ b/src/setup-vs.bat @@ -0,0 +1,4 @@ +cd dependency/bgfx.cmake +cmake -G "Visual Studio 17 2022" -S . -B cmake-build-vs -DBGFX_BUILD_TOOLS=OFF -DBGFX_BUILD_EXAMPLES=OFF +cd ..\.. +cmake -G "Visual Studio 17 2022" -S . -B cmake-build-vs -DCMAKE_EXPORT_COMPILE_COMMANDS=ON diff --git a/src/setup.bat b/src/setup.bat index 713d155..7251a3e 100644 --- a/src/setup.bat +++ b/src/setup.bat @@ -1,4 +1,4 @@ -cd dependency\bgfx -..\bx\tools\bin\windows\genie vs2022 +cd dependency/bgfx.cmake +cmake -G "Ninja" -S . -B cmake-build -DCMAKE_C_COMPILER="clang.exe" -DCMAKE_CXX_COMPILER="clang++.exe" -DBGFX_BUILD_TOOLS=OFF -DBGFX_BUILD_EXAMPLES=OFF cd ..\.. cmake -G "Ninja" -S . -B cmake-build -DCMAKE_C_COMPILER="clang.exe" -DCMAKE_CXX_COMPILER="clang++.exe" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON diff --git a/tools/remedy-session.rdbg b/tools/remedy-session.rdbg new file mode 100644 index 0000000000000000000000000000000000000000..c5b0498df1614548bfcd3a5a39cc19d756568cc3 GIT binary patch literal 232 zcmWG?adOvTU|ZMksGB7YO d@L}iyiDJc!P*HX$O(_L3kCB52Q$Pw~$^g~Q7ia(g literal 0 HcmV?d00001