2016-05-10 29 views

Trả lời

8
layout(binding = 0) uniform sampler2D img_input; 

Đó tuyên bố một sampler, mà được dữ liệu của mình từ một đối tượng kết cấu. Các ràng buộc của 0 (bạn có thể thiết lập rằng trong bóng đổ trong GLSL 4.20) nói rằng kết cấu 2D bị ràng buộc với đơn vị hình ảnh kết cấu 0 (thông qua glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, ...);) là kết cấu sẽ được sử dụng cho mẫu này.

Samplers sử dụng kết cấu toàn bộ kết cấu, bao gồm tất cả các cấp mipmap và các lớp mảng. Hầu hết các chức năng lấy mẫu kết cấu sử dụng tọa độ kết cấu chuẩn hóa ([0, 1] ánh xạ tới kích thước của kết cấu). Hầu hết các chức năng lấy mẫu kết cấu cũng tôn trọng filtering properties and other sampling parameters.

layout (binding = 0, rgba32f) uniform image2D img_input; 

này tuyên bố một hình ảnh, đại diện cho một hình ảnh duy nhất từ một kết cấu. Kết cấu có thể have multiple images: mức mipmap, array layers, v.v. Khi bạn sử dụng glBindTextureImage, bạn đang ràng buộc một hình ảnh từ kết cấu.

Hình ảnh và mẫu thử hoàn toàn riêng biệt. Họ có bộ chỉ số ràng buộc riêng của họ; nó là hoàn toàn hợp lệ để ràng buộc một kết cấu đến GL_TEXTURE0 và một hình ảnh từ một kết cấu khác nhau để ràng buộc hình ảnh 0. Sử dụng chức năng kết cấu cho mẫu liên quan sẽ đọc từ những gì được ràng buộc để GL_TEXTURE0, trong khi chức năng hình ảnh trên biến hình ảnh liên quan sẽ đọc từ hình ảnh ràng buộc với ràng buộc hình ảnh 0.

Truy cập hình ảnh bỏ qua tất cả các thông số lấy mẫu. Image accessing functions luôn sử dụng tọa độ số nguyên texel.

Samplers chỉ có thể đọc dữ liệu từ kết cấu; biến hình ảnh có thể đọc và/hoặc ghi dữ liệu, cũng như thực hiện các hoạt động nguyên tử trên chúng. Tất nhiên, việc ghi dữ liệu từ trình đổ bóng đòi hỏi sự chăm sóc đặc biệt, đặc biệt khi someone goes to read that data.

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