từ khóa vào / ra trong GLSL


46

Tôi thực sự không hiểu làm thế nào để sử dụng in/ outtừ khóa trong GLSL và google không hữu ích.

Chính xác thì họ làm gì? Làm thế nào tôi có thể sử dụng chúng nếu, ví dụ, tôi muốn chuyển một bộ biến khác nhau cho mỗi đỉnh cho shader mảnh?

Nghĩa đen là mọi hướng dẫn tôi tìm thấy đều sử dụng varying/ attributetừ khóa và điều đó không hữu ích.

Câu trả lời:


65

Các vòng loại lưu trữ inoutthực sự có một mục đích chứa và thay thế cho varyingattribute. Chúng xác định các biến tương ứng trong các vị trí đặt và đặt ra cho trình đổ bóng. Xem thẻ tham khảo GLSL 4.2 trang 7:

  • in: liên kết thành shader từ giai đoạn trước
  • out: liên kết ra khỏi một shader đến giai đoạn tiếp theo
  • attribute: giống như invới shader đỉnh
  • varying: giống như outđối với trình tạo bóng đỉnh, tương tự như trình intạo bóng phân đoạn (Lưu ý: đây là các lỗi được lật nhầm trong thẻ tham chiếu đã đề cập ở trên.)

Với lưu ý bên lề rằng hai cái sau là loại không dùng nữa: chúng không có trong cấu hình lõi 4.2, chỉ trong cấu hình tương thích.


Chính xác thì họ làm gì?

Về phần sử dụng, hãy sử dụng trình tạo bóng đỉnh từ Giới thiệu đến OpenGL hiện đại. Chương 2.2: Shader :

#version 110

attribute vec2 position;    
varying vec2 texcoord;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
    texcoord = position * vec2(0.5) + vec2(0.5);
}

Nó nên được viết lại trong lõi 4.2 như:

#version 420

in vec2 position;    
out vec2 texcoord;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
    texcoord = position * vec2(0.5) + vec2(0.5);
}

Hướng dẫn không hữu ích

Tôi đoán lý do chính khiến bạn thấy mã hướng dẫn "lỗi thời" là không phải ai cũng có quyền truy cập vào phần cứng tương thích GLSL 3.3+. Bất kể, để có một hướng dẫn tốt và cập nhật hơn, tôi sẽ sẵn lòng chỉ cho bạn theo hướng Lập trình đồ họa 3D hiện đại của Nicol Bolas .


2
@NicolBolas Hà! Tôi đã tìm ra rằng có một cái gì đó tanh cá với điều đó. Đó là một lỗi trong thẻ tham chiếu đó. Cảm ơn! :-)
Eric
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.