问题标签 [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.
ios - 如何使用 Swift 将 Float 制服传递给 iOS 金属着色器?
我想将一个浮点数传递给我的金属着色器。我不知道怎么做。
这是我的着色器:
现在我想将它传递给着色器:
如何传递单个浮点值?
ios - 我可以从我的金属着色器中获取缓冲区的大小吗?
在我用 Swift 编写的 iOS 应用程序中,我生成了一个 Metal 缓冲区,其中包含:
并将其绑定到我的着色器程序:
在我用 Metal 着色语言编写的着色器程序中,我可以访问缓冲区的大小吗?我想访问缓冲区中的下一个顶点来进行一些微分计算。就像是:
我唯一的选择是将顶点数作为统一传递吗?
ios - 如何使用 Swift 从金属纹理中读取半精度浮点数?
我的 Metal 计算内核以 MTLPixelFormat.RG16Float 格式写入纹理,半精度浮点数。这是因为 Metal 不支持写入 32 位浮点纹理。
我需要在我的快速程序中读取这些半精度数字吗?我已将纹理移动到 Swift UInt8 数组中,但我无法弄清楚如何将半精度浮点数转换为 Swift 浮点数。
ios - 如何将 CVPixelBuffer 设置为顶点着色器的输入?
我想使用 Apple Metal 渲染路径来处理 CVPixelBuffer。
如何转换 CVPixelBuffer 使其符合顶点着色器的输入?不知道如何从 CVPixelBuffer 中提取颜色/位置值,所以我可以从主机设置它们。
ios - 在 Metal 中手动设置一维纹理
我正在尝试用值手动填充一维纹理并将该纹理传递给计算着色器(这些是我想通过代码设置的 2 个像素,它们不代表任何图像)。
由于当前少量的 Metal 示例,我能找到的所有示例都处理通过将加载的字节数据转换为原始字节数据来加载纹理的2D 纹理UIImage
,但创建一个虚拟UIImage
对象对我来说就像是 hack。
这是我开始的“天真”方式 -
但 Metal 无法识别着色器中的这些值(它得到一个空纹理,第一个值除外)。
我很快意识到 Float 数组可能必须转换为字节数组(例如UInt8
),但找不到从任何一个转换[Float]
为的[UInt8]
方法。
我考虑的另一个可能的选择是使用CVPixelBuffer
对象,但这也感觉像是解决问题的方法。
那么解决这个问题的正确方法是什么?
提前致谢。
- 请注意我不熟悉Objective-C,因此我不确定使用
CVPixelBuffer
/是否UIImage
被夸大了一些应该直截了当的东西。
ios - 从 AVFoundation 相机流生成 mipmaped MTLTextures
我正在使用 AVFoundation 来获取相机流。我正在使用此代码从以下位置获取 MTLTextures:
它工作正常,除了生成的MTLTexture对象没有 mipmaped(只有一个 mip 级别)。在本次通话中:
还有第三个参数称为“ textureAtributes ”,我认为可以指定我想要 mipmaped 纹理,但我在文档中没有找到任何字词到底是什么。我也没有找到传递其他内容而不是 NULL 的源代码。
在iOS的OpenGLES中有类似的方法,具有相同的参数,并且文档中也没有文字。
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?
有人已经建造了这样的金属容器吗?
感谢您的任何积极帮助。
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 是否以连续的方式驻留在内存中。
我在这里先向您的帮助表示感谢。
ios - 在 Swift 中将指针(内存)对齐到 16K 以创建 Metal 缓冲区
我想用newBufferWithBytesNoCopy函数创建一个 Metal 缓冲区,让 CPU 和 GPU 共享内存并练习零拷贝数据传输。
newBufferWithBytesNoCopy 函数接受一个 UnsafeMutablePointer 类型的指针,该指针需要对齐到 16K(16384) 字节。
任何人都可以提供有关如何在 Swift 中创建特定大小的对齐内存的建议吗?