问题标签 [metal]

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 投票
2 回答
5296 浏览

ios - 如何使用 Swift 将 Float 制服传递给 iOS 金属着色器?

我想将一个浮点数传递给我的金属着色器。我不知道怎么做。

这是我的着色器:

现在我想将它传递给着色器:

如何传递单个浮点值?

0 投票
3 回答
2195 浏览

ios - 我可以从我的金属着色器中获取缓冲区的大小吗?

在我用 Swift 编写的 iOS 应用程序中,我生成了一个 Metal 缓冲区,其中包含:

并将其绑定到我的着色器程序:

在我用 Metal 着色语言编写的着色器程序中,我可以访问缓冲区的大小吗?我想访问缓冲区中的下一个顶点来进行一些微分计算。就像是:

我唯一的选择是将顶点数作为统一传递吗?

0 投票
2 回答
2327 浏览

ios - 如何使用 Swift 从金属纹理中读取半精度浮点数?

我的 Metal 计算内核以 MTLPixelFormat.RG16Float 格式写入纹理,半精度浮点数。这是因为 Metal 不支持写入 32 位浮点纹理。

我需要在我的快速程序中读取这些半精度数字吗?我已将纹理移动到 Swift UInt8 数组中,但我无法弄清楚如何将半精度浮点数转换为 Swift 浮点数。

0 投票
2 回答
2888 浏览

ios - 如何将 CVPixelBuffer 设置为顶点着色器的输入?

我想使用 Apple Metal 渲染路径来处理 CVPixelBuffer。

如何转换 CVPixelBuffer 使其符合顶点着色器的输入?不知道如何从 CVPixelBuffer 中提取颜色/位置值,所以我可以从主机设置它们。

0 投票
4 回答
1518 浏览

ios - 在 Metal 中手动设置一维纹理

我正在尝试用值手动填充一维纹理并将该纹理传递给计算着色器(这些是我想通过代码设置的 2 个像素,它们不代表任何图像)。

由于当前少量的 Metal 示例,我能找到的所有示例都处理通过将加载的字节数据转换为原始字节数据来加载纹理的2D 纹理UIImage,但创建一个虚拟UIImage对象对我来说就像是 hack。

这是我开始的“天真”方式 -

但 Metal 无法识别着色器中的这些值(它得到一个空纹理,第一个值除外)。

我很快意识到 Float 数组可能必须转换为字节数组(例如UInt8),但找不到从任何一个转换[Float]为的[UInt8]方法。

我考虑的另一个可能的选择是使用CVPixelBuffer对象,但这也感觉像是解决问题的方法。

那么解决这个问题的正确方法是什么?

提前致谢。

  • 请注意我不熟悉Objective-C,因此我不确定使用CVPixelBuffer/是否UIImage被夸大了一些应该直截了当的东西。
0 投票
2 回答
1292 浏览

ios - 从 AVFoundation 相机流生成 mipmaped MTLTextures

我正在使用 AVFoundation 来获取相机流。我正在使用此代码从以下位置获取 MTLTextures:

它工作正常,除了生成的MTLTexture对象没有 mipmaped(只有一个 mip 级别)。在本次通话中:

还有第三个参数称为“ textureAtributes ”,我认为可以指定我想要 mipmaped 纹理,但我在文档中没有找到任何字词到底是什么。我也没有找到传递其他内容而不是 NULL 的源代码。

iOS的OpenGLES中有类似的方法,具有相同的参数,并且文档中也没有文字。

0 投票
1 回答
240 浏览

ios - ios8 w/swift iPad only UX/UI 设计

我正在 swift/metal 中实现一个应用程序、iPad、iOS8.1+,仅限横向

主视图有 3 个容器,带有用于启动子进程的左侧拉出/滑出/图标抽屉

左侧滑出将仅包含图标,没有用于数据库访问、麦克风、模板覆盖、视频记录、airplay、iTunes、Dropbox、用户配置等内容的文本

3 个主要容器,视图 1 将保存一个 3d 渲染模型,这将占用 75% 的水平/垂直

视图 2 将在视图 1 中保存渲染模型的 2d 侧投影(也称为侧视图或顶视图)

视图 3 将保存在视图 1 或视图 2 或 pdf 文档或 web 容器中选择的内容的详细子视图

我担心线程,因为这个应用程序将异步拉入大量数据,通过 gpu 缓冲区渲染,然后通过 airplay 将结果推送到视频屏幕。

据说没有“金属视图容器”,但有 GLKView、3d/2d 的 SceneKit。

我需要定义 3 个通用容器视图并构建它们吗?或者这是另一种方式来砍掉现有的金属 GLview?

有人已经建造了这样的金属容器吗?

感谢您的任何积极帮助。

0 投票
1 回答
575 浏览

objective-c - 在 Swift 中从 vDSP DSPSplitComplex 创建金属缓冲区

我正在尝试将 Apple vDSP 的 DSPSplitComplex 结构传递给 Swift 中的 Apple Metal 的 newBufferWithBytesNoCopy 以创建一个 Metal 缓冲区对象:

这会导致错误

在用于创建 bufferIData1 的行中。

DSPSplitComplex 是两个 UnsafeMutablePointer 的结构。如何从两个 UnsafeMutablePointer 的结构中提取 UnsafeMutablePointer?&iData1 不是得到指向结构的指针吗?

我尝试传递 iData1.realp 并指定覆盖 realp 和 imagp 的字节数。这消除了编译错误,但我不确定 realp 和 imagp 是否以连续的方式驻留在内存中。

我在这里先向您的帮助表示感谢。

0 投票
1 回答
1303 浏览

objective-c - Metal:没有匹配函数调用内核中的“threadgroup_barrier”或使用未声明的标识符“mem_threadgroup”

我正在使用 Apple 的Metal编写一个计算函数(又名内核)来进行科学计算。

在内核中,我使用线程组内存空间。(据我了解,它类似于OpenCL 中的本地内存空间 - 如果我错了,请纠正我。)为了同步一些内存读/写操作,我需要放置 threadgroup_barrier(mem_threadgroup)。但是,屏障命令不断产生错误:

即使我删除了函数调用 (threadgroup_barrier()) 的参数,我也会收到错误消息:

我在内核中包含了头文件“metal_stdlib”。我在这里想念什么?我需要使用另一个标题来使用屏障吗?

任何建议将被认真考虑。

这是代码摘要:

0 投票
3 回答
2918 浏览

ios - 在 Swift 中将指针(内存)对齐到 16K 以创建 Metal 缓冲区

我想用newBufferWithBytesNoCopy函数创建一个 Metal 缓冲区,让 CPU 和 GPU 共享内存并练习零拷贝数据传输。

newBufferWithBytesNoCopy 函数接受一个 UnsafeMutablePointer 类型的指针,该指针需要对齐到 16K(16384) 字节。

任何人都可以提供有关如何在 Swift 中创建特定大小的对齐内存的建议吗?