问题标签 [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 投票
1 回答
355 浏览

ios - 如何有效地合成 Quartz 和 OpenGL / Metal 绘图?

我有一个游戏需要一些高级绘图结构,比如复杂的贝塞尔曲线和填充(随每一帧而变化),我想用 OpenGL 或 Metal 中绘制的一些更原始的东西来合成/覆盖。有没有一种有效(高性能)的方法来做到这一点?

  1. 我可以简单地在 OpenGL 层上添加一个石英绘图层,还是会受到巨大的性能影响?
  2. 我应该将我的 Quartz 绘图捕获到位图并将其作为纹理推送到 OpenGL 中吗?还是在每一帧上都这样做会非常慢?
  3. 我可以换一种方式,将我的 OpenGL 渲染捕获到我用 Quartz 绘制的位图中吗?
0 投票
1 回答
1033 浏览

ios - 为什么覆盖 UIView.drawRect 会出现“调用 -display 无效”消息?

注意:我不寻求解决实际问题。我好奇地问。

我有一个UIView在应用程序主视图中使用的自定义子类。它有一个金属层类:

我注意到,如果我覆盖-(void)drawRect:(CGRect)rect方法,则会开始出现一条错误消息:

<CAMetalLayer: 0x17005dc70>: calling -display has no effect.

更有趣的是,即使我像这样覆盖它,它也会出现:

据我了解,这根本不可能有任何区别,因为根据 OOP 的基本原则,这样的覆盖(仅调用基类)不应该修改程序的行为。

这个错误信息到底是什么意思?为什么会出现?

0 投票
1 回答
512 浏览

ios - Mantle MTLModel 的 copyWithZone:深拷贝?

假设我们有一个MTLModel的子类,并且该类立即获得copyWithZone:的实现。但是我想知道框架是否使用深拷贝。例如,如果该类具有数组或对象属性,则它们是否使用复制参考或新分配的对象。非常感谢。

0 投票
1 回答
321 浏览

cocoa-touch - UIView.touchesMoved:locationInView 总是返回 0,0

这一定是一个愚蠢的错误,但是总是在我的or方法中locationInView返回的原因是什么?(0.0, 0.0)ViewControllertouchesBegantouchesMoved

userInteractionEnabled设置为true,所以这不是原因..

我正在用 Swift 开发一个 Metal 项目。视图的唯一子视图是 a UIImageView(其.image属性包含 Metal GPU 渲染的结果。

编辑:这仅发生在我的 iPhone 6 上,它也发生在其他项目中。在模拟器上一切正常。

有任何想法吗?

0 投票
0 回答
420 浏览

ios - 在 iPhone 5s 上运行 Metal 和 Swift

很高兴找到Warren Moore 的使用 Metal 和 Swift 的示例项目,但是当我尝试在我的设备(5s、8.2、XCode 6.2)上运行它时,我收到一条错误消息,说Info.plist [...] specifies device capability requirements, which are not met by Davis's iPhone.

据我所知,唯一相关Key的 splist是:

我必须假设这armv7意味着armv7 或更晚,在这种情况下,5s 应该有资格。无论如何,在WWDC 上,他们一直说它可以在 5s 上推出的 A7 上运行。

我试过的:

  1. 我删除了要求(感觉是个坏主意),之后我得到了fatal error: unexpectedly found nil while unwrapping an Optional value. 稍微挖掘一下表明MTLCreateSystemDefaultDevice()正在返回nil
  2. 这让我想到了一个类似的问题,解决方案是更新 iOS,但 Xcode 和 iOS 都是最新的。
0 投票
2 回答
1287 浏览

ios - 如何解除 id金属iOS?

我正在使用 id<MTLBuffer> vertexBuf = [device newBufferWithLength:count * sizeof(float) options:0];
如何释放 vertexBuf 内存,它大大增加了内存。在苹果的文档中没有提示要释放 MTLBuffers。在我的情况下,我不能再次重用它。我没有尝试 任何改进,因为我的项目启用了 ARC vertexBuf = nil;,所以我无法使用。[vertexBuf release]有什么办法可以释放内存?

编辑:
我可以重用,但 OpenGLES2glDeleteBuffers中有一个选项在许多情况下都很有用。所以我正在寻找与金属类似的东西。

0 投票
3 回答
4379 浏览

ios - iOS-Metal:如何清除深度缓冲区?类似于 OpenGL 中的 glClear(GL_DEPTH_BUFFER_BIT)

我需要清除glClear(GL_DEPTH_BUFFER_BIT)在 OpenGL 中使用的深度缓冲区,如何在金属中执行?我已经浏览了苹果的文档,没有任何提示。

0 投票
1 回答
1534 浏览

ios - 在 Metal 中动态更改顶点颜色的正确方法是什么?

我正在尝试进入金属。我已经做了一些 OpenGL,但已经有好几年了,所以我想不出合适的方法来做到这一点。我一直在使用 Ray Wenderlich 的 Metal 教程介绍(http://www.raywenderlich.com/81399/ios-8-metal-tutorial-swift-moving-to-3d

我有一个顶点结构:

和一个顶点缓冲区类:

基于其他一些应用程序的状态,我想更新一个或多个顶点的 RGBA。使用这些VertexBuffer.updateColor...方法,我正在更新VertexBuffer.vertexData. 我有一个 CADisplayLink 连接到以下功能:

问题是,我不知道这是否是正确的方法。我的目标是经常更新某些顶点的颜色,但是每次修改顶点数据并从中创建一个 MTLBuffer 的答案是什么?或者是其他东西?

任何帮助将不胜感激!

0 投票
0 回答
1242 浏览

gpgpu - 金属计算功能限制

我经历过MTLBuffer计算密集型着色器函数往往会在所有threadgroups完成之前停止计算。当我使用MTLComputePipelineStateandMTLComputeCommandEncoder来模糊具有非常大的模糊半径的图像时,生成的图像被处理了一半,实际上可以看到一半完成threadgroups。我没有将其缩小到模糊半径的确切数量,但 16 像素可以正常工作,32 已经太多了,甚至没有计算出一半的组。

那么,着色器函数调用需要多长时间才能完成或类似的事情是否有任何限制?我刚刚完成了关于如何使用 Metal 框架的大部分文档,我不记得偶然发现过任何这样的陈述。

编辑

因为在我的情况下,问题不是简单的超时,而是一些内部错误,我将添加一些代码。

最昂贵的部分是块匹配算法,它在两个图像(即电影中的连续帧)中找到匹配块

我在 960x540px 图像上使用该着色器。使用searchSize9 和kernelSize8 时,着色器会在整个图像上运行。将 searchSize 更改为 10,着色器将提前停止并显示错误代码 1。

0 投票
1 回答
469 浏览

ios - iOS 8.3 - Metal,在展开可选值时发现 nil

在 Apple 发布 iOS 8.3 之前,我的代码可以工作,但是由于更新的 XCode 抱怨找到了一个 nil 值,即使我的值都不是 nil(我在调试时验证了这一点)。

为了理智,我重新编写了我的程序,用 Metal 在屏幕上渲染一个简单的三角形,但抛出了同样的错误。我有一个包含 3 个顶点的数组,然后将其乘以数组大小以获得缓冲区的大小并传入,OptionCPUCacheModeDefault因为我认为传递nil参数可能是导致我的问题的原因。

当我调试时,我可以看到它dataSize是 36 (9*4) 的预期值,所以我很难理解为什么我会得到一个fatal error when unwrapping an optional value. 我知道错误是不言自明的,但上面打印的代码是堆栈跟踪显示引发异常的地方,但我在那里看不到 nil 值。这可能是什么原因造成的?