Các vòng loại lưu trữ in
và out
thực sự có một mục đích chứa và thay thế cho varying
và attribute
. 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ư in
với shader đỉnh
varying
: giống như out
đối với trình tạo bóng đỉnh, tương tự như trình in
tạ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 .