2013-05-22 26 views
6

Trong một Shader GLSL, tôi muốn tạo một hàm trông một chút như thế này:Bạn có thể truyền một mảng có kích thước cố định làm tham số hàm GLSL không?

void MyFunction(out float results[9]) 
{ 
    float value0 = 3.1546; 
    float value1 = 42;  // whatever value  
    /* ... long, complicated code ... */ 

    results[0] = value0; 
    results[1] = value1; 
    results[2] = value2; 
    ... 
} 

thể như một chữ ký chức năng được sử dụng và biên soạn trong GLSL?
Nếu không, có cách nào khác không?

Trả lời

5

Có, đây là mã GLSL hợp pháp.

Điều đó không có nghĩa là nó chắc chắn sẽ biên dịch, nhưng đó là mã pháp lý. Điều đó đang được nói, nó có lẽ tốt hơn để chỉ trả về mảng (mà bạn cũng có thể làm), thay vì truyền nó như là một tham số đầu ra.

+0

Bạn nói đúng. Tôi cũng tìm thấy thông tin trong thông số: http://www.opengl.org/registry/doc/GLSLangSpec.4.30.6.pdf#page=35 – wil

+2

Tại sao có thể trả lại mảng này tốt hơn? là có một số tối ưu hóa trình biên dịch với việc sử dụng một địa phương và trở về mà thay vì sửa đổi một biến tại chỗ? –

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