// dear imgui: Renderer Backend for Metal 4 // This needs to be used along with a Platform Backend (e.g. OSX) // Implemented features: // [X] Renderer: User texture binding. Use 'MTLTexture.gpuResourceID' as texture identifier. Read the FAQ about ImTextureID/ImTextureRef! // [X] Renderer: Large meshes support (64k+ vertices) even with 16-bit indices (ImGuiBackendFlags_RendererHasVtxOffset). // [X] Renderer: Texture updates support for dynamic font atlas (ImGuiBackendFlags_RendererHasTextures). // Missing features or Issues: // [ ] Metal-cpp support. // [ ] Texture view pool support? Reevaluate which type to use for ImtextureID. // 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 #pragma once #include "imgui.h" // IMGUI_IMPL_API #ifndef IMGUI_DISABLE //----------------------------------------------------------------------------- // ObjC API //----------------------------------------------------------------------------- #ifdef __OBJC__ @class MTL4RenderPassDescriptor; @protocol MTLDevice, MTL4CommandBuffer, MTL4RenderCommandEncoder, MTL4CommandQueue; // framesInFlight must match the number of frames your application keeps in flight (e.g. the size of your own // command buffer/allocator ring). The backend uses it to size its own per-frame-in-flight resources (constant // buffer, vertex/index buffer cache) so the CPU never overwrites a slot the GPU may still be reading. // Follow "Getting Started" link and check examples/ folder to learn about using backends! IMGUI_IMPL_API bool ImGui_ImplMetal4_Init(id device, id commandQueue, int framesInFlight); IMGUI_IMPL_API void ImGui_ImplMetal4_Shutdown(); // frameInFlightIndex must match the slot you use to index your own per-frame-in-flight resources // (e.g. the same index used to pick your command buffer/allocator), and must be < framesInFlight passed to Init(). IMGUI_IMPL_API void ImGui_ImplMetal4_NewFrame(MTL4RenderPassDescriptor* renderPassDescriptor, int frameInFlightIndex); IMGUI_IMPL_API void ImGui_ImplMetal4_RenderDrawData(ImDrawData* drawData, id commandBuffer, id commandEncoder); // Called by Init/NewFrame/Shutdown IMGUI_IMPL_API bool ImGui_ImplMetal4_CreateDeviceObjects(id device); IMGUI_IMPL_API void ImGui_ImplMetal4_DestroyDeviceObjects(); // (Advanced) Use e.g. if you need to precisely control the timing of texture updates (e.g. for staged rendering), by setting ImDrawData::Textures = nullptr to handle this manually. IMGUI_IMPL_API void ImGui_ImplMetal4_UpdateTexture(ImTextureData* tex); #endif //----------------------------------------------------------------------------- #endif // #ifndef IMGUI_DISABLE