代码之家  ›  专栏  ›  技术社区  ›  user007

NSGraphicsContext在设置CametLayer后变为空

  •  0
  • user007  · 技术社区  · 7 年前

    我试图移动基于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。

    1. 对于层备份的NSView,该值是否应为空?

    我还试着调查上一次实现中的位置 NSGraphicsContext 结果是,我的应用程序没有设置任何地方。 NSView 是它自己设定的 NSGraphicsContext 从地球内部的某个地方 displayIfNeeded ,打电话之前 drawRect .

    1. 我是否仍然可以使用NSGraphicsContext渲染到NSView,即使它是层备份的?

    谢谢

    0 回复  |  直到 7 年前