问题标签 [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.
ios - 金属色附件支持的像素格式
对于屏幕外缓冲区渲染(不在屏幕上绘制),iOS 上的 Metal 是否支持 MTLPixelFormatR32Uint 作为像素格式?换句话说,这样的事情应该起作用吗?
metal - 如何将 MetalKit 纹理加载器与金属堆一起使用?
我有一组金属纹理,它们作为纹理集存储在 Xcode 资产目录中。我正在使用MTKTextureLoader.newTexture(name:scaleFactor:bundle:options)
.
然后我使用 aMTLArgumentEncoder
将所有纹理编码到 Metal 2 参数缓冲区中。
这很好用。但是,介绍 Metal 2 WWDC 2017 会议建议将参数缓冲区与资源堆结合起来以获得更好的性能,我非常想尝试一下。根据参数缓冲区文档,您不必调用MTLRenderCommandEncoder.useResource
参数缓冲区中的每个纹理,只需调用useHeap
分配纹理的堆。
但是,我还没有找到MTKTextureLoader
与MTLHeap
. 它似乎没有从堆中分配纹理的加载选项。
我猜这种方法是:
- 加载纹理
MTKTextureLoader
MTLTextureDescriptor
对每个纹理的一组对象进行逆向工程- 使用纹理描述符创建适当大小的
MTLHeap
- 从
MTLHeap
- 使用某种方法来复制纹理,
replaceBytes
也许甚至是MTLBlitCommandEncoder
- 释放加载的原始纹理
MTKTextureLoader
这似乎是一个相当冗长的方法,我还没有看到任何这样的例子,所以我想我会先在这里问一下,以防我遗漏了一些明显的东西。
我应该放弃MTKTextureLoader
并搜索一些关于从资产目录加载纹理的 pre-MetalKit 艺术吗?
我正在使用 Swift,但很高兴接受 Objective-C 的答案。
swift - 从 MTKView 创建的 UIImage 导致颜色/不透明度差异
当我将 MTKView 的内容捕获到 UIImage 中时,生成的图像看起来质量不同,如下所示:
我用来生成 UIImage 的代码如下:
由于我没有修改 ciImage 方向 (.orientation(CGImagePropertyOrientation.downMirrored)),因此生成的图像是颠倒的,如上图所示。我保留镜像方向,以便指出两个图像捕获之间的颜色差异。
无论我如何更改 kciOptions 参数(例如,甚至将色彩空间更改为灰度),我都没有看到生成的 UIImage 有任何变化,它看起来比原始图像更暗淡/不饱和。有人对我如何准确地将我在 MTKView 上绘制的内容捕获到 UIImage 有任何建议吗?任何建议将不胜感激。
以下是我的 MTKView 设置,可能证明是相关的:
ios - OpenGLES 到 Metal 迁移
在 OpenGLES 中,通过使用 pass through shaders 来裁剪和缩放像素缓冲区很简单,然后设置
然后使用cropRect适当地设置纹理和顶点坐标,然后设置
Metal中相同事物的等效设置是什么?
swift - 使用深度数据应用 MPSImageGaussianBlur
我正在尝试在 Apple 的原生相机中模仿肖像模式。
问题是,对深度数据应用模糊效果CIImage
对于我想向用户显示的实时预览来说太慢了。
我的代码是任务是:
我想在 GPU 上应用模糊以获得更好的性能。对于这个任务,我在这里找到了 Apple 提供的这个实现。
所以在 Apple 的实现中,我们有这个代码片段:
如何通过 Metal blur 版本将深度数据应用到过滤中?或者换句话说 - 我怎样才能以第二个代码片段的性能速度实现第一个代码片段功能?
ios - Metal newBufferWithBytes 用法
我有一个关于分配新金属设备缓冲区的基本问题。我看到的大多数示例代码在设置时创建 MTLBuffer 并且不修改它。但我想知道顶点数据是否在每次渲染调用时都在变化,是否可以每次创建一个新的 MTLBuffer(使用 -[MTLBuffer newBufferWithBytes:length:option])来将数据发送到在 GPU 上运行的着色器,或者,应该 MTLBuffer给定大小创建一次,但每次渲染调用都会修改字节?根据最佳实践,推荐的方法是什么?
ios - 金属着色器纹理读取与示例
在金属着色语言中,读取和采样函数访问纹理像素的确切区别是什么,什么时候应该使用哪个?
ios - 由于执行期间出现错误,命令缓冲区的执行被中止
我已经坚持了一段时间了;这不是一个特别昂贵的着色器(至少,基于我对 Metal 的非常有限的经验),但我仍然在前几帧收到此消息:
然后我得到这个所有后续帧:
这是顶点着色器,它实际上并没有做任何事情:
这是我的片段着色器,它将颜色从 YUV 转换为 RGB:
这是我的 Swift 代码,将它们组合在一起:
xcode - 在金属纹理集中,金属 1v2、2v2、... 4v1 是什么意思?
XCode 为 Attributes Inspector 中的 Texture Sets 提供了一组可选择的开/关功能:
内存:1GB 2GB 3GB 4GB
显卡:金属 1v2 金属 2v2 金属 3v1 金属 3v2 金属 4v1
这些是什么意思?