我试图移动基于NSView的应用程序以开始将GPU与Metal一起使用。因此,我像这样添加了CAMetalLayer
:
[self setWantsLayer:YES];
self.layerContentsRedrawPolicy = NSViewLayerContentsRedrawDuringViewResize;
并像这样制作衬里层:
- (CALayer*)makeBackingLayer
{
id <MTLDevice> device = MTLCreateSystemDefaultDevice();
CAMetalLayer *backingLayer = [CAMetalLayer layer];
backingLayer.opaque = YES;
backingLayer.device = device;
backingLayer.pixelFormat = MTLPixelFormatBGRA8Unorm;
backingLayer.framebufferOnly = YES;
[backingLayer setDelegate:self];
return backingLayer;
}
我在CustomNSView
类中编写所有这些代码是从CustomParentNSView
类继承的,该类使用NSGraphicsContext
在屏幕上绘制一些东西。现在,由于我将CustomNSView
移到支持NSView的图层上,因此当我尝试调用时:
[NSGraphicsContext currentContext]
这将返回NULL。
我还尝试调查了在以前的实现NSGraphicsContext
中生成的位置,结果发现,我的应用程序无处设置它。 NSView
本身是在调用NSGraphicsContext
之前从displayIfNeeded
内部的某个地方设置drawRect
。
谢谢!