在金属着色语言规范中,统一类型的行为:
<块引用>如果变量是统一类型的,并且该变量对于执行内核或图形功能的所有线程不具有相同的值,则行为未定义。
uniform<float> bar[10]; // elements stored in bar array are uniform
我的问题是在这种情况下 uniform<T>
有什么用?我知道一些制服(例如转换信息)可以通过 setVertexBytes()
作为制服传递给着色器。在何种情况下,您认为uniform<T>
有用?
struct VertexOut {
float4 position [[position]];
};
struct Uniforms {
float4x4 transform;
};
vertex VertexOut my_vertex(
const device VertexIn * vertices [[buffer(0)]],
constant Uniforms & uniforms [[buffer(1)]],
uint vid [[vertex_id]]
) {
…
}
谢谢