#include "vulkanwidget_macos.h" #ifdef __APPLE__ #import #import #import #include void* createMetalLayer(void* nativeViewPtr) { @autoreleasepool { NSView* view = (__bridge NSView*)nativeViewPtr; if (!view) { qDebug() << "createMetalLayer: Invalid NSView"; return nullptr; } // Create CAMetalLayer CAMetalLayer* metalLayer = [CAMetalLayer layer]; if (!metalLayer) { qDebug() << "createMetalLayer: Failed to create CAMetalLayer"; return nullptr; } // Configure the metal layer metalLayer.pixelFormat = MTLPixelFormatBGRA8Unorm; metalLayer.framebufferOnly = YES; // Get the content scale factor for retina displays NSWindow* window = [view window]; CGFloat scaleFactor = window ? [window backingScaleFactor] : 1.0; metalLayer.contentsScale = scaleFactor; // Set the layer's drawable size to match the view CGSize drawableSize = view.bounds.size; drawableSize.width *= scaleFactor; drawableSize.height *= scaleFactor; metalLayer.drawableSize = drawableSize; // Set view properties [view setWantsLayer:YES]; [view setLayer:metalLayer]; qDebug() << "createMetalLayer: Successfully created CAMetalLayer" << "size:" << drawableSize.width << "x" << drawableSize.height << "scale:" << scaleFactor; // Return retained pointer (caller must release) return (void*)CFBridgingRetain(metalLayer); } } void releaseMetalLayer(void* metalLayerPtr) { if (metalLayerPtr) { CFRelease(metalLayerPtr); qDebug() << "releaseMetalLayer: CAMetalLayer released"; } } #endif // __APPLE__