gpt4 book ai didi

macos - SCNView 覆盖导致调整大小时撕裂

转载 作者:行者123 更新时间:2023-12-03 16:40:13 27 4
gpt4 key购买 nike

我使用 SceneKit 来显示 3D 场景(到目前为止,是单个四边形),并使用 overrideSKScene 来显示 2D 叠加层(到目前为止只是一个没有几何图形的 SKNode,尽管我之前使用过单个 SKLabelNode )。这是一堆嵌套的 NSSplitView 中的一个非常简单的 View 。并且在正常使用过程中,它的表现非常出色。当我尝试调整窗口或分割 View 的大小时,问题就出现了——我的漂亮背景中出现了红色区域,这些区域很快就消失了。

我在配备 Radeon Pro 460 的 2016 MBP 上运行此程序,并使用 Quicktime 的屏幕截图捕获了此帧: The red tearing on resizing the view

禁用叠加层会删除红色区域,这让我认为这就是问题所在。禁用统计栏或滚动条(SCNView 的 subview )不会产生任何影响。我最小的 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

有人遇到过类似的问题吗?令人烦恼的是,苹果 sample Fox2 没有类似的问题...

最佳答案

为了获得真正的启发,需要仔细阅读文档,然后注释掉所有内容并一步一步地恢复功能。然后再次阅读文档。

-[SCNSceneRendererDelegate renderer:willRenderScene:atTime:]的讨论部分,解决方案是显而易见的(强调我的):

You should only execute Metal or OpenGL drawing commands (and any setup required to perform them) in this method—the results of modifying SceneKit objects during this method are undefined.

这正是我正在做的事情。我将其误读为修改几何体,因此认为在这里分配纹理是合理的(毕竟,“将”渲染意味着它尚未开始渲染,对吧?),因此会选择最近创建的纹理。不幸的是,在我决定需要叠加之前,这实际上效果非常好!然而,一旦添加了覆盖层,撕裂就出现了。

更新 Material 属性的正确位置似乎是-[SCNSceneRendererDelegate renderer:updateAtTime]。用它来避免像这样的愚蠢的错误!

关于macos - SCNView 覆盖导致调整大小时撕裂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50435054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com