From 1b10f2811c306162a05e9a0ea858c79c99c46a0f Mon Sep 17 00:00:00 2001 From: Nanako <469449812@qq.com> Date: Thu, 27 Jun 2024 20:16:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=93=E5=BA=93=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=EF=BC=8C=E6=9B=B4=E6=96=B0=E7=AC=AC=E4=B8=89=E6=96=B9?= =?UTF-8?q?=E5=BA=93=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 8 +- Arona/src/arona_application.cpp | 11 +- Arona/src/widget/widgets.cpp | 3 +- Arona/third_party/imgui | 1 + Arona/third_party/imgui/CMakeLists.txt | 81 ------- Arona/third_party/imgui/imconfig.h | 131 ---------- Arona/third_party/imgui/imgui | 1 - Arona/third_party/imgui/imgui_macos_main.mm | 141 ----------- Arona/third_party/imgui/imgui_main.h | 17 -- .../third_party/imgui/imgui_windows_main.cpp | 228 ------------------ AronaCore | 2 +- CMakeLists.txt | 2 +- 12 files changed, 15 insertions(+), 611 deletions(-) create mode 160000 Arona/third_party/imgui delete mode 100644 Arona/third_party/imgui/CMakeLists.txt delete mode 100644 Arona/third_party/imgui/imconfig.h delete mode 160000 Arona/third_party/imgui/imgui delete mode 100644 Arona/third_party/imgui/imgui_macos_main.mm delete mode 100644 Arona/third_party/imgui/imgui_main.h delete mode 100644 Arona/third_party/imgui/imgui_windows_main.cpp diff --git a/.gitmodules b/.gitmodules index bd6ae08..e411d2c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "AronaCore"] path = AronaCore - url = http://www.nanako.site:9004/Nanako/AronaCore.git -[submodule "Arona/third_party/imgui/imgui"] - path = Arona/third_party/imgui/imgui - url = https://github.com/ocornut/imgui.git + url = https://www.nanako.site:49004/Nanako/AronaCore.git +[submodule "Arona/third_party/imgui"] + path = Arona/third_party/imgui + url = https://www.nanako.site:49004/Nanako/imgui.git diff --git a/Arona/src/arona_application.cpp b/Arona/src/arona_application.cpp index 94e5230..6db5041 100644 --- a/Arona/src/arona_application.cpp +++ b/Arona/src/arona_application.cpp @@ -18,17 +18,18 @@ void configure_imgui(ImGuiIO& io) { io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; // Enable Docking io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; // Enable Multi-Viewport / Platform Windows io.ConfigViewportsNoAutoMerge = true; -// io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleFonts; // Enable DPI scaling -// io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleViewports; // Enable DPI scaling + // io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleFonts; // Enable DPI scaling + // io.ConfigFlags |= ImGuiConfigFlags_DpiEnableScaleViewports; // Enable DPI scaling // Setup Dear ImGui style ImGui::StyleColorsClassic(); ImGuiStyle* style = &ImGui::GetStyle(); - style->TabRounding = 0; + // style->TabRounding = 0; // style->Colors[ImGuiCol_ButtonActive] = ImVec4(0.2f, 0.2f, 0.2f, 0.0f); // hide tab bar小三角使用此颜色, 如果想要隐藏, 就需要更改这个颜色 // ImGui::StyleColorsDark(); //ImGui::StyleColorsLight(); - +// get dpi scale + float dpi_scale = 1.5f; // Load Fonts // - 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. @@ -45,7 +46,7 @@ void configure_imgui(ImGuiIO& io) { //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, nullptr, io.Fonts->GetGlyphRangesJapanese()); //IM_ASSERT(font != nullptr); - io.Fonts->AddFontFromFileTTF("GenJyuuGothic-Normal-2.ttf", 18.f); + auto font = io.Fonts->AddFontFromFileTTF("GenJyuuGothic-Normal-2.ttf", 18.f * dpi_scale); } void draw_imgui(float delta_time) { diff --git a/Arona/src/widget/widgets.cpp b/Arona/src/widget/widgets.cpp index 3fcdacf..a575e85 100644 --- a/Arona/src/widget/widgets.cpp +++ b/Arona/src/widget/widgets.cpp @@ -287,7 +287,8 @@ void draw_mixer_track_effect_list(mixer_track* track) { } if (ImGui::Button("Add")) { - auto effect = get_plugin_host_manager()->create_effect_plugin_host(R"(F:\VST\VST64\OTT_x64.dll)"); + // auto effect = get_plugin_host_manager()->create_effect_plugin_host(R"(F:\VST\VST64\OTT_x64.dll)"); + auto effect = get_plugin_host_manager()->create_effect_plugin_host(R"(F:\VST\VST64\FabFilter Pro-Q 3.dll)"); track->add_effect(effect); } } else { diff --git a/Arona/third_party/imgui b/Arona/third_party/imgui new file mode 160000 index 0000000..79e68e6 --- /dev/null +++ b/Arona/third_party/imgui @@ -0,0 +1 @@ +Subproject commit 79e68e6ea9dffe17d64b08848cd3fa11254e48bc diff --git a/Arona/third_party/imgui/CMakeLists.txt b/Arona/third_party/imgui/CMakeLists.txt deleted file mode 100644 index ab612ad..0000000 --- a/Arona/third_party/imgui/CMakeLists.txt +++ /dev/null @@ -1,81 +0,0 @@ -project(imgui LANGUAGES C CXX) -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_C_STANDARD 11) -# 如果是macos -if (APPLE) - # 设置语言 - set(CMAKE_CXX_STANDARD 17) - set(CMAKE_C_STANDARD 11) - # 设置编译选项 - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -x objective-c++") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -x objective-c") -endif () - -set(ALL_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui.h - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui_draw.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui_internal.h - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui_tables.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui_widgets.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imstb_rectpack.h - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imstb_textedit.h - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imstb_truetype.h - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/misc/freetype/imgui_freetype.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/misc/freetype/imgui_freetype.h - ${CMAKE_CURRENT_SOURCE_DIR}/imconfig.h - ${CMAKE_CURRENT_SOURCE_DIR}/imgui_main.h -) - -# windows -if (WIN32) - list(APPEND ALL_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_win32.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_win32.h - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_dx11.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_dx11.h - ${CMAKE_CURRENT_SOURCE_DIR}/imgui_windows_main.cpp - ) -# macos -elseif (APPLE) - list(APPEND ALL_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_metal.mm - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_metal.h - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_glfw.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_glfw.h - ${CMAKE_CURRENT_SOURCE_DIR}/imgui_macos_main.mm - ) -# linux -else () - list(APPEND ALL_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_vulkan.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_vulkan.h - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_glfw.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_glfw.h - ) -endif () - -find_package(PkgConfig REQUIRED) -pkg_check_modules(FREETYPE REQUIRED freetype2) -include_directories(${FREETYPE_INCLUDE_DIRS}) -link_directories(${FREETYPE_LIBRARY_DIRS}) -add_definitions(${FREETYPE_CFLAGS_OTHER}) - -add_library(${PROJECT_NAME} STATIC ${ALL_FILES}) -target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/imgui) -target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends) -target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) - -# windows -if (WIN32) - target_link_libraries(${PROJECT_NAME} PRIVATE d3d11 dxgi d3dcompiler dwmapi) -elseif (APPLE) - target_link_libraries(${PROJECT_NAME} PRIVATE "-framework Metal") - target_link_libraries(${PROJECT_NAME} PRIVATE "-framework Cocoa") - target_link_libraries(${PROJECT_NAME} PRIVATE "-framework IOKit") - target_link_libraries(${PROJECT_NAME} PRIVATE "-framework QuartzCore") - target_link_libraries(${PROJECT_NAME} PRIVATE glfw) -else () - target_link_libraries(${PROJECT_NAME} PRIVATE vulkan) - target_link_libraries(${PROJECT_NAME} PRIVATE glfw) -endif () \ No newline at end of file diff --git a/Arona/third_party/imgui/imconfig.h b/Arona/third_party/imgui/imconfig.h deleted file mode 100644 index d556cba..0000000 --- a/Arona/third_party/imgui/imconfig.h +++ /dev/null @@ -1,131 +0,0 @@ -//----------------------------------------------------------------------------- -// DEAR IMGUI COMPILE-TIME OPTIONS -// Runtime options (clipboard callbacks, enabling various features, etc.) can generally be set via the ImGuiIO structure. -// You can use ImGui::SetAllocatorFunctions() before calling ImGui::CreateContext() to rewire memory allocation functions. -//----------------------------------------------------------------------------- -// A) You may edit imconfig.h (and not overwrite it when updating Dear ImGui, or maintain a patch/rebased branch with your modifications to it) -// B) or '#define IMGUI_USER_CONFIG "my_imgui_config.h"' in your project and then add directives in your own file without touching this template. -//----------------------------------------------------------------------------- -// You need to make sure that configuration settings are defined consistently _everywhere_ Dear ImGui is used, which include the imgui*.cpp -// files but also _any_ of your code that uses Dear ImGui. This is because some compile-time options have an affect on data structures. -// Defining those options in imconfig.h will ensure every compilation unit gets to see the same data structure layouts. -// Call IMGUI_CHECKVERSION() from your .cpp file to verify that the data structures your files are using are matching the ones imgui.cpp is using. -//----------------------------------------------------------------------------- - -#pragma once - -//---- Define assertion handler. Defaults to calling assert(). -// If your macro uses multiple statements, make sure is enclosed in a 'do { .. } while (0)' block so it can be used as a single statement. -//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) -//#define IM_ASSERT(_EXPR) ((void)(_EXPR)) // Disable asserts - -//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows -// Using Dear ImGui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility. -// DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions() -// for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details. -//#define IMGUI_API __declspec( dllexport ) -//#define IMGUI_API __declspec( dllimport ) - -//---- Don't define obsolete functions/enums/behaviors. Consider enabling from time to time after updating to clean your code of obsolete function/names. -//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS -//#define IMGUI_DISABLE_OBSOLETE_KEYIO // 1.87+ disable legacy io.KeyMap[]+io.KeysDown[] in favor io.AddKeyEvent(). This is automatically done by IMGUI_DISABLE_OBSOLETE_FUNCTIONS. - -//---- Disable all of Dear ImGui or don't implement standard windows/tools. -// It is very strongly recommended to NOT disable the demo windows and debug tool during development. They are extremely useful in day to day work. Please read comments in imgui_demo.cpp. -//#define IMGUI_DISABLE // Disable everything: all headers and source files will be empty. -//#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. -//#define IMGUI_DISABLE_DEBUG_TOOLS // Disable metrics/debugger and other debug tools: ShowMetricsWindow(), ShowDebugLogWindow() and ShowIDStackToolWindow() will be empty. - -//---- Don't implement some functions to reduce linkage requirements. -//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. (user32.lib/.a, kernel32.lib/.a) -//#define IMGUI_ENABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] [Default with Visual Studio] Implement default IME handler (require imm32.lib/.a, auto-link for Visual Studio, -limm32 on command-line for MinGW) -//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] [Default with non-Visual Studio compilers] Don't implement default IME handler (won't require imm32.lib/.a) -//#define IMGUI_DISABLE_WIN32_FUNCTIONS // [Win32] Won't use and link with any Win32 function (clipboard, IME). -//#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices', this is why this is not the default). -//#define IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself (e.g. if you don't want to link with vsnprintf) -//#define IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 so you can implement them yourself. -//#define IMGUI_DISABLE_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle at all (replace them with dummies) -//#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle so you can implement them yourself if you don't want to link with fopen/fclose/fread/fwrite. This will also disable the LogToTTY() function. -//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions(). -//#define IMGUI_DISABLE_SSE // Disable use of SSE intrinsics even if available - -//---- Include imgui_user.h at the end of imgui.h as a convenience -// May be convenient for some users to only explicitly include vanilla imgui.h and have extra stuff included. -//#define IMGUI_INCLUDE_IMGUI_USER_H -//#define IMGUI_USER_H_FILENAME "my_folder/my_imgui_user.h" - -//---- Pack colors to BGRA8 instead of RGBA8 (to avoid converting from one to another) -//#define IMGUI_USE_BGRA_PACKED_COLOR - -//---- Use 32-bit for ImWchar (default is 16-bit) to support Unicode planes 1-16. (e.g. point beyond 0xFFFF like emoticons, dingbats, symbols, shapes, ancient languages, etc...) -//#define IMGUI_USE_WCHAR32 - -//---- Avoid multiple STB libraries implementations, or redefine path/filenames to prioritize another version -// By default the embedded implementations are declared static and not available outside of Dear ImGui sources files. -//#define IMGUI_STB_TRUETYPE_FILENAME "my_folder/stb_truetype.h" -//#define IMGUI_STB_RECT_PACK_FILENAME "my_folder/stb_rect_pack.h" -//#define IMGUI_STB_SPRINTF_FILENAME "my_folder/stb_sprintf.h" // only used if IMGUI_USE_STB_SPRINTF is defined. -//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION -//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION -//#define IMGUI_DISABLE_STB_SPRINTF_IMPLEMENTATION // only disabled if IMGUI_USE_STB_SPRINTF is defined. - -//---- Use stb_sprintf.h for a faster implementation of vsnprintf instead of the one from libc (unless IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS is defined) -// Compatibility checks of arguments and formats done by clang and GCC will be disabled in order to support the extra formats provided by stb_sprintf.h. -//#define IMGUI_USE_STB_SPRINTF - -//---- Use FreeType to build and rasterize the font atlas (instead of stb_truetype which is embedded by default in Dear ImGui) -// Requires FreeType headers to be available in the include path. Requires program to be compiled with 'misc/freetype/imgui_freetype.cpp' (in this repository) + the FreeType library (not provided). -// On Windows you may use vcpkg with 'vcpkg install freetype --triplet=x64-windows' + 'vcpkg integrate install'. -//#define IMGUI_ENABLE_FREETYPE - -//---- Use FreeType+lunasvg library to render OpenType SVG fonts (SVGinOT) -// Requires lunasvg headers to be available in the include path + program to be linked with the lunasvg library (not provided). -// Only works in combination with IMGUI_ENABLE_FREETYPE. -// (implementation is based on Freetype's rsvg-port.c which is licensed under CeCILL-C Free Software License Agreement) -//#define IMGUI_ENABLE_FREETYPE_LUNASVG - -//---- Use stb_truetype to build and rasterize the font atlas (default) -// The only purpose of this define is if you want force compilation of the stb_truetype backend ALONG with the FreeType backend. -//#define IMGUI_ENABLE_STB_TRUETYPE - -//---- Define constructor and implicit cast operators to convert back<>forth between your math types and ImVec2/ImVec4. -// This will be inlined as part of ImVec2 and ImVec4 class declarations. -/* -#define IM_VEC2_CLASS_EXTRA \ - constexpr ImVec2(const MyVec2& f) : x(f.x), y(f.y) {} \ - operator MyVec2() const { return MyVec2(x,y); } - -#define IM_VEC4_CLASS_EXTRA \ - constexpr ImVec4(const MyVec4& f) : x(f.x), y(f.y), z(f.z), w(f.w) {} \ - operator MyVec4() const { return MyVec4(x,y,z,w); } -*/ -//---- ...Or use Dear ImGui's own very basic math operators. -//#define IMGUI_DEFINE_MATH_OPERATORS - -//---- Use 32-bit vertex indices (default is 16-bit) is one way to allow large meshes with more than 64K vertices. -// Your renderer backend will need to support it (most example renderer backends support both 16/32-bit indices). -// Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer. -// Read about ImGuiBackendFlags_RendererHasVtxOffset for details. -//#define ImDrawIdx unsigned int - -//---- Override ImDrawCallback signature (will need to modify renderer backends accordingly) -//struct ImDrawList; -//struct ImDrawCmd; -//typedef void (*MyImDrawCallback)(const ImDrawList* draw_list, const ImDrawCmd* cmd, void* my_renderer_user_data); -//#define ImDrawCallback MyImDrawCallback - -//---- Debug Tools: Macro to break in Debugger (we provide a default implementation of this in the codebase) -// (use 'Metrics->Tools->Item Picker' to pick widgets with the mouse and break into them for easy debugging.) -//#define IM_DEBUG_BREAK IM_ASSERT(0) -//#define IM_DEBUG_BREAK __debugbreak() - -//---- Debug Tools: Enable slower asserts -//#define IMGUI_DEBUG_PARANOID - -//---- Tip: You can add extra functions within the ImGui:: namespace from anywhere (e.g. your own sources/header files) -/* -namespace ImGui -{ - void MyFunction(const char* name, MyMatrix44* mtx); -} -*/ diff --git a/Arona/third_party/imgui/imgui b/Arona/third_party/imgui/imgui deleted file mode 160000 index 6d948ab..0000000 --- a/Arona/third_party/imgui/imgui +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6d948ab47ecf984239af01434f3ed03808dbf188 diff --git a/Arona/third_party/imgui/imgui_macos_main.mm b/Arona/third_party/imgui/imgui_macos_main.mm deleted file mode 100644 index a5a706b..0000000 --- a/Arona/third_party/imgui/imgui_macos_main.mm +++ /dev/null @@ -1,141 +0,0 @@ -// Dear ImGui: standalone example application for GLFW + Metal, using programmable pipeline -// (GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan/Metal graphics context creation, etc.) - -// 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 "imgui.h" -#include "imgui_impl_glfw.h" -#include "imgui_impl_metal.h" -#include -#include -#include "imgui_main.h" - -#define GLFW_INCLUDE_NONE -#define GLFW_EXPOSE_NATIVE_COCOA -#include -#include - -#import -#import - -static GLFWwindow* g_main_window = nullptr; - -static void glfw_error_callback(int error, const char* description) -{ - fprintf(stderr, "Glfw Error %d: %s\n", error, description); -} - -int init_imgui() { - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); - configure_imgui(io); - // Setup window - glfwSetErrorCallback(glfw_error_callback); - if (!glfwInit()) - return 1; - - // Create window with graphics context - glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); - g_main_window = glfwCreateWindow(1280, 720, get_window_title().c_str(), nullptr, nullptr); - if (g_main_window == nullptr) - return 1; - - return 0; -} - -bool imgui_new_frame() { - return true; -} - -void render_imgui() { - -} - -void shutdown_imgui() { - // Cleanup - ImGui_ImplMetal_Shutdown(); - ImGui_ImplGlfw_Shutdown(); - ImGui::DestroyContext(); - - glfwDestroyWindow(g_main_window); - glfwTerminate(); -} - -void run_imgui() { - init_imgui(); - - id device = MTLCreateSystemDefaultDevice(); - id commandQueue = [device newCommandQueue]; - - // Setup Platform/Renderer backends - ImGui_ImplGlfw_InitForOther(g_main_window, true); - ImGui_ImplMetal_Init(device); - - NSWindow* nswin = glfwGetCocoaWindow(g_main_window); - CAMetalLayer* layer = [CAMetalLayer layer]; - layer.device = device; - layer.pixelFormat = MTLPixelFormatBGRA8Unorm; - nswin.contentView.layer = layer; - nswin.contentView.wantsLayer = YES; - - float clear_color[4] = {0.45f, 0.55f, 0.60f, 1.00f}; - - MTLRenderPassDescriptor* renderPassDescriptor = [MTLRenderPassDescriptor new]; - while (!glfwWindowShouldClose(g_main_window)) { - @autoreleasepool { - // Poll and handle events (inputs, window resize, etc.) - // 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. - glfwPollEvents(); - std::this_thread::sleep_for(std::chrono::milliseconds(5)); - - int width, height; - glfwGetFramebufferSize(g_main_window, &width, &height); - layer.drawableSize = CGSizeMake(width, height); - id drawable = [layer nextDrawable]; - - id commandBuffer = [commandQueue commandBuffer]; - renderPassDescriptor.colorAttachments[0].clearColor = MTLClearColorMake(clear_color[0] * clear_color[3], clear_color[1] * clear_color[3], clear_color[2] * clear_color[3], clear_color[3]); - renderPassDescriptor.colorAttachments[0].texture = drawable.texture; - renderPassDescriptor.colorAttachments[0].loadAction = MTLLoadActionClear; - renderPassDescriptor.colorAttachments[0].storeAction = MTLStoreActionStore; - id renderEncoder = [commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor]; - [renderEncoder pushDebugGroup:@"ImGui demo"]; - - // Start the Dear ImGui frame - ImGui_ImplMetal_NewFrame(renderPassDescriptor); - ImGui_ImplGlfw_NewFrame(); - ImGui::NewFrame(); - - ImGuiIO& io = ImGui::GetIO(); - tick_imgui(io.DeltaTime); - draw_imgui(io.DeltaTime); - - // Rendering - ImGui::Render(); - ImGui_ImplMetal_RenderDrawData(ImGui::GetDrawData(), commandBuffer, renderEncoder); - - // Update and Render additional Platform Windows - if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) - { - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindowsDefault(); - } - - [renderEncoder popDebugGroup]; - [renderEncoder endEncoding]; - - [commandBuffer presentDrawable:drawable]; - [commandBuffer commit]; - } - } - shutdown_imgui(); -} diff --git a/Arona/third_party/imgui/imgui_main.h b/Arona/third_party/imgui/imgui_main.h deleted file mode 100644 index b93c34b..0000000 --- a/Arona/third_party/imgui/imgui_main.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include -#include "imgui.h" - -extern int init_imgui(); -extern void configure_imgui(ImGuiIO& io); -extern bool imgui_new_frame(); -extern void draw_imgui(float delta_time); -extern void render_imgui(); -extern void shutdown_imgui(); - -extern void tick_imgui(float delta_time); - -extern void run_imgui(); - -extern std::string get_window_title(); diff --git a/Arona/third_party/imgui/imgui_windows_main.cpp b/Arona/third_party/imgui/imgui_windows_main.cpp deleted file mode 100644 index 508d1f9..0000000 --- a/Arona/third_party/imgui/imgui_windows_main.cpp +++ /dev/null @@ -1,228 +0,0 @@ -#include "imgui.h" -#include "imgui_impl_dx11.h" -#include "imgui_impl_win32.h" -#include -#include -#include "imgui_main.h" - -// 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; -static HWND hwnd = nullptr; -static WNDCLASSEXW wc; - -// Forward declarations of helper functions -bool CreateDeviceD3D(HWND hWnd); -void CleanupDeviceD3D(); -void CreateRenderTarget(); -void CleanupRenderTarget(); -LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -// Main code -int init_imgui() { - // Create application window - //ImGui_ImplWin32_EnableDpiAwareness(); - wc = { sizeof(wc), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(nullptr), nullptr, nullptr, nullptr, nullptr, L"ImGui Example", nullptr }; - ::RegisterClassExW(&wc); - std::string window_title = get_window_title(); - wchar_t window_title_wchar[256]; - MultiByteToWideChar(CP_ACP, 0, window_title.c_str(), -1, window_title_wchar, 256); - hwnd = ::CreateWindowW(wc.lpszClassName, window_title_wchar, WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, nullptr, nullptr, wc.hInstance, nullptr); - - // 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; - - configure_imgui(io); - - // Setup Platform/Renderer backends - ImGui_ImplWin32_Init(hwnd); - ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext); - return 0; -} - -bool imgui_new_frame() { - // Poll and handle messages (inputs, window resize, etc.) - // See the WndProc() function below for our to dispatch events to the Win32 backend. - MSG msg; - bool done = false; - while (::PeekMessage(&msg, nullptr, 0U, 0U, PM_REMOVE)) - { - ::TranslateMessage(&msg); - ::DispatchMessage(&msg); - if (msg.message == WM_QUIT) - done = true; - } - if (done) - return false; - - // Handle window being minimized or screen locked - if (g_SwapChainOccluded && g_pSwapChain->Present(1, DXGI_PRESENT_TEST) == DXGI_STATUS_OCCLUDED) - { - ::Sleep(10); - return true; - } - 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(); - } - - // Start the Dear ImGui frame - ImGui_ImplDX11_NewFrame(); - ImGui_ImplWin32_NewFrame(); - ImGui::NewFrame(); - return true; -} - -void render_imgui() { - // Rendering - ImGui::Render(); - ImGuiIO& io = ImGui::GetIO(); - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - const float clear_color_with_alpha[4] = { clear_color.x * clear_color.w, clear_color.y * clear_color.w, clear_color.z * clear_color.w, clear_color.w }; - g_pd3dDeviceContext->OMSetRenderTargets(1, &g_mainRenderTargetView, nullptr); - g_pd3dDeviceContext->ClearRenderTargetView(g_mainRenderTargetView, clear_color_with_alpha); - ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); - - // Update and Render additional Platform Windows - if (io.ConfigFlags & ImGuiConfigFlags_ViewportsEnable) - { - ImGui::UpdatePlatformWindows(); - ImGui::RenderPlatformWindowsDefault(); - } - - // 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); -} - -void shutdown_imgui() { - // Cleanup - ImGui_ImplDX11_Shutdown(); - ImGui_ImplWin32_Shutdown(); - ImGui::DestroyContext(); - - CleanupDeviceD3D(); - ::DestroyWindow(hwnd); - ::UnregisterClassW(wc.lpszClassName, wc.hInstance); -} - -void run_imgui() { - init_imgui(); - while (true) { - if (!imgui_new_frame()) { - break; - } - ImGuiIO& io = ImGui::GetIO(); - tick_imgui(io.DeltaTime); - draw_imgui(io.DeltaTime); - render_imgui(); - } - shutdown_imgui(); -} - -// 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; } -} - -// 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_DESTROY: - ::PostQuitMessage(0); - return 0; - } - return ::DefWindowProcW(hWnd, msg, wParam, lParam); -} diff --git a/AronaCore b/AronaCore index 3f3c708..f69f308 160000 --- a/AronaCore +++ b/AronaCore @@ -1 +1 @@ -Subproject commit 3f3c70883f3a8a08eac23ec952d893197fb866a3 +Subproject commit f69f3088f29c7171e40c62887164fae2b9ff3b05 diff --git a/CMakeLists.txt b/CMakeLists.txt index 9697a4e..7e74ace 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.27) +cmake_minimum_required(VERSION 3.20) project(AronaStudio) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)