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

标签 ios metal

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

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

// Test array of vertices
let ASVertices:[Float] = [
    0.0, 1.0, 0.0,
    -1.0, -1.0, 0.0,
    1.0, -1.0, 0.0
]

// Other Metal init code...

// Set the buffers
let dataSize = ASVertices.count * sizeofValue(ASVertices[0])
vertexBuffer = ASDevice.newBufferWithBytes(ASVertices, 
                              length: dataSize, 
                              options: MTLResourceOptions.OptionCPUCacheModeDefault)

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

最佳答案

当连接到 Xcode 时,Metal 并不真正适用于 iOS 8.3。现在,禁用 GPU 帧捕获,并归档雷达。

关于iOS 8.3 - Metal,在展开可选值时发现 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29584463/

相关文章:

ios - 如何知道我们是否可以使用 half4 而不是 float4?

ios - MapView - 更改 map 中心点

iphone - 如何在 iphone 应用程序中使用进度条

synchronization - 在 Metal 中同步统一缓冲区更新

swift - 在不同形状的 Metal 纹理之间复制数据

ios - 将 Metal 深度缓冲区与场景套件渲染集成

ios - 保存在 iCloud Drive 上的文档似乎无法在 iOS 上下载

ios - 尝试存档时自定义 NavigationStack 导致 `error: Segmentation fault: 11` 时的解决方法建议?

ios - Ios 中视频上的文本动画

ios - 如何保留 CAMetalLayer 的支持?