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 0000000..c5b0498 Binary files /dev/null and b/tools/remedy-session.rdbg differ