Backends: Metal, OSX: Various fixes (ARC / Autorelease fixes with metal-cpp and extensions). (#5403)

This commit is contained in:
Stephen H. Gerstacker 2022-06-30 20:09:18 +02:00 committed by ocornut
parent 609b935a8c
commit 67410d53f7
5 changed files with 41 additions and 11 deletions

View File

@ -44,9 +44,7 @@ IMGUI_IMPL_API void ImGui_ImplMetal_DestroyDeviceObjects();
// More info about using Metal from C++: https://developer.apple.com/metal/cpp/ // More info about using Metal from C++: https://developer.apple.com/metal/cpp/
#ifdef IMGUI_IMPL_METAL_CPP #ifdef IMGUI_IMPL_METAL_CPP
#include <Metal/Metal.hpp> #include <Metal/Metal.hpp>
#ifndef __OBJC__ #ifndef __OBJC__
IMGUI_IMPL_API bool ImGui_ImplMetal_Init(MTL::Device* device); IMGUI_IMPL_API bool ImGui_ImplMetal_Init(MTL::Device* device);
@ -63,5 +61,4 @@ IMGUI_IMPL_API bool ImGui_ImplMetal_CreateDeviceObjects(MTL::Device* device);
IMGUI_IMPL_API void ImGui_ImplMetal_DestroyDeviceObjects(); IMGUI_IMPL_API void ImGui_ImplMetal_DestroyDeviceObjects();
#endif #endif
#endif #endif

View File

@ -84,12 +84,12 @@ static inline CFTimeInterval GetMachAbsoluteTimeInSeconds() { return s
bool ImGui_ImplMetal_Init(MTL::Device* device) bool ImGui_ImplMetal_Init(MTL::Device* device)
{ {
return ImGui_ImplMetal_Init((id<MTLDevice>)(device)); return ImGui_ImplMetal_Init((__bridge id<MTLDevice>)(device));
} }
void ImGui_ImplMetal_NewFrame(MTL::RenderPassDescriptor* renderPassDescriptor) void ImGui_ImplMetal_NewFrame(MTL::RenderPassDescriptor* renderPassDescriptor)
{ {
ImGui_ImplMetal_NewFrame((MTLRenderPassDescriptor*)(renderPassDescriptor)); ImGui_ImplMetal_NewFrame((__bridge MTLRenderPassDescriptor*)(renderPassDescriptor));
} }
void ImGui_ImplMetal_RenderDrawData(ImDrawData* draw_data, void ImGui_ImplMetal_RenderDrawData(ImDrawData* draw_data,
@ -97,19 +97,19 @@ void ImGui_ImplMetal_RenderDrawData(ImDrawData* draw_data,
MTL::RenderCommandEncoder* commandEncoder) MTL::RenderCommandEncoder* commandEncoder)
{ {
ImGui_ImplMetal_RenderDrawData(draw_data, ImGui_ImplMetal_RenderDrawData(draw_data,
(id<MTLCommandBuffer>)(commandBuffer), (__bridge id<MTLCommandBuffer>)(commandBuffer),
(id<MTLRenderCommandEncoder>)(commandEncoder)); (__bridge id<MTLRenderCommandEncoder>)(commandEncoder));
} }
bool ImGui_ImplMetal_CreateFontsTexture(MTL::Device* device) bool ImGui_ImplMetal_CreateFontsTexture(MTL::Device* device)
{ {
return ImGui_ImplMetal_CreateFontsTexture((id<MTLDevice>)(device)); return ImGui_ImplMetal_CreateFontsTexture((__bridge id<MTLDevice>)(device));
} }
bool ImGui_ImplMetal_CreateDeviceObjects(MTL::Device* device) bool ImGui_ImplMetal_CreateDeviceObjects(MTL::Device* device)
{ {
return ImGui_ImplMetal_CreateDeviceObjects((id<MTLDevice>)(device)); return ImGui_ImplMetal_CreateDeviceObjects((__bridge id<MTLDevice>)(device));
} }
#endif // #ifdef IMGUI_IMPL_METAL_CPP #endif // #ifdef IMGUI_IMPL_METAL_CPP
@ -429,8 +429,8 @@ void ImGui_ImplMetal_DestroyDeviceObjects()
{ {
if ((self = [super init])) if ((self = [super init]))
{ {
_renderPipelineStateCache = [NSMutableDictionary dictionary]; self.renderPipelineStateCache = [NSMutableDictionary dictionary];
_bufferCache = [NSMutableArray array]; self.bufferCache = [NSMutableArray array];
_lastBufferCachePurge = GetMachAbsoluteTimeInSeconds(); _lastBufferCachePurge = GetMachAbsoluteTimeInSeconds();
} }
return self; return self;

View File

@ -16,9 +16,28 @@
#include "imgui.h" // IMGUI_IMPL_API #include "imgui.h" // IMGUI_IMPL_API
#ifdef __OBJC__
@class NSEvent; @class NSEvent;
@class NSView; @class NSView;
IMGUI_IMPL_API bool ImGui_ImplOSX_Init(NSView* _Nonnull view); IMGUI_IMPL_API bool ImGui_ImplOSX_Init(NSView* _Nonnull view);
IMGUI_IMPL_API void ImGui_ImplOSX_Shutdown(); IMGUI_IMPL_API void ImGui_ImplOSX_Shutdown();
IMGUI_IMPL_API void ImGui_ImplOSX_NewFrame(NSView* _Nullable view); IMGUI_IMPL_API void ImGui_ImplOSX_NewFrame(NSView* _Nullable view);
#endif
//-----------------------------------------------------------------------------
// C++ API
//-----------------------------------------------------------------------------
#ifdef IMGUI_IMPL_METAL_CPP_EXTENSIONS
// #include <AppKit/AppKit.hpp>
#ifndef __OBJC__
IMGUI_IMPL_API bool ImGui_ImplOSX_Init(void* _Nonnull view);
IMGUI_IMPL_API void ImGui_ImplOSX_Shutdown();
IMGUI_IMPL_API void ImGui_ImplOSX_NewFrame(void* _Nullable view);
#endif
#endif

View File

@ -364,6 +364,18 @@ static ImGuiKey ImGui_ImplOSX_KeyCodeToImGuiKey(int key_code)
} }
} }
#ifdef IMGUI_IMPL_METAL_CPP_EXTENSIONS
IMGUI_IMPL_API bool ImGui_ImplOSX_Init(void* _Nonnull view) {
return ImGui_ImplOSX_Init((__bridge NSView*)(view));
}
IMGUI_IMPL_API void ImGui_ImplOSX_NewFrame(void* _Nullable view) {
return ImGui_ImplOSX_NewFrame((__bridge NSView*)(view));
}
#endif
bool ImGui_ImplOSX_Init(NSView* view) bool ImGui_ImplOSX_Init(NSView* view)
{ {

View File

@ -41,6 +41,8 @@ Other Changes:
- InputText: added experimental io.ConfigInputTextEnterKeepActive feature to make pressing - InputText: added experimental io.ConfigInputTextEnterKeepActive feature to make pressing
Enter keep the input active and select all text. Enter keep the input active and select all text.
- Backends: Metal: Use __bridge for ARC based systems. (#5403) [@stack]
- Backends: OSX: Fixes to support full app creation in C++. (#5403) [@stack]
----------------------------------------------------------------------- -----------------------------------------------------------------------