2 votes

La superposition SCNView provoque des déchirures lors du redimensionnement

J'utilise SceneKit pour afficher une scène 3D (jusqu'à présent, un seul quad), et l'overlaySKScene pour afficher une superposition 2D (qui jusqu'à présent n'est qu'un SKNode sans géométrie, même si j'avais auparavant utilisé un seul SKLabelNode). C'est une vue assez simple à l'intérieur d'un ensemble de NSSplitView imbriquées. Et lors d'une utilisation normale, cela fonctionne brillamment. Le problème survient lorsque j'essaie de redimensionner la fenêtre ou la vue divisée - j'obtiens des zones rouges qui traversent mon joli arrière-plan, mais qui disparaissent peu après.

Je l'exécute sur un MBP 2016 avec une Radeon Pro 460, et j'ai capturé cette image en utilisant la capture d'écran de Quicktime : The red tearing on resizing the view

La désactivation de la superposition supprime les zones rouges, ce qui me fait penser que le problème vient de là. La désactivation de la barre de statistiques ou du défileur (une vue enfant de la SCNView) n'a aucun impact. Ma sous-classe SKScene la plus minimale est définie comme suit

@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

Quelqu'un a-t-il déjà rencontré ce genre de problème ? Malheureusement, l'échantillon Fox2 d'Apple n'a pas de problèmes similaires...

1voto

sbwilson Points 169

Pour être vraiment éclairé, il faut lire attentivement la documentation, puis tout commenter et restaurer les fonctionnalités étape par étape. Et puis relire la documentation.

Dans la section de discussion de -[SCNSceneRendererDelegate renderer:willRenderScene:atTime :] la solution est évidente (c'est moi qui souligne) :

Vous ne devez exécuter que des commandes de dessin Metal ou OpenGL (et toute configuration requise pour les exécuter) dans cette méthode- les résultats de la modification des objets SceneKit pendant cette méthode sont indéfinis .

C'est exactement ce que je faisais. J'avais mal compris qu'il s'agissait de modifier la géométrie, et j'ai donc pensé qu'il serait raisonnable d'assigner des textures ici (après tout, "va" rendre signifie que le rendu n'a pas encore commencé, n'est-ce pas ? Et malheureusement, avant que je ne décide que j'avais besoin d'une superposition, cela fonctionne en fait parfaitement bien ! Mais dès que la superposition a été ajoutée, le déchirement est apparu.

L'endroit correct pour mettre à jour les propriétés des matériaux semble être -[SCNSceneRendererDelegate renderer:updateAtTime] . Utilisez cela pour éviter les bugs stupides comme celui-ci, les amis !

0voto

Gigantic Points 4447

Essayez de réinitialiser le SMC (System Management Controller). Cela m'a aidé à résoudre un problème similaire mais avec Autodesk Maya 2018 sur MBP 2017 (Radeon 560).

Donc, éteignez et débranchez votre MBP.

Sur le clavier intégré, appuyez et maintenez la touche Shift - Option - Control sur le côté gauche et appuyez sur la touche Power Button et maintenez-les toutes enfoncées pendant 10 secondes, puis relâchez les touches.

Branchez l'adaptateur d'alimentation, puis allumez le Mac normalement.

J'espère que cela vous aidera.

P.S. Au cas où cela n'aiderait pas, essayez de cocher/décocher Automatic graphics switching option dans System Preferences - Energy Saver pour voir s'il y a une différence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X