Merge ImGui WndProc with our os_create_window
This commit is contained in:
parent
ce00bc4e4d
commit
652cd2faac
@ -8,7 +8,7 @@ if "%~1"=="" (
|
|||||||
|
|
||||||
set CONFIG=%~1
|
set CONFIG=%~1
|
||||||
|
|
||||||
if /I "%CONFIG%"=="Debug" (
|
if /I "%CONFIG%"=="Debug" ( rem /Z7 embeds debug info into PDB so we don't need to pass /Fd to cl
|
||||||
set CFLAGS=/MTd /Od /Z7 /DDEBUG /DEBUG -diagnostics:caret -diagnostics:column -D_CRT_SECURE_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING -D_CRT_NONSTDC_NO_DEPRECATE -D_USE_MATH_DEFINES
|
set CFLAGS=/MTd /Od /Z7 /DDEBUG /DEBUG -diagnostics:caret -diagnostics:column -D_CRT_SECURE_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING -D_CRT_NONSTDC_NO_DEPRECATE -D_USE_MATH_DEFINES
|
||||||
set LIB_PATH=bin/Debug
|
set LIB_PATH=bin/Debug
|
||||||
) else if /I "%CONFIG%"=="Release" (
|
) else if /I "%CONFIG%"=="Release" (
|
||||||
@ -41,7 +41,7 @@ set INCLUDE_DIRS=^
|
|||||||
|
|
||||||
set LINK_LIBS=
|
set LINK_LIBS=
|
||||||
|
|
||||||
REM Build STATIC LIBRARY:
|
REM Build STATIC LIBRARY: rem /Fd%LIB_PATH%/%LIB_NAME%.pdb can be passed to cl if compiling with /Zi
|
||||||
echo Building static LIB (%CONFIG%)
|
echo Building static LIB (%CONFIG%)
|
||||||
cl /nologo /EHsc /DWIN32 /wd4530 %CFLAGS% %INCLUDE_DIRS% %SRC_FILES% /c /Fo%OBJDIR%\
|
cl /nologo /EHsc /DWIN32 /wd4530 %CFLAGS% %INCLUDE_DIRS% %SRC_FILES% /c /Fo%OBJDIR%\
|
||||||
lib /OUT:%LIB_PATH%\%LIB_NAME%.lib %OBJDIR%\*.obj %LINK_LIBS%
|
lib /OUT:%LIB_PATH%\%LIB_NAME%.lib %OBJDIR%\*.obj %LINK_LIBS%
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
#include "lib_main.cpp"
|
#include "lib_main.cpp"
|
||||||
|
|
||||||
#define BASE_RUN_TESTS 1
|
#define BASE_RUN_TESTS 0
|
||||||
#if BASE_RUN_TESTS
|
#if BASE_RUN_TESTS
|
||||||
#include "lib/Base/run_tests.cpp"
|
#include "lib/Base/run_tests.cpp"
|
||||||
#endif
|
#endif
|
||||||
@ -8,12 +8,15 @@
|
|||||||
#define USE_DEAR_IMGUI 1
|
#define USE_DEAR_IMGUI 1
|
||||||
#if USE_DEAR_IMGUI
|
#if USE_DEAR_IMGUI
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <d3d11.h>
|
||||||
#pragma comment(lib, "d3d11.lib")
|
#pragma comment(lib, "d3d11.lib")
|
||||||
#pragma comment(lib, "dxgi.lib")
|
#pragma comment(lib, "dxgi.lib")
|
||||||
|
|
||||||
#include "lib/third_party/dear-imgui/imgui.h"
|
#include "lib/third_party/dear-imgui/imgui.h"
|
||||||
#include "lib/third_party/dear-imgui/imgui_impl_win32.h"
|
#include "lib/third_party/dear-imgui/imgui_impl_win32.h"
|
||||||
#include "lib/third_party/dear-imgui/imgui_impl_dx11.h"
|
#include "lib/third_party/dear-imgui/imgui_impl_dx11.h"
|
||||||
|
#include "src/ImGui_Supplementary.cpp"
|
||||||
|
|
||||||
#include "src/imgui_main.cpp"
|
#include "src/imgui_main.cpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
BIN
extras/fonts/RobotoMono-Regular.ttf
Normal file
BIN
extras/fonts/RobotoMono-Regular.ttf
Normal file
Binary file not shown.
@ -251,6 +251,19 @@ struct Vec4 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename T> T clamp (T v, T min, T max) {
|
||||||
|
// T must be a scalar type:
|
||||||
|
auto x = v;
|
||||||
|
if (x < min) {
|
||||||
|
x = min;
|
||||||
|
}
|
||||||
|
if (x > max) {
|
||||||
|
x = max;
|
||||||
|
}
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
// #thread_primitives #move?
|
// #thread_primitives #move?
|
||||||
#if OS_WINDOWS
|
#if OS_WINDOWS
|
||||||
struct Condition_Variable {
|
struct Condition_Variable {
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
void run_pre_setup_tests() {
|
void run_pre_setup_tests() {
|
||||||
|
// #no_context: context will not be initialized at this point.
|
||||||
printf("Running pre-setup tests...\n");
|
printf("Running pre-setup tests...\n");
|
||||||
printf("\nFinished running pre-setup tests...\n");
|
printf("\nFinished running pre-setup tests...\n");
|
||||||
}
|
}
|
||||||
@ -48,7 +49,6 @@ void run_post_setup_tests() {
|
|||||||
log("file_data: \n");
|
log("file_data: \n");
|
||||||
log("%s\n", file_data.data);
|
log("%s\n", file_data.data);
|
||||||
}
|
}
|
||||||
// ImGui_Application();
|
|
||||||
{ // Test hashing:
|
{ // Test hashing:
|
||||||
u64 start = 0x512585;
|
u64 start = 0x512585;
|
||||||
u32 sdbm = sdbm_hash(&start, sizeof(u64));
|
u32 sdbm = sdbm_hash(&start, sizeof(u64));
|
||||||
|
|||||||
@ -627,16 +627,20 @@ Window_Dimensions platform_get_centered_window_dimensions (bool open_on_largest_
|
|||||||
|
|
||||||
// #window_creation -> put API in OS_Win32.h
|
// #window_creation -> put API in OS_Win32.h
|
||||||
// Instead of returning WindowType, return the handle + other information.
|
// Instead of returning WindowType, return the handle + other information.
|
||||||
bool os_create_window (string new_window_name, Window_Type parent, bool center_window, bool open_on_largest_monitor, bool display_window) {
|
bool os_create_window (string new_window_name, Window_Type parent, bool center_window, bool open_on_largest_monitor, bool display_window, void* wnd_proc_override) {
|
||||||
local_persist string class_name = "Win32_Window_Class";
|
local_persist string class_name = "Win32_Window_Class";
|
||||||
|
|
||||||
|
WNDCLASSEXW wc = {};
|
||||||
if (!global_win32_state.process_info.window_class_initialized) {
|
if (!global_win32_state.process_info.window_class_initialized) {
|
||||||
global_win32_state.process_info.window_class_initialized = true;
|
global_win32_state.process_info.window_class_initialized = true;
|
||||||
|
|
||||||
WNDCLASSEXW wc = {};
|
|
||||||
wc.cbSize = sizeof(WNDCLASSEXW);
|
wc.cbSize = sizeof(WNDCLASSEXW);
|
||||||
wc.style = CS_HREDRAW | CS_VREDRAW;
|
wc.style = CS_HREDRAW | CS_VREDRAW;
|
||||||
wc.lpfnWndProc = win32_wnd_proc;
|
if (!wnd_proc_override) {
|
||||||
|
wc.lpfnWndProc = win32_wnd_proc;
|
||||||
|
} else {
|
||||||
|
wc.lpfnWndProc = (WNDPROC)wnd_proc_override;
|
||||||
|
}
|
||||||
wc.cbClsExtra = 0;
|
wc.cbClsExtra = 0;
|
||||||
wc.cbWndExtra = 0;
|
wc.cbWndExtra = 0;
|
||||||
wc.hInstance = nullptr;
|
wc.hInstance = nullptr;
|
||||||
@ -662,7 +666,7 @@ bool os_create_window (string new_window_name, Window_Type parent, bool center_w
|
|||||||
|
|
||||||
HWND hwnd = CreateWindowExW(
|
HWND hwnd = CreateWindowExW(
|
||||||
WS_EX_APPWINDOW,
|
WS_EX_APPWINDOW,
|
||||||
(LPCWSTR)utf8_to_wide(class_name).data,
|
wc.lpszClassName,
|
||||||
(LPCWSTR)utf8_to_wide(new_window_name).data,
|
(LPCWSTR)utf8_to_wide(new_window_name).data,
|
||||||
WS_OVERLAPPEDWINDOW,
|
WS_OVERLAPPEDWINDOW,
|
||||||
wd.window_x, wd.window_y, wd.window_width, wd.window_height,
|
wd.window_x, wd.window_y, wd.window_width, wd.window_height,
|
||||||
@ -707,6 +711,18 @@ Window_Info get_main_window () {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Window_Info* get_main_window_pointer () {
|
||||||
|
s64 window_count = global_win32_state.process_info.windows.count;
|
||||||
|
|
||||||
|
for (s64 i = 0; i < window_count; i += 1) {
|
||||||
|
if (global_win32_state.process_info.windows[i].is_main_window) {
|
||||||
|
return &global_win32_state.process_info.windows[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
bool get_window_dimensions(Window_Info* info, s32* width, s32* height) {
|
bool get_window_dimensions(Window_Info* info, s32* width, s32* height) {
|
||||||
if (info == nullptr || width == nullptr || height == nullptr) return false;
|
if (info == nullptr || width == nullptr || height == nullptr) return false;
|
||||||
Assert(width && height);
|
Assert(width && height);
|
||||||
|
|||||||
@ -80,7 +80,7 @@ struct Monitor {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
bool os_create_window (string new_window_name, Window_Type parent=nullptr, bool center_window=true, bool open_on_largest_monitor=true, bool display_window=true);
|
bool os_create_window (string new_window_name, Window_Type parent=nullptr, bool center_window=true, bool open_on_largest_monitor=true, bool display_window=true, void* wnd_proc_override=nullptr);
|
||||||
|
|
||||||
Window_Info get_main_window ();
|
Window_Info get_main_window ();
|
||||||
Window_Info* get_main_window_pointer ();
|
Window_Info* get_main_window_pointer ();
|
||||||
|
|||||||
@ -18,16 +18,18 @@ internal void Main_Entry_Point (int argc, WCHAR **argv);
|
|||||||
|
|
||||||
internal void Main_Entry_Point (int argc, WCHAR **argv) {
|
internal void Main_Entry_Point (int argc, WCHAR **argv) {
|
||||||
set_cpu_base_frequency(3200); // REQUIRED FOR TIMING MODULE! will depend on CPU
|
set_cpu_base_frequency(3200); // REQUIRED FOR TIMING MODULE! will depend on CPU
|
||||||
ImGui_Application();
|
|
||||||
/*
|
|
||||||
#if BASE_RUN_TESTS
|
#if BASE_RUN_TESTS
|
||||||
run_pre_setup_tests(); // #no_context
|
run_pre_setup_tests(); // #no_context: context will not be initialized at this point.
|
||||||
#endif
|
#endif
|
||||||
// #NOTE: Be careful using a timing or auto-release macros
|
// #NOTE: Be careful using a timing or auto-release macros
|
||||||
// before setting up the thread context!
|
// before setting up the thread context!
|
||||||
Bootstrap_Main_Thread_Context();
|
Bootstrap_Main_Thread_Context();
|
||||||
#if OS_WINDOWS
|
#if OS_WINDOWS
|
||||||
Win32_Entry_Point(argc, argv);
|
Win32_Entry_Point(argc, argv);
|
||||||
|
Win32_Initialize_Ex();
|
||||||
|
// #TODO: Initialize global hotkeys
|
||||||
|
ImGui_Application_Win32();
|
||||||
#endif
|
#endif
|
||||||
#if OS_LINUX
|
#if OS_LINUX
|
||||||
// Linux_Entry_Point(argc, argv);
|
// Linux_Entry_Point(argc, argv);
|
||||||
@ -35,12 +37,7 @@ internal void Main_Entry_Point (int argc, WCHAR **argv) {
|
|||||||
#if BASE_RUN_TESTS
|
#if BASE_RUN_TESTS
|
||||||
run_post_setup_tests();
|
run_post_setup_tests();
|
||||||
#endif
|
#endif
|
||||||
|
/* Alternative if we're using OpenGL.
|
||||||
// 2. Create Window
|
|
||||||
bool success = os_create_window("App Main Window", nullptr, true, true);
|
|
||||||
Assert(success);
|
|
||||||
|
|
||||||
Window_Info main_window = get_main_window();
|
|
||||||
s32 window_width; s32 window_height;
|
s32 window_width; s32 window_height;
|
||||||
success = get_window_dimensions(&main_window, &window_width, &window_height);
|
success = get_window_dimensions(&main_window, &window_width, &window_height);
|
||||||
Assert(success);
|
Assert(success);
|
||||||
|
|||||||
@ -11,7 +11,7 @@ bool CreateDeviceD3D(HWND hWnd);
|
|||||||
void CleanupDeviceD3D();
|
void CleanupDeviceD3D();
|
||||||
void CreateRenderTarget();
|
void CreateRenderTarget();
|
||||||
void CleanupRenderTarget();
|
void CleanupRenderTarget();
|
||||||
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
LRESULT WINAPI ImGui_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
// Helper functions
|
// Helper functions
|
||||||
bool CreateDeviceD3D(HWND hWnd) {
|
bool CreateDeviceD3D(HWND hWnd) {
|
||||||
@ -82,7 +82,7 @@ extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg
|
|||||||
// - 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.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.
|
// - 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.
|
// 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) {
|
LRESULT WINAPI ImGui_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
||||||
if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
|
if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -108,76 +108,160 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
|||||||
#include "../lib/third_party/dear-imgui/imgui_internal.h"
|
#include "../lib/third_party/dear-imgui/imgui_internal.h"
|
||||||
|
|
||||||
void Set_Custom_Style () {
|
void Set_Custom_Style () {
|
||||||
ImGuiStyle* style = &ImGui::GetStyle();
|
ImGuiStyle* style = &ImGui::GetStyle();
|
||||||
ImVec4* colors = style->Colors;
|
ImVec4* colors = style->Colors;
|
||||||
|
|
||||||
style->Alpha = 1.0;
|
style->Alpha = 1.0;
|
||||||
style->WindowRounding = 3.0f;
|
style->WindowRounding = 3.0f;
|
||||||
style->GrabRounding = 3.0f;
|
style->GrabRounding = 3.0f;
|
||||||
style->GrabMinSize = 20.0f;
|
style->GrabMinSize = 20.0f;
|
||||||
style->FrameRounding = 8.0f;
|
style->FrameRounding = 8.0f;
|
||||||
style->TabRounding = 8.0f;
|
style->TabRounding = 8.0f;
|
||||||
|
|
||||||
colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
|
colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
|
||||||
colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
|
colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
|
||||||
colors[ImGuiCol_WindowBg] = ImVec4(0.06f, 0.06f, 0.06f, 0.94f);
|
colors[ImGuiCol_WindowBg] = ImVec4(0.06f, 0.06f, 0.06f, 0.94f);
|
||||||
colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
||||||
colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);
|
colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);
|
||||||
colors[ImGuiCol_Border] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);
|
colors[ImGuiCol_Border] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);
|
||||||
colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
||||||
colors[ImGuiCol_FrameBg] = ImVec4(0.16f, 0.29f, 0.48f, 0.54f);
|
colors[ImGuiCol_FrameBg] = ImVec4(0.16f, 0.29f, 0.48f, 0.54f);
|
||||||
colors[ImGuiCol_FrameBgHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
|
colors[ImGuiCol_FrameBgHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
|
||||||
colors[ImGuiCol_FrameBgActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
|
colors[ImGuiCol_FrameBgActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
|
||||||
colors[ImGuiCol_TitleBg] = ImVec4(0.04f, 0.04f, 0.04f, 1.00f);
|
colors[ImGuiCol_TitleBg] = ImVec4(0.04f, 0.04f, 0.04f, 1.00f);
|
||||||
colors[ImGuiCol_TitleBgActive] = ImVec4(0.16f, 0.29f, 0.48f, 1.00f);
|
colors[ImGuiCol_TitleBgActive] = ImVec4(0.16f, 0.29f, 0.48f, 1.00f);
|
||||||
colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f);
|
colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f);
|
||||||
colors[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f);
|
colors[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f);
|
||||||
colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.53f);
|
colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.53f);
|
||||||
colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f);
|
colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f);
|
||||||
colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.41f, 0.41f, 0.41f, 1.00f);
|
colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.41f, 0.41f, 0.41f, 1.00f);
|
||||||
colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.51f, 0.51f, 0.51f, 1.00f);
|
colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.51f, 0.51f, 0.51f, 1.00f);
|
||||||
colors[ImGuiCol_CheckMark] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
colors[ImGuiCol_CheckMark] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
||||||
colors[ImGuiCol_SliderGrab] = ImVec4(0.24f, 0.52f, 0.88f, 1.00f);
|
colors[ImGuiCol_SliderGrab] = ImVec4(0.24f, 0.52f, 0.88f, 1.00f);
|
||||||
colors[ImGuiCol_SliderGrabActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
colors[ImGuiCol_SliderGrabActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
||||||
colors[ImGuiCol_Button] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
|
colors[ImGuiCol_Button] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
|
||||||
colors[ImGuiCol_ButtonHovered] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
colors[ImGuiCol_ButtonHovered] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
||||||
colors[ImGuiCol_ButtonActive] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
|
colors[ImGuiCol_ButtonActive] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
|
||||||
colors[ImGuiCol_Header] = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
|
colors[ImGuiCol_Header] = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
|
||||||
colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
|
colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
|
||||||
colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
||||||
colors[ImGuiCol_Separator] = colors[ImGuiCol_Border];
|
colors[ImGuiCol_Separator] = colors[ImGuiCol_Border];
|
||||||
colors[ImGuiCol_SeparatorHovered] = ImVec4(0.10f, 0.40f, 0.75f, 0.78f);
|
colors[ImGuiCol_SeparatorHovered] = ImVec4(0.10f, 0.40f, 0.75f, 0.78f);
|
||||||
colors[ImGuiCol_SeparatorActive] = ImVec4(0.10f, 0.40f, 0.75f, 1.00f);
|
colors[ImGuiCol_SeparatorActive] = ImVec4(0.10f, 0.40f, 0.75f, 1.00f);
|
||||||
colors[ImGuiCol_ResizeGrip] = ImVec4(0.26f, 0.59f, 0.98f, 0.20f);
|
colors[ImGuiCol_ResizeGrip] = ImVec4(0.26f, 0.59f, 0.98f, 0.20f);
|
||||||
colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
|
colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
|
||||||
colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
|
colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
|
||||||
colors[ImGuiCol_InputTextCursor] = colors[ImGuiCol_Text];
|
colors[ImGuiCol_InputTextCursor] = colors[ImGuiCol_Text];
|
||||||
colors[ImGuiCol_TabHovered] = colors[ImGuiCol_HeaderHovered];
|
colors[ImGuiCol_TabHovered] = colors[ImGuiCol_HeaderHovered];
|
||||||
colors[ImGuiCol_Tab] = ImLerp(colors[ImGuiCol_Header], colors[ImGuiCol_TitleBgActive], 0.80f);
|
colors[ImGuiCol_Tab] = ImLerp(colors[ImGuiCol_Header], colors[ImGuiCol_TitleBgActive], 0.80f);
|
||||||
colors[ImGuiCol_TabSelected] = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
|
colors[ImGuiCol_TabSelected] = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
|
||||||
colors[ImGuiCol_TabSelectedOverline] = colors[ImGuiCol_HeaderActive];
|
colors[ImGuiCol_TabSelectedOverline] = colors[ImGuiCol_HeaderActive];
|
||||||
colors[ImGuiCol_TabDimmed] = ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f);
|
colors[ImGuiCol_TabDimmed] = ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f);
|
||||||
colors[ImGuiCol_TabDimmedSelected] = ImLerp(colors[ImGuiCol_TabSelected], colors[ImGuiCol_TitleBg], 0.40f);
|
colors[ImGuiCol_TabDimmedSelected] = ImLerp(colors[ImGuiCol_TabSelected], colors[ImGuiCol_TitleBg], 0.40f);
|
||||||
colors[ImGuiCol_TabDimmedSelectedOverline] = ImVec4(0.50f, 0.50f, 0.50f, 0.00f);
|
colors[ImGuiCol_TabDimmedSelectedOverline] = ImVec4(0.50f, 0.50f, 0.50f, 0.00f);
|
||||||
colors[ImGuiCol_DockingPreview] = ImVec4(0.26f, 0.59f, 0.98f, 0.75f); //colors[ImGuiCol_HeaderActive] * ImVec4(1.0f, 1.0f, 1.0f, 0.7f);
|
colors[ImGuiCol_DockingPreview] = ImVec4(0.26f, 0.59f, 0.98f, 0.75f); //colors[ImGuiCol_HeaderActive] * ImVec4(1.0f, 1.0f, 1.0f, 0.7f);
|
||||||
colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.20f, 0.20f, 0.20f, 1.00f);
|
colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.20f, 0.20f, 0.20f, 1.00f);
|
||||||
colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f);
|
colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f);
|
||||||
colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
|
colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
|
||||||
colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
|
colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
|
||||||
colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
|
colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
|
||||||
colors[ImGuiCol_TableHeaderBg] = ImVec4(0.19f, 0.19f, 0.20f, 1.00f);
|
colors[ImGuiCol_TableHeaderBg] = ImVec4(0.19f, 0.19f, 0.20f, 1.00f);
|
||||||
colors[ImGuiCol_TableBorderStrong] = ImVec4(0.31f, 0.31f, 0.35f, 1.00f); // Prefer using Alpha=1.0 here
|
colors[ImGuiCol_TableBorderStrong] = ImVec4(0.31f, 0.31f, 0.35f, 1.00f); // Prefer using Alpha=1.0 here
|
||||||
colors[ImGuiCol_TableBorderLight] = ImVec4(0.23f, 0.23f, 0.25f, 1.00f); // Prefer using Alpha=1.0 here
|
colors[ImGuiCol_TableBorderLight] = ImVec4(0.23f, 0.23f, 0.25f, 1.00f); // Prefer using Alpha=1.0 here
|
||||||
colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
||||||
colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.06f);
|
colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.06f);
|
||||||
colors[ImGuiCol_TextLink] = colors[ImGuiCol_HeaderActive];
|
colors[ImGuiCol_TextLink] = colors[ImGuiCol_HeaderActive];
|
||||||
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
|
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
|
||||||
colors[ImGuiCol_TreeLines] = colors[ImGuiCol_Border];
|
colors[ImGuiCol_TreeLines] = colors[ImGuiCol_Border];
|
||||||
colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
|
colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
|
||||||
colors[ImGuiCol_DragDropTargetBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
colors[ImGuiCol_DragDropTargetBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
||||||
colors[ImGuiCol_UnsavedMarker] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
|
colors[ImGuiCol_UnsavedMarker] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
|
||||||
colors[ImGuiCol_NavCursor] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
colors[ImGuiCol_NavCursor] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
|
||||||
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
|
colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
|
||||||
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
|
colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
|
||||||
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);
|
colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ImGui_Font_Size_Pair {
|
||||||
|
f32 font_size;
|
||||||
|
ImFont* data;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ImGui_Font_Info {
|
||||||
|
string font_name;
|
||||||
|
Array<ImGui_Font_Size_Pair> sizes;
|
||||||
|
s64 current_size = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
// We can make a more complicated structure here with a Map<string, Font_Info>
|
||||||
|
// but we only have one font at this point, so it's redundant
|
||||||
|
global ImGuiContext* imgui_context;
|
||||||
|
global f32 imgui_font_sizes[6] = {18, 24, 30, 36, 42, 48};
|
||||||
|
global ImGui_Font_Info imgui_default_font;
|
||||||
|
|
||||||
|
bool ImGui_Default_Font_Loaded () {
|
||||||
|
return imgui_default_font.sizes.count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
f32 ImGui_Default_Font_Current_Size () {
|
||||||
|
return imgui_default_font.sizes[imgui_default_font.current_size].font_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui_Push_Default_Font () {
|
||||||
|
// #TODO: Replace these asserts so it just returns if not present!
|
||||||
|
// And just warn in the UI that a font is missing.
|
||||||
|
Assert(imgui_default_font.sizes.count > 0);
|
||||||
|
Assert(imgui_default_font.current_size >= 0 && imgui_default_font.current_size < imgui_default_font.sizes.count);
|
||||||
|
if (ImGui_Default_Font_Loaded()) {
|
||||||
|
ImFont* font_data = imgui_default_font.sizes[imgui_default_font.current_size].data;
|
||||||
|
f32 unscaled_font_size = imgui_default_font.sizes[imgui_default_font.current_size].font_size;
|
||||||
|
ImGui::PushFont(font_data, unscaled_font_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui_Pop_Default_Font () {
|
||||||
|
// This will break if we load font mid-frame! don't do this.
|
||||||
|
if (ImGui_Default_Font_Loaded()) {
|
||||||
|
ImGui::PopFont();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#define imgui_push_default_font_index(x) \
|
||||||
|
ImGui_Font_Size Concat(_auto_push_font_, __LINE__)(x)
|
||||||
|
|
||||||
|
struct ImGui_Font_Size {
|
||||||
|
ImGui_Font_Size (s64 size_index) {
|
||||||
|
s64 size_target = clamp<s64>(size_index, 0, 5);
|
||||||
|
ImFont* font_data = imgui_default_font.sizes[size_target].data;
|
||||||
|
f32 unscaled_font_size = imgui_default_font.sizes[size_target].font_size;
|
||||||
|
ImGui::PushFont(font_data, unscaled_font_size);
|
||||||
|
}
|
||||||
|
~ImGui_Font_Size () {
|
||||||
|
ImGui::PopFont();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void ImGui_Debug_Panel () {
|
||||||
|
ImGui::Begin("Debug Panel");
|
||||||
|
|
||||||
|
if (ImGui::Button("Debug_Break()")) {
|
||||||
|
debug_break();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui_Show_Font_Info () {
|
||||||
|
ImGui::Begin("Font Settings"); // imgui_push_default_font_index(0);
|
||||||
|
if (!ImGui_Default_Font_Loaded()){
|
||||||
|
ImGui::Text("Default font not present!");
|
||||||
|
} else {
|
||||||
|
ImGui::Text("Current font size: %.1f (index: %d)", ImGui_Default_Font_Current_Size(),
|
||||||
|
imgui_default_font.current_size);
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button("Decrease Font Size")) { imgui_default_font.current_size = clamp<s64>(imgui_default_font.current_size - 1, 0, 5); }
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button("Increase Font Size")) { imgui_default_font.current_size = clamp<s64>(imgui_default_font.current_size + 1, 0, 5); }
|
||||||
|
}
|
||||||
|
ImGui::End();
|
||||||
}
|
}
|
||||||
@ -1,29 +1,25 @@
|
|||||||
#include <d3d11.h>
|
#include <dwmapi.h>
|
||||||
#include <tchar.h>
|
void ImGui_Application_Win32 () {
|
||||||
#include "ImGui_Supplementary.cpp"
|
|
||||||
|
|
||||||
global ImGuiContext* imgui_context;
|
|
||||||
|
|
||||||
void ImGui_Application () {
|
|
||||||
// Make process DPI aware and obtain main monitor scale
|
|
||||||
ImGui_ImplWin32_EnableDpiAwareness();
|
ImGui_ImplWin32_EnableDpiAwareness();
|
||||||
f32 main_scale = ImGui_ImplWin32_GetDpiScaleForMonitor(::MonitorFromPoint(POINT{ 0, 0 }, MONITOR_DEFAULTTOPRIMARY));
|
f32 main_scale = ImGui_ImplWin32_GetDpiScaleForMonitor(::MonitorFromPoint(POINT{ 0, 0 }, MONITOR_DEFAULTTOPRIMARY));
|
||||||
|
|
||||||
// Create application window
|
bool success = os_create_window("Main Window", nullptr, true, true, false, ImGui_WndProc);
|
||||||
WNDCLASSEXW wc = { sizeof(wc), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(nullptr), nullptr, nullptr, nullptr, nullptr, L"ImGui Example", nullptr };
|
Assert(success);
|
||||||
::RegisterClassExW(&wc);
|
HWND hwnd = get_main_window().window;
|
||||||
HWND hwnd = ::CreateWindowW(wc.lpszClassName, L"Dear ImGui DirectX11 Example", WS_OVERLAPPEDWINDOW, 100, 100, (int)(1280 * main_scale), (int)(800 * main_scale), nullptr, nullptr, wc.hInstance, nullptr);
|
|
||||||
|
|
||||||
// Initialize Direct3D
|
// Initialize Direct3D
|
||||||
if (!CreateDeviceD3D(hwnd)) {
|
if (!CreateDeviceD3D(hwnd)) {
|
||||||
CleanupDeviceD3D();
|
CleanupDeviceD3D();
|
||||||
::UnregisterClassW(wc.lpszClassName, wc.hInstance);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show the window
|
// Set dark titlebar
|
||||||
::ShowWindow(hwnd, SW_SHOWDEFAULT);
|
s64 dark_mode = 1;
|
||||||
::UpdateWindow(hwnd);
|
DWORD USE_IMMERSIVE_DARK_MODE = 20;
|
||||||
|
::DwmSetWindowAttribute(hwnd, USE_IMMERSIVE_DARK_MODE, &dark_mode, sizeof(s64));
|
||||||
|
// A hacky workaround to display the dark title bar properly. Nothing else we've tried worked
|
||||||
|
::ShowWindow(hwnd, SW_HIDE);
|
||||||
|
::ShowWindow(hwnd, SW_SHOW);
|
||||||
|
|
||||||
// Setup Dear ImGui context
|
// Setup Dear ImGui context
|
||||||
IMGUI_CHECKVERSION();
|
IMGUI_CHECKVERSION();
|
||||||
@ -37,10 +33,8 @@ void ImGui_Application () {
|
|||||||
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; // Enable Docking
|
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; // Enable Docking
|
||||||
io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Enable Multi-Viewport / Platform Windows
|
io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Enable Multi-Viewport / Platform Windows
|
||||||
|
|
||||||
io.ConfigViewportsNoAutoMerge = true;
|
// io.ConfigViewportsNoAutoMerge = true; // io.ConfigViewportsNoTaskBarIcon = true; // io.ConfigDockingAlwaysTabBar = true;
|
||||||
io.ConfigViewportsNoTaskBarIcon = true;
|
// io.ConfigDockingTransparentPayload = true;
|
||||||
io.ConfigDockingAlwaysTabBar = true;
|
|
||||||
io.ConfigDockingTransparentPayload = true;
|
|
||||||
|
|
||||||
// Setup Dear ImGui style
|
// Setup Dear ImGui style
|
||||||
// ImGui::StyleColorsDark();
|
// ImGui::StyleColorsDark();
|
||||||
@ -54,32 +48,31 @@ void ImGui_Application () {
|
|||||||
io.ConfigDpiScaleViewports = true; // [Experimental] Scale Dear ImGui and Platform Windows when Monitor DPI changes.
|
io.ConfigDpiScaleViewports = true; // [Experimental] Scale Dear ImGui and Platform Windows when Monitor DPI changes.
|
||||||
|
|
||||||
// When viewports are enabled we tweak WindowRounding/WindowBg so platform windows can look identical to regular ones.
|
// When viewports are enabled we tweak WindowRounding/WindowBg so platform windows can look identical to regular ones.
|
||||||
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
|
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) {
|
||||||
{
|
style.WindowRounding = 0.0f;
|
||||||
style.WindowRounding = 0.0f;
|
style.Colors[ImGuiCol_WindowBg].w = 1.0f;
|
||||||
style.Colors[ImGuiCol_WindowBg].w = 1.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup Platform/Renderer backends
|
// Setup Platform/Renderer backends
|
||||||
ImGui_ImplWin32_Init(hwnd);
|
ImGui_ImplWin32_Init(hwnd);
|
||||||
ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);
|
ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);
|
||||||
|
|
||||||
// #TODO: #ImGUI - Load fonts:
|
style.FontSizeBase = 24.0f;
|
||||||
// - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them.
|
|
||||||
// - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple.
|
|
||||||
// - If the file cannot be loaded, the function will return a nullptr. Please handle those errors in your application (e.g. use an assertion, or display an error and quit).
|
|
||||||
// - Use '#define IMGUI_ENABLE_FREETYPE' in your imconfig file to use Freetype for higher quality font rendering.
|
|
||||||
// - Read 'docs/FONTS.md' for more instructions and details. If you like the default font but want it to scale better, consider using the 'ProggyVector' from the same author!
|
|
||||||
// - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ !
|
|
||||||
|
|
||||||
//style.FontSizeBase = 20.0f;
|
|
||||||
//io.Fonts->AddFontDefault();
|
//io.Fonts->AddFontDefault();
|
||||||
//io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\segoeui.ttf");
|
|
||||||
//io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf");
|
string font_file_name = "RobotoMono-Regular.ttf";
|
||||||
//io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf");
|
|
||||||
//io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf");
|
imgui_default_font.sizes.allocator = GPAllocator();
|
||||||
//ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf");
|
imgui_default_font.font_name = font_file_name;
|
||||||
//IM_ASSERT(font != nullptr);
|
|
||||||
|
for (s64 i = 0; i < 6; i += 1) {
|
||||||
|
f32 font_size = imgui_font_sizes[i];
|
||||||
|
ImFont* new_font = io.Fonts->AddFontFromFileTTF((char*)font_file_name.data, font_size);
|
||||||
|
if (new_font) {
|
||||||
|
ImGui_Font_Size_Pair pair = {font_size, new_font};
|
||||||
|
array_add(imgui_default_font.sizes, pair);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool show_demo_window = true;
|
bool show_demo_window = true;
|
||||||
bool show_another_window = false;
|
bool show_another_window = false;
|
||||||
@ -121,29 +114,17 @@ void ImGui_Application () {
|
|||||||
ImGui_ImplWin32_NewFrame();
|
ImGui_ImplWin32_NewFrame();
|
||||||
ImGui::NewFrame();
|
ImGui::NewFrame();
|
||||||
|
|
||||||
|
ImGui_Push_Default_Font();
|
||||||
// Simple dockspace:
|
// Simple dockspace:
|
||||||
ImGui::DockSpaceOverViewport();
|
ImGui::DockSpaceOverViewport();
|
||||||
|
|
||||||
{
|
{ ImGui::Begin("Test panel");
|
||||||
ImGui::Begin("Hello, world!");
|
|
||||||
|
|
||||||
if (ImGui::Button("Debug_Break()")) {
|
|
||||||
debug_break();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::Button("Create New Window")) {
|
|
||||||
// I think that create_window should take few parameters, and we have other APIs for
|
|
||||||
// styling, positioning, etc. I just call this and want to get a window.
|
|
||||||
// auto new_window = create_window(window_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::Button("Position recently created Window")) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImGui_Show_Font_Info();
|
||||||
|
|
||||||
|
ImGui_Pop_Default_Font();
|
||||||
|
|
||||||
// Rendering
|
// Rendering
|
||||||
ImGui::Render();
|
ImGui::Render();
|
||||||
@ -153,10 +134,9 @@ void ImGui_Application () {
|
|||||||
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
|
ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
|
||||||
|
|
||||||
// Update and Render additional Platform Windows
|
// Update and Render additional Platform Windows
|
||||||
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
|
if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) {
|
||||||
{
|
ImGui::UpdatePlatformWindows();
|
||||||
ImGui::UpdatePlatformWindows();
|
ImGui::RenderPlatformWindowsDefault();
|
||||||
ImGui::RenderPlatformWindowsDefault();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Present
|
// Present
|
||||||
@ -172,5 +152,4 @@ void ImGui_Application () {
|
|||||||
|
|
||||||
CleanupDeviceD3D();
|
CleanupDeviceD3D();
|
||||||
::DestroyWindow(hwnd);
|
::DestroyWindow(hwnd);
|
||||||
::UnregisterClassW(wc.lpszClassName, wc.hInstance);
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user