NSGraphicsContext становится NULL после установки CAMetalLayer - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь переместить свое приложение на основе NSView, чтобы начать использовать графический процессор с 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. Должно ли это быть ПУСТО (NULL) для NSViews с поддержкой слоя?

Я также попытался выяснить, где в предыдущей реализации генерировался NSGraphicsContext, и, как оказалось, мое приложение нигде не устанавливало его. NSView сам устанавливал NSGraphicsContext где-то внутри displayIfNeeded, перед тем как вызвать drawRect.

  1. Могу ли я по-прежнему использовать NSGraphicsContext для рендеринга в NSView, даже если он поддерживается слоем?

Спасибо!

...