macos - 使用 Metal 绘制位图

标签 macos cocoa metal

问题很简单。在 Windows 上,您可以使用 BitBlt() 来绘制到屏幕上。在 OS X 上,您通常可以使用 OpenGL,但是如何使用 Apple 的新 Metal 框架将位图绘制到屏幕上?我在苹果 Metal 引用资料中找不到任何有值(value)的东西。 我现在使用 Core Graphics 进行绘图部分,但由于我的位图一直在更新,我觉得我应该转向 Metal 以减少开销。

最佳答案

非常简短的答案是这样的:首先,您需要使用 Metal 设置一个标准渲染管道,如果您对渲染管道一无所知,那么这是一项工作(注意:但这可以通过以下方式简化)通过渲染具有两个三角形的四边形来避免 3D 内容,只需给出顶点的 xy 坐标)。 Apple 有很多示例代码展示了如何设置标准渲染管道,最简单的可能是 MetalImageProcessing,因此您可以将其剥离(即使它使用绘制过于复杂的计算着色器,您也希望以替代标准顶点和片段着色器)。

其次,您需要了解顶点和片段着色器的工作原理以及如何用它们绘制内容,请参阅shadertoy 了解这一点。

刚刚注意到用户的最后评论,如果您有一个表示图像的字节数组,那么您可以从中创建一个 MTLTexture 并将其渲染到屏幕上,请参阅上面 Apple 的示例,但将计算着色器更改为标准顶点和片段着色器以获得更快的性能。

关于macos - 使用 Metal 绘制位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38649188/

相关文章:

iphone - iPhone 中 NSMutableArray 的排序

swift - 如何使 macOS 应用程序中的 NSButton 具有突出显示的边框?

ios - 我们是否需要为每次绘制创建一个新的 RenderPassDescriptor,或者我们可以缓存它并重用它?

swift - 电影创建后 AVAssetWriter 内存分配猛增

macos - Mac App 因使用非公共(public) API 而被拒绝

node.js - Node 未从 Gruntfile 中找到依赖项

linux - Wine 升级到版本 1.4.1 后 DLL 文件丢失

macos - SwiftUI 列表选中行文本颜色

cocoa - 为什么数据不会显示在我的 NSTableView(基于 View )中?

swift - 如何更改 SCNParticleSystem 中粒子的亮度?