| // dear imgui: Null Platform+Renderer Backends | |
| // This is designed if you need to use a blind Dear Imgui context with no input and no output. | |
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | |
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | |
| // 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 | |
| // CHANGELOG | |
| // (minor and older changes stripped away, please see git history for details) | |
| // 2025-11-17: Initial version. | |
| #include "imgui.h" | |
| #ifndef IMGUI_DISABLE | |
| #include "imgui_impl_null.h" | |
| // Clang/GCC warnings with -Weverything | |
| #if defined(__clang__) | |
| #pragma clang diagnostic ignored "-Wold-style-cast" // warning: use of old-style cast // yes, they are more terse. | |
| #endif | |
| IMGUI_IMPL_API bool ImGui_ImplNull_Init() | |
| { | |
| ImGui_ImplNullPlatform_Init(); | |
| ImGui_ImplNullRender_Init(); | |
| return true; | |
| } | |
| IMGUI_IMPL_API void ImGui_ImplNull_Shutdown() | |
| { | |
| ImGui_ImplNullRender_Shutdown(); | |
| ImGui_ImplNullPlatform_Shutdown(); | |
| } | |
| IMGUI_IMPL_API void ImGui_ImplNull_NewFrame() | |
| { | |
| ImGui_ImplNullPlatform_NewFrame(); | |
| ImGui_ImplNullRender_NewFrame(); | |
| } | |
| IMGUI_IMPL_API bool ImGui_ImplNullPlatform_Init() | |
| { | |
| ImGuiIO& io = ImGui::GetIO(); | |
| io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors; | |
| return true; | |
| } | |
| IMGUI_IMPL_API void ImGui_ImplNullPlatform_Shutdown() | |
| { | |
| ImGuiIO& io = ImGui::GetIO(); | |
| io.BackendFlags &= ~ImGuiBackendFlags_HasMouseCursors; | |
| } | |
| IMGUI_IMPL_API void ImGui_ImplNullPlatform_NewFrame() | |
| { | |
| ImGuiIO& io = ImGui::GetIO(); | |
| io.DisplaySize = ImVec2(1920, 1080); | |
| io.DeltaTime = 1.0f / 60.0f; | |
| } | |
| IMGUI_IMPL_API bool ImGui_ImplNullRender_Init() | |
| { | |
| ImGuiIO& io = ImGui::GetIO(); | |
| io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; | |
| io.BackendFlags |= ImGuiBackendFlags_RendererHasTextures; | |
| return true; | |
| } | |
| IMGUI_IMPL_API void ImGui_ImplNullRender_Shutdown() | |
| { | |
| ImGuiIO& io = ImGui::GetIO(); | |
| io.BackendFlags &= ~ImGuiBackendFlags_RendererHasVtxOffset; | |
| io.BackendFlags &= ~ImGuiBackendFlags_RendererHasTextures; | |
| } | |
| IMGUI_IMPL_API void ImGui_ImplNullRender_NewFrame() | |
| { | |
| } | |
| static void ImGui_ImplNullRender_UpdateTexture(ImTextureData* tex) | |
| { | |
| if (tex->Status == ImTextureStatus_WantCreate || tex->Status == ImTextureStatus_WantDestroy) | |
| tex->SetStatus(ImTextureStatus_OK); | |
| if (tex->Status == ImTextureStatus_WantDestroy) | |
| { | |
| tex->SetTexID(ImTextureID_Invalid); | |
| tex->SetStatus(ImTextureStatus_Destroyed); | |
| } | |
| } | |
| IMGUI_IMPL_API void ImGui_ImplNullRender_RenderDrawData(ImDrawData* draw_data) | |
| { | |
| if (draw_data->Textures != nullptr) | |
| for (ImTextureData* tex : *draw_data->Textures) | |
| if (tex->Status != ImTextureStatus_OK) | |
| ImGui_ImplNullRender_UpdateTexture(tex); | |
| } | |
| #endif // #ifndef IMGUI_DISABLE |