统一<T>有什么用? setVertexBytes() 可以传递统一缓冲区有什么区别?

时间:2021-05-25 23:32:17

标签: metal

在金属着色语言规范中,统一类型的行为:

<块引用>

如果变量是统一类型的,并且该变量对于执行内核或图形功能的所有线程不具有相同的值,则行为未定义。

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]]
) {
…
}

谢谢

0 个答案:

没有答案