问题标签 [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 回答
401 浏览

ios - 金属色附件支持的像素格式

对于屏幕外缓冲区渲染(不在屏幕上绘制),iOS 上的 Metal 是否支持 MTLPixelFormatR32Uint 作为像素格式?换句话说,这样的事情应该起作用吗?

0 投票
1 回答
626 浏览

metal - 如何将 MetalKit 纹理加载器与金属堆一起使用?

我有一组金属纹理,它们作为纹理集存储在 Xcode 资产目录中。我正在使用MTKTextureLoader.newTexture(name:scaleFactor:bundle:options).

然后我使用 aMTLArgumentEncoder将所有纹理编码到 Metal 2 参数缓冲区中。

这很好用。但是,介绍 Metal 2 WWDC 2017 会议建议将参数缓冲区与资源堆结合起来以获得更好的性能,我非常想尝试一下。根据参数缓冲区文档,您不必调用MTLRenderCommandEncoder.useResource参数缓冲区中的每个纹理,只需调用useHeap分配纹理的堆。

但是,我还没有找到MTKTextureLoaderMTLHeap. 它似乎没有从堆中分配纹理的加载选项。

我猜这种方法是:

  • 加载纹理MTKTextureLoader
  • MTLTextureDescriptor对每个纹理的一组对象进行逆向工程
  • 使用纹理描述符创建适当大小的MTLHeap
  • MTLHeap
  • 使用某种方法来复制纹理,replaceBytes也许甚至是MTLBlitCommandEncoder
  • 释放加载的原始纹理MTKTextureLoader

这似乎是一个相当冗长的方法,我还没有看到任何这样的例子,所以我想我会先在这里问一下,以防我遗漏了一些明显的东西。

我应该放弃MTKTextureLoader并搜索一些关于从资产目录加载纹理的 pre-MetalKit 艺术吗?

我正在使用 Swift,但很高兴接受 Objective-C 的答案。

0 投票
3 回答
1769 浏览

swift - 从 MTKView 创建的 UIImage 导致颜色/不透明度差异

当我将 MTKView 的内容捕获到 UIImage 中时,生成的图像看起来质量不同,如下所示:

MTKView 与 UIImageView 相同

我用来生成 UIImage 的代码如下:

由于我没有修改 ciImage 方向 (.orientation(CGImagePropertyOrientation.downMirrored)),因此生成的图像是颠倒的,如上图所示。我保留镜像方向,以便指出两个图像捕获之间的颜色差异。

无论我如何更改 kciOptions 参数(例如,甚至将色彩空间更改为灰度),我都没有看到生成的 UIImage 有任何变化,它看起来比原始图像更暗淡/不饱和。有人对我如何准确地将我在 MTKView 上绘制的内容捕获到 UIImage 有任何建议吗?任何建议将不胜感激。

以下是我的 MTKView 设置,可能证明是相关的:

0 投票
0 回答
168 浏览

scenekit - SceneKit - 网格展开

如何在 SceneKit 中打开 SCNShape?

我需要以一种我可以“镜像”两者的方式来完成,所以当我更改 2D 时,3D 网格会反映这些更改。

有可能做到SceneKit吗?它不是,也许在金属?

谢谢!

在此处输入图像描述在此处输入图像描述

0 投票
0 回答
420 浏览

ios - OpenGLES 到 Metal 迁移

在 OpenGLES 中,通过使用 pass through shaders 来裁剪和缩放像素缓冲区很简单,然后设置

然后使用cropRect适当地设置纹理和顶点坐标,然后设置

Metal中相同事物的等效设置是什么?

0 投票
1 回答
743 浏览

swift - 使用深度数据应用 MPSImageGaussianBlur

我正在尝试在 Apple 的原生相机中模仿肖像模式。

问题是,对深度数据应用模糊效果CIImage对于我想向用户显示的实时预览来说太慢了。

我的代码是任务是:

我想在 GPU 上应用模糊以获得更好的性能。对于这个任务,我在这里找到了 Apple 提供的这个实现。

所以在 Apple 的实现中,我们有这个代码片段:

如何通过 Metal blur 版本将深度数据应用到过滤中?或者换句话说 - 我怎样才能以第二个代码片段的性能速度实现第一个代码片段功能?

0 投票
1 回答
1092 浏览

ios - Metal newBufferWithBytes 用法

我有一个关于分配新金属设备缓冲区的基本问题。我看到的大多数示例代码在设置时创建 MTLBuffer 并且不修改它。但我想知道顶点数据是否在每次渲染调用时都在变化,是否可以每次创建一个新的 MTLBuffer(使用 -[MTLBuffer newBufferWithBytes:length:option])来将数据发送到在 GPU 上运行的着色器,或者,应该 MTLBuffer给定大小创建一次,但每次渲染调用都会修改字节?根据最佳实践,推荐的方法是什么?

0 投票
1 回答
1324 浏览

ios - 金属着色器纹理读取与示例

在金属着色语言中,读取和采样函数访问纹理像素的确切区别是什么,什么时候应该使用哪个?

0 投票
0 回答
3148 浏览

ios - 由于执行期间出现错误,命令缓冲区的执行被中止

我已经坚持了一段时间了;这不是一个特别昂贵的着色器(至少,基于我对 Metal 的非常有限的经验),但我仍然在前几帧收到此消息:

然后我得到这个所有后续帧:

这是顶点着色器,它实际上并没有做任何事情:

这是我的片段着色器,它将颜色从 YUV 转换为 RGB:

这是我的 Swift 代码,将它们组合在一起:

0 投票
1 回答
187 浏览

xcode - 在金属纹理集中,金属 1v2、2v2、... 4v1 是什么意思?

XCode 为 Attributes Inspector 中的 Texture Sets 提供了一组可选择的开/关功能:

内存:1GB 2GB 3GB 4GB

显卡:金属 1v2 金属 2v2 金属 3v1 金属 3v2 金属 4v1

这些是什么意思?