mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 17:40:39 +00:00
ObjC helpers MTL::Drawable, CALayer, CAMetalLayer
Get_Texture(MTL::Drawable *drawable); Get_Layer(MTL::Drawable *drawable); CALayer_GetSize(void *layerHandle, int &width, int &height); CAMetalLayer_Set_drawableSize(void *layerHandle, int w, int h); CAMetalLayer_Set_device(void *layerHandle, MTL::Device *device); CAMetalLayer_Set_framebufferOnly(void *layerHandle, bool enable); CAMetalLayer_Set_pixelFormat(void *layerHandle, MTL::PixelFormat format); CA::MetalDrawable *CAMetalLayer_nextDrawable(void *layerHandle);
This commit is contained in:
committed by
Baldur Karlsson
parent
0499c2af96
commit
1f6b2abc12
@@ -29,4 +29,12 @@
|
||||
namespace ObjC
|
||||
{
|
||||
void Get_defaultLibraryData(bytebuf &buffer);
|
||||
MTL::Texture *Get_Texture(MTL::Drawable *drawable);
|
||||
CA::MetalLayer *Get_Layer(MTL::Drawable *drawable);
|
||||
void CALayer_GetSize(void *layerHandle, int &width, int &height);
|
||||
void CAMetalLayer_Set_drawableSize(void *layerHandle, int w, int h);
|
||||
void CAMetalLayer_Set_device(void *layerHandle, MTL::Device *device);
|
||||
void CAMetalLayer_Set_framebufferOnly(void *layerHandle, bool enable);
|
||||
void CAMetalLayer_Set_pixelFormat(void *layerHandle, MTL::PixelFormat format);
|
||||
CA::MetalDrawable *CAMetalLayer_nextDrawable(void *layerHandle);
|
||||
};
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "metal_helpers_bridge.h"
|
||||
#import <AppKit/AppKit.h>
|
||||
#import <Foundation/NSStream.h>
|
||||
#import <QuartzCore/CAMetalLayer.h>
|
||||
|
||||
void ObjC::Get_defaultLibraryData(bytebuf &buffer)
|
||||
{
|
||||
@@ -38,3 +39,69 @@ void ObjC::Get_defaultLibraryData(bytebuf &buffer)
|
||||
memcpy(buffer.data(), nsData.bytes, buffer.size());
|
||||
dispatch_release(data);
|
||||
}
|
||||
|
||||
MTL::Texture *ObjC::Get_Texture(MTL::Drawable *drawableHandle)
|
||||
{
|
||||
id<CAMetalDrawable> drawable = id<CAMetalDrawable>(drawableHandle);
|
||||
return (MTL::Texture *)drawable.texture;
|
||||
}
|
||||
|
||||
CA::MetalLayer *ObjC::Get_Layer(MTL::Drawable *drawableHandle)
|
||||
{
|
||||
id<CAMetalDrawable> drawable = id<CAMetalDrawable>(drawableHandle);
|
||||
return (CA::MetalLayer *)drawable.layer;
|
||||
}
|
||||
|
||||
void ObjC::CALayer_GetSize(void *layerHandle, int &width, int &height)
|
||||
{
|
||||
CALayer *layer = (CALayer *)layerHandle;
|
||||
RDCASSERT([layer isKindOfClass:[CALayer class]]);
|
||||
|
||||
const CGFloat scaleFactor = layer.contentsScale;
|
||||
width = layer.bounds.size.width * scaleFactor;
|
||||
height = layer.bounds.size.height * scaleFactor;
|
||||
}
|
||||
|
||||
void ObjC::CAMetalLayer_Set_drawableSize(void *layerHandle, int w, int h)
|
||||
{
|
||||
CAMetalLayer *metalLayer = (CAMetalLayer *)layerHandle;
|
||||
RDCASSERT([metalLayer isKindOfClass:[CAMetalLayer class]]);
|
||||
|
||||
CGSize cgSize;
|
||||
cgSize.width = w;
|
||||
cgSize.height = h;
|
||||
metalLayer.drawableSize = cgSize;
|
||||
}
|
||||
|
||||
void ObjC::CAMetalLayer_Set_device(void *layerHandle, MTL::Device *device)
|
||||
{
|
||||
CAMetalLayer *metalLayer = (CAMetalLayer *)layerHandle;
|
||||
RDCASSERT([metalLayer isKindOfClass:[CAMetalLayer class]]);
|
||||
|
||||
metalLayer.device = id<MTLDevice>(device);
|
||||
}
|
||||
|
||||
void ObjC::CAMetalLayer_Set_framebufferOnly(void *layerHandle, bool enable)
|
||||
{
|
||||
CAMetalLayer *metalLayer = (CAMetalLayer *)layerHandle;
|
||||
RDCASSERT([metalLayer isKindOfClass:[CAMetalLayer class]]);
|
||||
|
||||
metalLayer.framebufferOnly = enable ? YES : NO;
|
||||
}
|
||||
|
||||
void ObjC::CAMetalLayer_Set_pixelFormat(void *layerHandle, MTL::PixelFormat format)
|
||||
{
|
||||
CAMetalLayer *metalLayer = (CAMetalLayer *)layerHandle;
|
||||
RDCASSERT([metalLayer isKindOfClass:[CAMetalLayer class]]);
|
||||
|
||||
metalLayer.pixelFormat = (MTLPixelFormat)format;
|
||||
}
|
||||
|
||||
CA::MetalDrawable *ObjC::CAMetalLayer_nextDrawable(void *layerHandle)
|
||||
{
|
||||
CAMetalLayer *metalLayer = (CAMetalLayer *)layerHandle;
|
||||
RDCASSERT([metalLayer isKindOfClass:[CAMetalLayer class]]);
|
||||
|
||||
CA::MetalDrawable *drawable = (__bridge CA::MetalDrawable *)[metalLayer nextDrawable];
|
||||
return drawable;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user