Initial commit: DayZ memory C++ port with DMA backend and overlay
This commit is contained in:
Vendored
+205
@@ -0,0 +1,205 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\..\..\framework\gui.cpp" />
|
||||
<ClCompile Include="..\..\..\..\framework\helpers\draw.cpp" />
|
||||
<ClCompile Include="..\..\..\..\framework\helpers\fonts.cpp" />
|
||||
<ClCompile Include="..\..\..\..\framework\widgets\helpers.cpp" />
|
||||
<ClCompile Include="..\..\..\..\framework\widgets\notify.cpp" />
|
||||
<ClCompile Include="..\..\..\..\framework\widgets\text_field.cpp" />
|
||||
<ClCompile Include="..\..\..\..\framework\widgets\widgets.cpp" />
|
||||
<ClCompile Include="..\..\..\..\framework\widgets\window.cpp" />
|
||||
<ClCompile Include="..\..\backends\imgui_impl_dx11.cpp" />
|
||||
<ClCompile Include="..\..\backends\imgui_impl_win32.cpp" />
|
||||
<ClCompile Include="..\..\imgui.cpp" />
|
||||
<ClCompile Include="..\..\imgui_draw.cpp" />
|
||||
<ClCompile Include="..\..\imgui_freetype.cpp" />
|
||||
<ClCompile Include="..\..\imgui_tables.cpp" />
|
||||
<ClCompile Include="..\..\imgui_widgets.cpp" />
|
||||
<ClCompile Include="main.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Library Include="..\..\..\freetype\win64\freetype.lib" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\..\framework\data\fonts.h" />
|
||||
<ClInclude Include="..\..\..\..\framework\headers\draw.h" />
|
||||
<ClInclude Include="..\..\..\..\framework\headers\flags.h" />
|
||||
<ClInclude Include="..\..\..\..\framework\headers\fonts.h" />
|
||||
<ClInclude Include="..\..\..\..\framework\headers\functions.h" />
|
||||
<ClInclude Include="..\..\..\..\framework\headers\includes.h" />
|
||||
<ClInclude Include="..\..\..\..\framework\headers\widgets.h" />
|
||||
<ClInclude Include="..\..\..\..\framework\settings\colors.h" />
|
||||
<ClInclude Include="..\..\..\..\framework\settings\elements.h" />
|
||||
<ClInclude Include="..\..\..\..\framework\settings\variables.h" />
|
||||
<ClInclude Include="..\..\backends\imgui_impl_dx11.h" />
|
||||
<ClInclude Include="..\..\backends\imgui_impl_win32.h" />
|
||||
<ClInclude Include="..\..\imconfig.h" />
|
||||
<ClInclude Include="..\..\imgui.h" />
|
||||
<ClInclude Include="..\..\imgui_freetype.h" />
|
||||
<ClInclude Include="..\..\imgui_internal.h" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{9F316E83-5AE5-4939-A723-305A94F48005}</ProjectGuid>
|
||||
<RootNamespace>example_win32_directx11</RootNamespace>
|
||||
<TargetName>lumin_ui_demo</TargetName>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
<VcpkgEnabled>false</VcpkgEnabled>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<OutDir>$(ProjectDir)$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<OutDir>$(ProjectDir)$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<OutDir>$(ProjectDir)$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<OutDir>$(ProjectDir)$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir)$(Configuration)\</IntDir>
|
||||
<IncludePath>$(SolutionDir)\thirdparty\imgui;$(SolutionDir)\thirdparty\freetype\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(SolutionDir)\thirdparty\freetype\win64;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\backends;%(AdditionalIncludeDirectories);</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/utf-8 /sdl /guard:cf %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\backends;%(AdditionalIncludeDirectories);</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\backends;%(AdditionalIncludeDirectories);</AdditionalIncludeDirectories>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalOptions>/DYNAMICBASE /NXCOMPAT /guard:cf %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\backends;%(AdditionalIncludeDirectories);</AdditionalIncludeDirectories>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
<AdditionalOptions>/utf-8 /Zm1500 /sdl /guard:cf %(AdditionalOptions)</AdditionalOptions>
|
||||
<LanguageStandard>stdcpp20</LanguageStandard>
|
||||
<MultiProcessorCompilation>false</MultiProcessorCompilation>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<AdditionalOptions>/DYNAMICBASE /NXCOMPAT /guard:cf %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
+138
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="..\..\backends\imgui_impl_dx11.cpp">
|
||||
<Filter>thirdparty\imgui\impl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\backends\imgui_impl_win32.cpp">
|
||||
<Filter>thirdparty\imgui\impl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\imgui.cpp">
|
||||
<Filter>thirdparty\imgui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\imgui_draw.cpp">
|
||||
<Filter>thirdparty\imgui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\imgui_freetype.cpp">
|
||||
<Filter>thirdparty\imgui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\imgui_tables.cpp">
|
||||
<Filter>thirdparty\imgui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\imgui_widgets.cpp">
|
||||
<Filter>thirdparty\imgui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\framework\gui.cpp">
|
||||
<Filter>framework</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\framework\helpers\draw.cpp">
|
||||
<Filter>framework\helpers</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\framework\helpers\fonts.cpp">
|
||||
<Filter>framework\helpers</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\framework\widgets\helpers.cpp">
|
||||
<Filter>framework\widgets</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\framework\widgets\notify.cpp">
|
||||
<Filter>framework\widgets</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\framework\widgets\window.cpp">
|
||||
<Filter>framework\widgets</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\framework\widgets\widgets.cpp">
|
||||
<Filter>framework\widgets</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\framework\widgets\text_field.cpp">
|
||||
<Filter>framework\widgets</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="thirdparty">
|
||||
<UniqueIdentifier>{ccc54d96-72f7-4436-8a83-fa3c95630349}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="thirdparty\freetype">
|
||||
<UniqueIdentifier>{92aa3f18-0f62-4ee8-bc64-9dd79c9c15cc}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="thirdparty\imgui">
|
||||
<UniqueIdentifier>{8e6165f3-0e1c-4cfc-a3c2-72543f8ca897}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="thirdparty\imgui\impl">
|
||||
<UniqueIdentifier>{2516b7d7-b875-48cb-8877-76225056bfb1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="framework">
|
||||
<UniqueIdentifier>{f5b951e6-7363-43f2-a23d-fda1ec066176}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="framework\data">
|
||||
<UniqueIdentifier>{a7ae9947-5960-4576-bffd-459ce63ce2e3}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="framework\headers">
|
||||
<UniqueIdentifier>{3f5fea1a-9455-4e99-aadf-662fa3810326}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="framework\helpers">
|
||||
<UniqueIdentifier>{bea8460b-cb50-498c-97a6-0c3de2303e3f}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="framework\settings">
|
||||
<UniqueIdentifier>{294a9fd1-581b-4a05-a2d7-a217904f82cd}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="framework\widgets">
|
||||
<UniqueIdentifier>{5dce1686-af54-4490-b0af-91f3d85e0a73}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Library Include="..\..\..\freetype\win64\freetype.lib">
|
||||
<Filter>thirdparty\freetype</Filter>
|
||||
</Library>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\backends\imgui_impl_dx11.h">
|
||||
<Filter>thirdparty\imgui\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\backends\imgui_impl_win32.h">
|
||||
<Filter>thirdparty\imgui\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\imconfig.h">
|
||||
<Filter>thirdparty\imgui</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\imgui.h">
|
||||
<Filter>thirdparty\imgui</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\imgui_freetype.h">
|
||||
<Filter>thirdparty\imgui</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\imgui_internal.h">
|
||||
<Filter>thirdparty\imgui</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\framework\data\fonts.h">
|
||||
<Filter>framework\data</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\framework\headers\draw.h">
|
||||
<Filter>framework\headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\framework\headers\flags.h">
|
||||
<Filter>framework\headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\framework\headers\fonts.h">
|
||||
<Filter>framework\headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\framework\headers\functions.h">
|
||||
<Filter>framework\headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\framework\headers\includes.h">
|
||||
<Filter>framework\headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\framework\headers\widgets.h">
|
||||
<Filter>framework\headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\framework\settings\colors.h">
|
||||
<Filter>framework\settings</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\framework\settings\elements.h">
|
||||
<Filter>framework\settings</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\framework\settings\variables.h">
|
||||
<Filter>framework\settings</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,322 @@
|
||||
// Dear ImGui: standalone example application for DirectX 11
|
||||
|
||||
// Learn about Dear ImGui:
|
||||
// - FAQ https://dearimgui.com/faq
|
||||
// - Getting Started https://dearimgui.com/getting-started
|
||||
// - Documentation https://dearimgui.com/docs (same as your local docs/ folder).
|
||||
// - Introduction, links and more at the top of imgui.cpp
|
||||
|
||||
#include "../../framework/headers/includes.h"
|
||||
#include "../../framework/data/fonts.h"
|
||||
#include "imgui.h"
|
||||
#include "imgui_impl_win32.h"
|
||||
#include "imgui_impl_dx11.h"
|
||||
#include "imgui_freetype.h"
|
||||
#include <tchar.h>
|
||||
#include <d3d11.h>
|
||||
#include <dwmapi.h>
|
||||
#pragma comment(lib, "dwmapi.lib")
|
||||
|
||||
// Data
|
||||
static ID3D11Device* g_pd3dDevice = nullptr;
|
||||
static ID3D11DeviceContext* g_pd3dDeviceContext = nullptr;
|
||||
static IDXGISwapChain* g_pSwapChain = nullptr;
|
||||
static bool g_SwapChainOccluded = false;
|
||||
static UINT g_ResizeWidth = 0, g_ResizeHeight = 0;
|
||||
static ID3D11RenderTargetView* g_mainRenderTargetView = nullptr;
|
||||
|
||||
// Forward declarations of helper functions
|
||||
bool CreateDeviceD3D(HWND hWnd);
|
||||
void CleanupDeviceD3D();
|
||||
void CreateRenderTarget();
|
||||
void CleanupRenderTarget();
|
||||
void WarmFonts();
|
||||
void MoveHostWindowFromImGui(HWND hWnd);
|
||||
void ResizeHostWindowToGui(HWND hWnd);
|
||||
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
// Main code
|
||||
int main(int, char**)
|
||||
{
|
||||
{
|
||||
wchar_t exe_path[MAX_PATH];
|
||||
if (::GetModuleFileNameW(nullptr, exe_path, MAX_PATH))
|
||||
{
|
||||
wchar_t* last_sep = wcsrchr(exe_path, L'\\');
|
||||
if (last_sep) { *last_sep = L'\0'; ::SetCurrentDirectoryW(exe_path); }
|
||||
}
|
||||
}
|
||||
|
||||
// Create application window
|
||||
//ImGui_ImplWin32_EnableDpiAwareness();
|
||||
WNDCLASSEXW wc = { sizeof(wc), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(nullptr), nullptr, nullptr, nullptr, nullptr, L"ImGui Example", nullptr };
|
||||
::RegisterClassExW(&wc);
|
||||
const int window_width = 570;
|
||||
const int window_height = 354;
|
||||
const int window_x = (::GetSystemMetrics(SM_CXSCREEN) - window_width) / 2;
|
||||
const int window_y = (::GetSystemMetrics(SM_CYSCREEN) - window_height) / 2;
|
||||
HWND hwnd = ::CreateWindowExW(WS_EX_LAYERED, wc.lpszClassName, L"Lumin UI Demo", WS_POPUP, window_x, window_y, window_width, window_height, nullptr, nullptr, wc.hInstance, nullptr);
|
||||
|
||||
::SetLayeredWindowAttributes(hwnd, RGB(0, 0, 0), 255, LWA_ALPHA);
|
||||
MARGINS margins = { -1 };
|
||||
::DwmExtendFrameIntoClientArea(hwnd, &margins);
|
||||
|
||||
// Initialize Direct3D
|
||||
if (!CreateDeviceD3D(hwnd))
|
||||
{
|
||||
CleanupDeviceD3D();
|
||||
::UnregisterClassW(wc.lpszClassName, wc.hInstance);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Show the window
|
||||
::ShowWindow(hwnd, SW_SHOWDEFAULT);
|
||||
::UpdateWindow(hwnd);
|
||||
|
||||
// Setup Dear ImGui context
|
||||
IMGUI_CHECKVERSION();
|
||||
ImGui::CreateContext();
|
||||
ImGuiIO& io = ImGui::GetIO(); (void)io;
|
||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls
|
||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls
|
||||
|
||||
// Setup Dear ImGui style
|
||||
ImGui::StyleColorsDark();
|
||||
//ImGui::StyleColorsLight();
|
||||
|
||||
// Setup Platform/Renderer backends
|
||||
ImGui_ImplWin32_Init(hwnd);
|
||||
ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);
|
||||
WarmFonts();
|
||||
font->update();
|
||||
|
||||
// Load Fonts
|
||||
|
||||
// Main loop
|
||||
bool done = false;
|
||||
while (!done)
|
||||
{
|
||||
// Poll and handle messages (inputs, window resize, etc.)
|
||||
// See the WndProc() function below for our to dispatch events to the Win32 backend.
|
||||
MSG msg;
|
||||
while (::PeekMessage(&msg, nullptr, 0U, 0U, PM_REMOVE))
|
||||
{
|
||||
::TranslateMessage(&msg);
|
||||
::DispatchMessage(&msg);
|
||||
if (msg.message == WM_QUIT)
|
||||
done = true;
|
||||
}
|
||||
if (done)
|
||||
break;
|
||||
|
||||
// Handle window being minimized or screen locked
|
||||
if (g_SwapChainOccluded && g_pSwapChain->Present(0, DXGI_PRESENT_TEST) == DXGI_STATUS_OCCLUDED)
|
||||
{
|
||||
::Sleep(10);
|
||||
continue;
|
||||
}
|
||||
g_SwapChainOccluded = false;
|
||||
|
||||
// Handle window resize (we don't resize directly in the WM_SIZE handler)
|
||||
if (g_ResizeWidth != 0 && g_ResizeHeight != 0)
|
||||
{
|
||||
CleanupRenderTarget();
|
||||
g_pSwapChain->ResizeBuffers(0, g_ResizeWidth, g_ResizeHeight, DXGI_FORMAT_UNKNOWN, 0);
|
||||
g_ResizeWidth = g_ResizeHeight = 0;
|
||||
CreateRenderTarget();
|
||||
}
|
||||
|
||||
font->update();
|
||||
|
||||
// Start the Dear ImGui frame
|
||||
ImGui_ImplDX11_NewFrame();
|
||||
ImGui_ImplWin32_NewFrame();
|
||||
ImGui::NewFrame();
|
||||
|
||||
gui->render();
|
||||
MoveHostWindowFromImGui(hwnd);
|
||||
ResizeHostWindowToGui(hwnd);
|
||||
|
||||
// Rendering
|
||||
ImGui::Render();
|
||||
const float clear_color_with_alpha[4] = { 0.f, 0.f, 0.f, 0.f };
|
||||
g_pd3dDeviceContext->OMSetRenderTargets(1, &g_mainRenderTargetView, nullptr);
|
||||
g_pd3dDeviceContext->ClearRenderTargetView(g_mainRenderTargetView, clear_color_with_alpha);
|
||||
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
|
||||
|
||||
// Present
|
||||
HRESULT hr = g_pSwapChain->Present(1, 0); // Present with vsync
|
||||
//HRESULT hr = g_pSwapChain->Present(0, 0); // Present without vsync
|
||||
g_SwapChainOccluded = (hr == DXGI_STATUS_OCCLUDED);
|
||||
}
|
||||
|
||||
// Cleanup
|
||||
ImGui_ImplDX11_Shutdown();
|
||||
ImGui_ImplWin32_Shutdown();
|
||||
ImGui::DestroyContext();
|
||||
|
||||
CleanupDeviceD3D();
|
||||
::DestroyWindow(hwnd);
|
||||
::UnregisterClassW(wc.lpszClassName, wc.hInstance);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Helper functions
|
||||
|
||||
bool CreateDeviceD3D(HWND hWnd)
|
||||
{
|
||||
// Setup swap chain
|
||||
DXGI_SWAP_CHAIN_DESC sd;
|
||||
ZeroMemory(&sd, sizeof(sd));
|
||||
sd.BufferCount = 2;
|
||||
sd.BufferDesc.Width = 0;
|
||||
sd.BufferDesc.Height = 0;
|
||||
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
sd.BufferDesc.RefreshRate.Numerator = 60;
|
||||
sd.BufferDesc.RefreshRate.Denominator = 1;
|
||||
sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
|
||||
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
|
||||
sd.OutputWindow = hWnd;
|
||||
sd.SampleDesc.Count = 1;
|
||||
sd.SampleDesc.Quality = 0;
|
||||
sd.Windowed = TRUE;
|
||||
sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
|
||||
|
||||
UINT createDeviceFlags = 0;
|
||||
//createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
|
||||
D3D_FEATURE_LEVEL featureLevel;
|
||||
const D3D_FEATURE_LEVEL featureLevelArray[2] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_0, };
|
||||
HRESULT res = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, createDeviceFlags, featureLevelArray, 2, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &featureLevel, &g_pd3dDeviceContext);
|
||||
if (res == DXGI_ERROR_UNSUPPORTED) // Try high-performance WARP software driver if hardware is not available.
|
||||
res = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_WARP, nullptr, createDeviceFlags, featureLevelArray, 2, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &featureLevel, &g_pd3dDeviceContext);
|
||||
if (res != S_OK)
|
||||
return false;
|
||||
|
||||
CreateRenderTarget();
|
||||
return true;
|
||||
}
|
||||
|
||||
void CleanupDeviceD3D()
|
||||
{
|
||||
CleanupRenderTarget();
|
||||
if (g_pSwapChain) { g_pSwapChain->Release(); g_pSwapChain = nullptr; }
|
||||
if (g_pd3dDeviceContext) { g_pd3dDeviceContext->Release(); g_pd3dDeviceContext = nullptr; }
|
||||
if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = nullptr; }
|
||||
}
|
||||
|
||||
void CreateRenderTarget()
|
||||
{
|
||||
ID3D11Texture2D* pBackBuffer;
|
||||
g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer));
|
||||
g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &g_mainRenderTargetView);
|
||||
pBackBuffer->Release();
|
||||
}
|
||||
|
||||
void CleanupRenderTarget()
|
||||
{
|
||||
if (g_mainRenderTargetView) { g_mainRenderTargetView->Release(); g_mainRenderTargetView = nullptr; }
|
||||
}
|
||||
|
||||
void WarmFonts()
|
||||
{
|
||||
font->get(inter_medium, 10);
|
||||
font->get(inter_medium, 11);
|
||||
font->get(inter_semibold, 10);
|
||||
font->get(inter_semibold, 11);
|
||||
font->get(inter_semibold, 12);
|
||||
font->get(inter_semibold, 13);
|
||||
font->get(inter_semibold, 16);
|
||||
font->get(inter_semibold, 18);
|
||||
font->get(inter_semibold, 40);
|
||||
font->get(icon_font, 14);
|
||||
font->get(icon_font, 15);
|
||||
font->get_file(flaticon_uicons_regular_rounded_path, 10.5f, true);
|
||||
font->get_file(flaticon_uicons_regular_rounded_path, 13.5f, true);
|
||||
font->get_file("C:\\Windows\\Fonts\\segmdl2.ttf", 11.f, true);
|
||||
}
|
||||
|
||||
void MoveHostWindowFromImGui(HWND hWnd)
|
||||
{
|
||||
static bool dragging = false;
|
||||
static POINT drag_start_cursor = {};
|
||||
static RECT drag_start_rect = {};
|
||||
|
||||
const bool can_start_drag = ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow) && !ImGui::IsAnyItemHovered() && !ImGui::IsAnyItemActive();
|
||||
|
||||
if (can_start_drag && ImGui::IsMouseClicked(ImGuiMouseButton_Left))
|
||||
{
|
||||
dragging = true;
|
||||
::GetCursorPos(&drag_start_cursor);
|
||||
::GetWindowRect(hWnd, &drag_start_rect);
|
||||
}
|
||||
|
||||
if (!ImGui::IsMouseDown(ImGuiMouseButton_Left))
|
||||
dragging = false;
|
||||
|
||||
if (!dragging)
|
||||
return;
|
||||
|
||||
POINT cursor = {};
|
||||
::GetCursorPos(&cursor);
|
||||
|
||||
const int next_x = drag_start_rect.left + (cursor.x - drag_start_cursor.x);
|
||||
const int next_y = drag_start_rect.top + (cursor.y - drag_start_cursor.y);
|
||||
|
||||
::SetWindowPos(hWnd, nullptr, next_x, next_y, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
}
|
||||
|
||||
void ResizeHostWindowToGui(HWND hWnd)
|
||||
{
|
||||
const int width = elements->window.size.x > 1.f ? static_cast<int>(elements->window.size.x + 0.5f) : 1;
|
||||
const int height = elements->window.size.y > 1.f ? static_cast<int>(elements->window.size.y + 0.5f) : 1;
|
||||
|
||||
RECT client_rect;
|
||||
::GetClientRect(hWnd, &client_rect);
|
||||
const int current_width = client_rect.right - client_rect.left;
|
||||
const int current_height = client_rect.bottom - client_rect.top;
|
||||
|
||||
if (current_width == width && current_height == height)
|
||||
return;
|
||||
|
||||
::SetWindowPos(hWnd, nullptr, 0, 0, width, height, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
}
|
||||
|
||||
// Forward declare message handler from imgui_impl_win32.cpp
|
||||
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
// Win32 message handler
|
||||
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
|
||||
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application, or clear/overwrite your copy of the mouse data.
|
||||
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application, or clear/overwrite your copy of the keyboard data.
|
||||
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
|
||||
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
|
||||
return true;
|
||||
|
||||
switch (msg)
|
||||
{
|
||||
case WM_SIZE:
|
||||
if (wParam == SIZE_MINIMIZED)
|
||||
return 0;
|
||||
g_ResizeWidth = (UINT)LOWORD(lParam); // Queue resize
|
||||
g_ResizeHeight = (UINT)HIWORD(lParam);
|
||||
return 0;
|
||||
case WM_SYSCOMMAND:
|
||||
if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu
|
||||
return 0;
|
||||
break;
|
||||
case WM_KEYDOWN:
|
||||
if (wParam == VK_ESCAPE)
|
||||
{
|
||||
::PostMessageW(hWnd, WM_CLOSE, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
::PostQuitMessage(0);
|
||||
return 0;
|
||||
}
|
||||
return ::DefWindowProcW(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
Reference in New Issue
Block a user