Наложение SCNView вызывает разрыв при изменении размера - PullRequest
0 голосов
/ 20 мая 2018

Я использую SceneKit для отображения 3D-сцены (пока что один квад) и overlaySKScene для отображения 2D-оверлея (который пока является просто SKNode без геометрии, хотя ранее я использовал один SKLabelNode).Это довольно простое представление внутри множества вложенных NSSplitView.И при нормальном использовании он работает блестяще.Проблема возникает, когда я пытаюсь изменить размер окна или разделенного вида - через мой красивый фон просачиваются участки красного цвета, которые вскоре исчезают.

Я запускаю это на MBP 2016 с Radeon Pro 460 и захватил этот кадр с помощью снимка экрана Quicktime: The red tearing on resizing the view

Отключение наложения удаляеткрасные области, что заставляет меня думать, что это проблема.Отключение панели статистики или прокрутки (дочерний вид SCNView) не оказывает никакого влияния.Мой самый минимальный подкласс SKScene определяется как

@implementation TestOverlay
- (instancetype) initWithSize: (CGSize) size
{
    if( self = [super initWithSize: size] )
    {
        // Setup the default state
        self.scaleMode = SKSceneScaleModeResizeFill;
        self.userInteractionEnabled = NO;
        self.backgroundColor = [NSColor blackColor];
    }
    return self;
}
@end

Кто-нибудь сталкивался с подобными проблемами раньше?Досадно, что у яблочного образца Fox2 подобных проблем нет ...

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Для истинного просветления нужно внимательно прочитать документацию, затем все закомментировать и восстанавливать функциональность по одному шагу за раз.А затем прочитайте документацию снова.

В разделе обсуждения - [SCNSceneRendererDelegate рендерер: willRenderScene: atTime:] , решение очевидно (выделено мной):

Вы должны выполнить толькоКоманды рисования металла или OpenGL (и любая настройка, необходимая для их выполнения) в этом методе - результаты изменения объектов SceneKit во время этого метода не определены .

Это именно то, что яделал.Я неверно истолковал это как изменение геометрии, поэтому подумал, что здесь целесообразно назначить текстуры (в конце концов, «будет» отображать означает, что он еще не начал рендеринг, верно?), И поэтому выбрал самую последнюю созданную текстуру.И, к сожалению, прежде чем я решил, что мне нужно наложение, это на самом деле работает отлично!Как только наложение было добавлено, однако, разрыв появился.

Правильное место для обновления свойств материала: - [SCNSceneRendererDelegate renderer: updateAtTime] .Используйте это, чтобы избежать глупых ошибок, как этот, ребята!

0 голосов
/ 20 мая 2018

Попробуйте сбросить SMC (System Management Controller).Это помогло мне решить аналогичную проблему, но с Autodesk Maya 2018 на MBP 2017 (Radeon 560).

Итак, выключите и отключите MBP.

На встроенной клавиатуре нажмите и удерживайте клавишу Shift - Option - Control на левой стороне и нажмите Кнопка питания и удерживайте все это в течение 10 секунд, затем отпустите клавиши.

Подключите адаптер питания и затем включите Mac в обычном режиме.

Надеюсь, это поможет.

PS Если это не помогает, попробуйте проверить /снимите флажок Automatic graphics switching в System Preferences - Energy Saver, чтобы увидеть, есть ли разница.

...