- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 XCode 9 的 Metal 模板中,有一部分是在 MTLVertexDescriptor
上设置 attributes
和 layouts
。
let mtlVertexDescriptor = MTLVertexDescriptor()
mtlVertexDescriptor.attributes[VertexAttribute.position.rawValue].format = ...
mtlVertexDescriptor.attributes[VertexAttribute.texcoord.rawValue].format = ...
我努力了,但无法弄清楚神奇的关键字position
、texcoord
和后来的meshPositions
、meshGenerics
来自。
我猜它不是来自源代码,但我没有找到任何指定这些内容的文档。对于 VertexAttribute
,我得到的是 the reference page , 没有提及 position
和 texcoord
。
XCode 将我指向 ShaderTypes.h
,即这一部分:
typedef NS_ENUM(NSInteger, VertexAttribute) {
VertexAttributePosition = 0,
VertexAttributeTexcoord = 1,
};
我觉得这是理解这一点的关键,但我有多个问题:
作为一名开始使用 Swift 的开发人员,在 Swift 项目模板中,这个 Obj-C 部分有点令人困惑。你能清楚地解释一下它到底做了什么吗?
NS_ENUM 中的 VertexAttributePosition
如何添加神奇的属性 .position
和 VertexAttributeTexcoord
-> .texcoord
?
为什么这些都没有记录(Google 发现主要是 OpenGL 相关页面),XCode 也找不到任何帮助/跳转到它们的定义?
最佳答案
了解这里发生的事情的线索可以在 ShaderTypes.h 文件的这一行中找到:
// Header containing types and enum constants shared between Metal shaders and Swift/ObjC source
ShaderTypes.h 的明确意图是声明着色器(用 Metal 着色语言,C++ 的一种方言编写)和渲染器类(用 Objective-C 或 Swift 编写)都可以使用的类型,具体取决于您在打开模板时选择的)。实现这一点的方法是构建一个可以包含在两者中的头文件。使用 Swift 时出现了转折,因为 Swift 缺少头文件的概念,除了一种特殊情况:桥接头。
将 C 或 Objective-C 代码合并到 Swift 应用程序时,您需要提供一个桥接 header ,用于导入或声明您要在 Swift 中使用的类型和方法。在 Xcode 中,您可以使用项目build设置的“Swift 编译器 - 常规”部分中的“Objective-C Bridging Header”设置对其进行配置。它有点被埋没了,但如果你去那里,你会看到它填充了模板中的“ShaderTypes.h” header 。这就是您的 Swift 代码了解 VertexAttribute
枚举类型的方式。
在 Objective-C 中,要获取属性索引,您将直接使用定义的枚举值之一:VertexAttributePosition
,它在功能上等同于文字 0
.当它被导入到 Swift 中时,枚举的名称 (VertexAttribute
) 被从前面剥离,并且值被转换为小驼峰大小写,按照 Swift 风格,例如位置
。您可以阅读更多详情 here .
这样做的结果是,即使代码中的任何地方都没有名为“position
”的枚举值,当您使用 Swift 中的 Objective-C 枚举时,该名称也会为您合成。 rawValue
属性是与特定枚举值关联的整数值,然后可以将其用作属性或顶点描述符的索引(同样,在这种情况下,它等于 0
)。
这些都没有记录,因为它们是在此模板中专门定义的。它们不是 Metal API 的一部分,也不是任何 API 的一部分;它们只是为底层常量提供方便标签的名称,目的是使着色器和应用程序代码彼此一致。
关于ios - XCode Metal 模板 : Where is VertexAttribute. 位置定义了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48227353/
我是一名优秀的程序员,十分优秀!