是否可以通过 [NSString drawAtPoint] 绘制文本或在 Metal 视图中显示 NSButton?

Is it possible to draw text via [NSString drawAtPoint] or display a NSButton inside a Metal view?

我需要在我的 Metal 应用程序中呈现一些文本。我不想手动执行,而是想使用 Apple 的文本渲染 API.

在一个简单的空 window 的 drawRect 中调用此代码打印字符串:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"Helvetica" size:26], NSFontAttributeName,[NSColor blackColor], NSForegroundColorAttributeName, nil];

NSAttributedString * s = [[NSAttributedString alloc] initWithString:@"Hello!"
attributes: attributes];


[s drawAtPoint:NSMakePoint(300, 300)];

但这在具有 Metal 视图的 window 中不起作用。我想一切都被冲洗掉了?

可能吗?在 Metal 视图顶部显示按钮 (NSButton) 也是一样。

谢谢。

有可能,但并不简单。您需要将 drawViewHierarchyInRectUILabelUIButton 一起使用,并传递从 CVPixelBufferRef 创建的上下文。从那里,您需要使用金属 api 到 link CVPixelBufferRef 到金属纹理,然后您可以正常绘制。我不建议每一帧都这样做。

如果您需要一些用金属呈现的精美 UI,可能有更好的选择,或者您可以只在 UIView 中呈现您的标签、按钮等。你的金属视角。

您的文本需要在 3D 世界中还是在 2D 中叠加在顶部?