Kualifikasi penyimpanan in
dan out
sebenarnya memiliki tujuan yang mengandung dan menggantikan tujuan dari varying
dan attribute
. Mereka mendefinisikan variabel apa yang masing-masing dalam menempatkan dan keluar menempatkan untuk shader. Lihat kartu referensi GLSL 4.2 halaman 7:
in
: tautan ke shader dari tahap sebelumnya
out
: tautan keluar dari shader ke tahap berikutnya
attribute
: sama seperti in
untuk vertex shader
varying
: sama seperti out
untuk vertex shader, sama seperti in
untuk fragmen shader (Catatan: ini secara keliru dibalik dalam kartu referensi yang disebutkan di atas.)
Dengan catatan samping bahwa dua yang terakhir agak usang: mereka tidak ada di profil inti 4.2, hanya di profil kompatibilitas.
Apa yang sebenarnya mereka lakukan?
Untuk penggunaan, gunakan vertex shader dari Intro ke OpenGL modern. Bab 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);
}
Itu harus ditulis ulang dalam 4.2 inti sebagai:
#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);
}
Tutorial Tidak Membantu
Saya menduga alasan utama Anda menemukan kode tutorial "usang" adalah tidak semua orang memiliki akses ke perangkat keras yang kompatibel dengan GLSL 3.3+. Apapun itu, untuk tutorial yang baik dan terkini, saya dengan senang hati akan mengarahkan Anda ke arah Pembelajaran Pemrograman Grafik 3D Modern Nicol Bolas .