问题标签 [metalkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
597 浏览

ios - 金属多个计算着色器与单个

我正在运行多个(4 或 5 个)计算着色器,它们处理相同的数据并提供不同的输出。然而,用户可以启用其中的一个、部分或全部。从性能考虑我有两个选择:

  1. 将所有这些计算着色器合并为一个,并一次计算所有内容。然后根据用户输入,有选择地显示数据。这需要单次传递,但计算着色器的参数数量可能会增加(最多 8 个 MTLBuffers),

  2. 将它们拆分为多个着色器并使用多个通道来计算每条数据。每遍使用不同的计算命令编码器。

从性能角度来看,数据已经驻留在 GPU 中的多次传递是否不好?从性能考虑推荐哪个选项?

0 投票
0 回答
404 浏览

swift - ios中单个金属层中的多个纹理

我目前正在研究金属(ios)。我最近可以在 metalLayer 上渲染单个纹理。但是当我尝试在同一金属层上渲染另一个纹理时出现问题。如果有可能在单个金属层上渲染多个纹理,请解释一下?

0 投票
1 回答
399 浏览

swift - 金属着色语言中平移手势的纹理重复

我是金属着色语言的新手。所以你的友好指导会很有帮助。我只是使用金属重复纹理,如下图所示 (图像序列)。 但它似乎并不平滑。我怎样才能让它看起来像金属点的以下链接中所做的那样平滑线。(重叠金属点基元和混合

目前我所做的是在我的手势中的每个触摸点为顶点缓冲区(MTLBuffer)分配内存。

代码:

我在平移手势识别器中调用此方法。但这会导致 FPS 下降。所以我的问题是不知道在金属层上的单个平移上会添加多少纹理,我如何为帧缓冲区分配内存。

0 投票
1 回答
655 浏览

ios - 我可以使用 MetalKit 在 GPU 上对 JSON 进行编码和解码吗?

我有这种情况,我的数据库是一个巨大的 JSON,以至于解码和编码需要很长时间并且我的用户体验受到损害。

我不断地将我的数据库与通过 BLE 通信的设备同步,并且数据库随着时间的推移而变得更大。

我过去使用 MetalKit 来加速图像过滤,但我不是专业的金属程序员,也没有工具来确定我是否可以使用金属实现对 JSON 的解码/编码。

0 投票
2 回答
1210 浏览

ios - 组合多个MTKView/CAMetalLayer显示

我正在使用多个 MTKViews 在屏幕上显示不同的内容以及普通的 UIView(用于显示 UI)。我想将这些 MTKViews 的呈现与同一个时钟同步。有没有办法同步这些 MTKViews 的呈现?原则上,我可以将这些视图的布局组合到一个 MTKView 中,但这会破坏代码的模块化,并且不确定我是否会在过度工作的情况下实现任何性能。

0 投票
0 回答
811 浏览

ios - 如何渲染 SCNRenderer 生成的 MTLTexture?

目前我有一些物体的 3D 场景。我想将其渲染为 2D 纹理(例如 MTLTexture)。之后,我想在屏幕上实时显示这个渲染纹理(例如在 MTKView 或 SKScene 中),并同时将其写入电影中。

现在我有 SCNRenderer 和 offscreenTexture 用于渲染:

和 MTKView 在屏幕上呈现它:

在每一帧上,我都试图将场景绘制到纹理并将其呈现在 MTKView

这种技术甚至可以工作,但太慢了。我设法用正确的 fps 和另一个场景视图来做到这一点。我创建了一个平面并将 offscreenTexture 作为材质附加到这个平面上。但我想在 2D 引擎中进行(因为我认为它应该更简单)(并且因为我希望能够像 2D 图像一样在屏幕上移动它)。

PS如果您对SCNView有所了解,请看我的另一个问题。也许您会提出更好的解决方案。基本上我想要 1)向用户呈现全屏背景和 3D 对象(使用透视投影)(简单) 2)我希望能够将 SCNView 的一部分渲染到电影中。(我知道如何用全屏纹理来做,但我没有找到如何裁剪它的快速解决方案)

更新 当我看到这个电话的主要问题时:

当我的应用程序大约需要“0.013198”秒,但一段时间后只需要“5.388259e-05”秒并且一切正常。

0 投票
0 回答
350 浏览

metal - 颜色的金属 Alpha 值不变

在每个顶点的示例绘图三角形程序中,我传递了这个片段着色器。

由于 Alpha 为零,因此不应有任何输出。更改 Alpha 不起作用

输出不随 Alpha 变化而变化

0 投票
0 回答
468 浏览

meta - 如何更改 MTKView 当前可绘制大小

正如苹果文档声明的那样,MTKView 当前可绘制的默认大小是从当前视图的大小派生的,以本机像素为单位。有没有办法让 MTKView 当前可绘制设备屏幕大小的一半?

0 投票
1 回答
167 浏览

metal - 有没有办法让 Metal 给我们每个实例的顶点?

有没有办法让 Metal 给我们每个实例的顶点?

我正在绘制贝塞尔线。为此,我想更改每条贝塞尔线的顶点数

有什么办法吗?

0 投票
0 回答
325 浏览

ios - 使用 CoreML 推断金属纹理子区域

我正在构建一个 iOS 应用程序,它可以将相机中的帧实时渲染到金属纹理。我想使用 CoreML 对金属纹理的子区域执行样式传输(想象相机输出为 2x2 网格,其中 4 个正方形中的每一个都用作样式传输网络的输入,输出粘贴回显示的纹理)。我试图弄清楚如何最好地在 Metal 管道中使用 CoreML 来用 mlmodel 的输出填充纹理的非重叠子区域(希望不会将 mlmodel 分解为 MPSNNGraph)。是否可以直接将 MTLTexture 或 MTLBuffer 提供给 coreML 模型?我想尽可能避免格式转换(为了速度)。

我的 mlmodel 在其输入和输出中采用 CVPixelBuffers。可以改为采用 MTLTextures 吗?

我尝试的第一件事是:将给定的样本缓冲区切割成子区域(通过复制像素数据 ugh),推断每个子区域,然后将它们一起粘贴到一个新的样本缓冲区中,然后将其转换为 MTLTexture 并显示。这种方法根本没有利用金属,因为直到推理之后才创建纹理。它还有很多迂回的转换/复制/粘贴操作,这会减慢一切。

我尝试的第二件事是:将相机数据直接发送到 MTLTexture,推断样本缓冲区的子区域,使用 MTLTexture.replace(region:...withBytes:) 为每个子区域粘贴到当前显示的纹理中。但是,MTLTexture.replace() 使用 cpu,对于实时视频来说不够快。

我即将尝试的想法是:将我的 mlmodel 转换为 MPSNNGraph,获取帧作为纹理,使用 MPSNNGraph 对子区域进行推理,并显示输出。我想我会先在这里检查一下,然后再完成转换 mlmodel 的所有工作。抱歉,如果这太宽泛了,我主要在 tensorflow 中工作,在这里有点超出我的深度。