我想将浮动传递给我的金属着色器。我无法弄清楚如何。
这是我的着色器:
vertex float4 model_vertex(unsigned int iid[[instance_id]]
constant float angle) {
float number = float(iid) / 64.0;
return float4(number * sin(angle), number * cos(angle), 0.0, 1.0);
}
现在我想将它传递给着色器:
let renderPassDescriptor = MTLRenderPassDescriptor()
let renderEncoder = commandBuffer.renderCommandEncoderWithDescriptor(renderPassDescriptor)
// ...
let angle: Float = 0.5
renderEncoder.setUniform1(angle) // What do I do here?
如何传递单个浮点值?
答案 0 :(得分:10)
同样在10.11+和iOS 9+中你可以使用:
public func setVertexBytes(bytes: UnsafePointer<Void>, length: Int, atIndex index: Int)
如果您仅使用缓冲区一次(并且您的数据长度小于4K),则记录为比创建MTLBuffer更好。
答案 1 :(得分:8)
之前我还没有见过setUniform *。要将制服传递到顶点着色器,请使用:
setVertexBuffer(buffer: MTLBuffer?, offset: Int, atIndex index: Int)
在您的示例中,缓冲区将是具有单个浮点数的数组。 要将制服传递给片段着色器,请使用setFragmentBuffer。