在 Metal File 中访问 swift 结构或类
Posted
技术标签:
【中文标题】在 Metal File 中访问 swift 结构或类【英文标题】:access swift Struct or class in Metal File 【发布时间】:2018-10-26 08:10:44 【问题描述】:在swift文件中,声明了顶点数据:
struct Vertex
let position: vector_float4
let color: vector_float4
我想在金属文件中访问这个结构,可以吗? 如果是,如何制作?
我已经知道如何用Objective-C制作了,只是想用swift。
【问题讨论】:
【参考方案1】:不能直接从 Metal 使用 Swift 结构。但是,您可以在 Objective-C 标头中声明该结构并在 Swift 和 Metal 中使用它(通过 Objective-C 桥接头)。有关如何执行此操作的示例,请参阅 Xcode 提供的 Metal Game 模板。与 Apple 的最佳实践建议相反,我实际上不想这样做,而是在每种语言中声明这样的结构。
Metal Shading Language 中的等效结构声明为
struct Vertex
float4 position;
float4 color;
;
如果您在管道中使用顶点描述符(在顶点函数中使用 stage_in
参数,而不是通过接收 vertex_id
和指向 Vertex
结构的指针来手动获取顶点),您需要将属性属性添加到结构中,对应于它们在顶点描述符属性数组中的索引。例如,
struct Vertex
float4 position [[attribute(0)]];
float4 color [[attribute(1)]];
;
【讨论】:
是的,我同意你的偏好,用金属编码真的不优雅 与 Apple 的最佳实践建议相反,我实际上不想这样做,而是在每种语言中声明这样的结构。 不是一个好主意,因为结构在 Swift 中声明的内存布局可能不同。从技术上讲,他的结构字段甚至可以重新排序,即使目前还没有发生。 Swift 中(还没有)任何指令来控制内存结构布局。 公平点。在 Swift 流失近五年的时间里,我什至一次都没有受到过这种影响,但这种可能性确实存在。以上是关于在 Metal File 中访问 swift 结构或类的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 iPad Swift Playground 中使用 Metal 着色器代码?