2012-11-29 32 views
10

Làm cách nào để chuyển qua tham chiếu trong trình đổ bóng GLSL?Bạn có thể chuyển ma trận bằng cách tham chiếu trong trình đổ bóng GLSL không?

+1

"Tham chiếu" có ý nghĩa gì ở đây? Mục tiêu là để vượt qua "mà không tạo bản sao sao cho các thay đổi trong tương lai - đối tượng được chia sẻ - sẽ ảnh hưởng đến trình đổ bóng"? –

+0

Nhận xét tuyệt vời. Ý tôi là chính xác ý nghĩa trong C++ hoặc bất kỳ ngôn ngữ lập trình nào khác - __a bản sao cục bộ của tham số được truyền không được thực hiện__. – bobobobo

Trả lời

13

Bạn có thể đánh dấu một thuộc tính như inout trong chữ ký chức năng, và điều đó sẽ làm cho các thuộc tính một cách hiệu quả "vượt qua bằng cách tham khảo"

Ví dụ,

void doSomething(vec3 trans, inout mat4 mat) 

Đây mat được "thông qua tham khảo" , trans được chuyển theo giá trị.

mat phải có khả năng ghi (tức là không phải thuộc tính đồng nhất)

+0

Có thể sử dụng 'inout' trên các yếu tố/sự lộn xộn của các loại hợp chất không? ví dụ. 'void swap (inout float a, inout float b); vec3 foo, bar; hoán đổi (foo.x, bar.x) ' – AkiRoss

+3

Đó là một lời nói dối. "vòng loại tham số chức năng" inout "sẽ dẫn đến hai" bản sao sâu "của dữ liệu của bạn. Đọc tài liệu. https://www.opengl.org/wiki/Core_Language_(GLSL)#Functions Như tôi có thể thấy chỉ có một cách để có được "tham chiếu" thực sự trong glsl, và điều này được cho phép bởi phần mở rộng này: https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt – Crabonog

+1

Đối với bất cứ ai đi qua câu trả lời này trong tương lai, ** IT IS COMPLETELY WRONG **. GLSL không cung cấp cho bạn quyền kiểm soát các thông số chức năng được truyền "dưới mui xe". Thay vào đó, trình biên dịch quyết định ** mọi thứ **, và (hy vọng) không thực sự sao chép mọi thứ thường. Xem [câu trả lời này] (https://stackoverflow.com/a/28577878) để biết thêm chi tiết. – user69513

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