ios - 访问 Metal 文件中的快速结构或类

标签 ios swift metal

在 swift 文件中,声明了顶点数据:

struct Vertex {
    let position: vector_float4
    let color: vector_float4
}

我想在 metal 文件中访问这个结构,可以吗? 如果是,如何制作?

我已经知道如何使用 Objective-C 来实现,只是想使用 swift。

最佳答案

直接从 Metal 中使用 Swift 结构是不可能的。但是,您可以在 Objective-C header 中声明该结构,并在 Swift 和 Metal 中使用它(通过 Objective-C 桥接 header )。有关如何执行此操作的示例,请参阅随 Xcode 提供的 Metal Game 模板。与 Apple 的最佳实践建议相反,我实际上不想这样做,而是在每种相应语言中声明此类结构。

Metal 着色语言中的等效结构声明是

struct Vertex {
    float4 position;
    float4 color;
};

如果您在管道中使用顶点描述符(顶点函数带有一个 stage_in 参数,而不是通过接收一个 vertex_id 来手动获取顶点和指向 Vertex 结构的指针),您需要将属性属性添加到结构中,对应于它们在顶点描述符属性数组中的索引。例如,

struct Vertex {
    float4 position [[attribute(0)]];
    float4 color [[attribute(1)]];
};

关于ios - 访问 Metal 文件中的快速结构或类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53004271/

相关文章:

swift - [[stage_in]]、MTLVertexDescriptor 和 MTKMesh 之间的连接

ios - 无法从字符串创建 CIFilter 类

ios - 为什么将UIViewController释放在主线程上?

ios - 加载 View 后隐藏 subview 图像(使用 Swift)

ios - 从文本字段输入迭代 for 循环 X 次

ios - 在标签和边框之间添加填充

swift - Metal:将 MTLRenderCommandEncoder 纹理加载限制为仅部分纹理

ios - Game Center matchData 的良好实践

ios - 在 UITableView 上执行具有多个状态的 segue

macos - 电池供电时 CVDisplayLink 定时器的稳定性