2014-10-10 28 views
5

Tôi muốn chuyển một phao đến shader kim loại của tôi. Tôi không thể hiểu được làm thế nào.Tôi làm cách nào để chuyển đồng phục nổi cho bóng đổ kim loại iOS bằng Swift?

Đây là shader của tôi:

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); 
} 

Bây giờ tôi muốn vượt qua nó để đổ bóng:

let renderPassDescriptor = MTLRenderPassDescriptor() 
let renderEncoder = commandBuffer.renderCommandEncoderWithDescriptor(renderPassDescriptor) 
// ... 
let angle: Float = 0.5 
renderEncoder.setUniform1(angle) // What do I do here? 

Làm thế nào để vượt qua giá trị float đơn?

Trả lời

7

Tôi chưa thấy setUniform * trước đây. Để chuyển đồng phục đến trình đổ bóng đỉnh của bạn, hãy sử dụng:

setVertexBuffer(buffer: MTLBuffer?, offset: Int, atIndex index: Int) 

Trường hợp bộ đệm sẽ là mảng có một phao đơn, trong ví dụ của bạn. Để chuyển đồng phục đến một trình đổ bóng phân mảnh, hãy sử dụng setFragmentBuffer.

7

Cũng trong 10.11+ và iOS 9 + bạn có thể sử dụng:

public func setVertexBytes(bytes: UnsafePointer<Void>, length: Int, atIndex index: Int) 

nào được ghi chép lại là tốt hơn so với việc tạo ra một MTLBuffer nếu bạn chỉ sử dụng bộ đệm một lần (và dữ liệu của bạn là ít hơn 4K Dài).

+0

Có thể điều này là hiển nhiên, nhưng câu hỏi của OP có trình đổ bóng và 'setFragmentBytes' gửi dữ liệu đến các trình đổ bóng phân đoạn, vì vậy nếu như OP bạn muốn gửi dữ liệu tới trình đổ bóng đỉnh, hãy sử dụng' setVertexBytes'. –

+2

Điểm tốt. Đã sửa. –

Các vấn đề liên quan