# ImGui Integration & Memory Debugger ## Task List - [ ] **Preparation** - [x] Fetch Dear ImGui Source Files (Verified existing submodule) - [x] Create `External/imgui/Imgui.bff` - [x] Update `fbuild.bff` to include `Imgui.bff` - [x] Update `Juliet.bff` to link `ImGui` and include paths - [x] Update `D3D12DescriptorHeap` to support ImGui (SRV for Font) - [ ] **Memory Arena Debugging** - [x] Modify `MemoryArena` struct to store allocation tags (Debug builds only) - [x] Update `ArenaPush` signature to accept `const char* tag` - [x] Update call sites (default parameter should minimize churn) - [ ] **ImGui Core & TDD** - [x] Create `Core/ImGui/ImGuiService.h/cpp` (Wrapper) - [x] Create `Core/ImGui/ImGuiTests.cpp` - [x] Implement `ImGui::SetAllocatorFunctions` using `EngineArena` - [x] Test context creation and IO setup - [ ] **Integration** - [ ] Win32: Integrate `WndProc` in `Win32DisplayEvent.cpp` - [x] DX12: Initialize/Shutdown in `D3D12GraphicsDevice` (Implemented in `ImGuiRenderer.cpp`) - [x] DX12: Render Frame in `D3D12GraphicsDevice` (Fixed Buffer Crash) - [ ] **Memory Debugger** - [x] Create `Engine/Debug/MemoryDebugger.h/cpp` - [x] Implement `DrawMemoryArena(const char* name, MemoryArena* arena)` with Allocation Tags - [x] Implement Hex View for Arena Data (Allocations list implemented, Hex view pending/skipped) - [x] Integrate into Main Loop (Toggle with 'Home' key) - [ ] **Verification** - [ ] Launch and verify ImGui renders - [x] Verify Memory Debugger shows allocations and tags --- ## Implementation Plan ### Goal Description Integrate Dear ImGui into the Juliet engine. Implement a specialized Test Driven Development (TDD) approach. Create a Memory Debugger panel to visualize `MemoryArena` state with allocation tags. ### Proposed Changes #### Build System **[NEW] [Imgui.bff](file:///w:/Classified/Juliet/External/imgui/Imgui.bff)** - Defines the `ImGui` library configuration. - Includes `imgui.cpp`, `imgui_draw.cpp`, `imgui_tables.cpp`, `imgui_widgets.cpp`, `imgui_demo.cpp`. - Includes backends: `imgui_impl_win32.cpp`, `imgui_impl_dx12.cpp`. **[MODIFY] [fbuild.bff](file:///w:/Classified/Juliet/fbuild.bff)** - Include `External/imgui/Imgui.bff`. **[MODIFY] [Juliet.bff](file:///w:/Classified/Juliet/Juliet/Juliet.bff)** - Add `ImGui` to `Juliet` library dependencies. - Add `External/imgui` and `External/imgui/backends` to include paths. #### Core/Memory **[MODIFY] [MemoryArena.h](file:///w:/Classified/Juliet/Juliet/include/Core/Memory/MemoryArena.h)** **[MODIFY] [MemoryArena.cpp](file:///w:/Classified/Juliet/Juliet/src/Core/Memory/MemoryArena.cpp)** - **Struct Change**: Add `AllocationTracking` vector (likely `std::vector` wrapped or fixed size array) in `JULIET_DEBUG`. - **Function Change**: `ArenaPush(..., const char* tag = nullptr)`. - **Logic**: Store offset + tag on push. #### Core/ImGui **[NEW] [ImGuiService.h](file:///w:/Classified/Juliet/Juliet/include/Core/ImGui/ImGuiService.h)** **[NEW] [ImGuiService.cpp](file:///w:/Classified/Juliet/Juliet/src/Core/ImGui/ImGuiService.cpp)** - Wrapper for ImGui lifecycle. - Uses `EngineArena` for internal ImGui allocations. **[NEW] [ImGuiTests.cpp](file:///w:/Classified/Juliet/Juliet/src/Core/ImGui/ImGuiTests.cpp)** - TDD suite for ImGui service. #### Graphics/D3D12 **[MODIFY] [D3D12GraphicsDevice.cpp](file:///w:/Classified/Juliet/Juliet/src/Graphics/D3D12/D3D12GraphicsDevice.cpp)** - ImGui backend initialization and rendering. #### Engine/Debug **[NEW] [MemoryDebugger.h](file:///w:/Classified/Juliet/Juliet/include/Engine/Debug/MemoryDebugger.h)** **[NEW] [MemoryDebugger.cpp](file:///w:/Classified/Juliet/Juliet/src/Engine/Debug/MemoryDebugger.cpp)** - Draw arena usage bar using tracked tags. - Draw hex dump.