kata kunci masuk / keluar di GLSL

46

Saya tidak benar-benar mengerti bagaimana menggunakan in/ outkata kunci dalam GLSL, dan google menjadi seperti biasanya tidak membantu.

Apa yang sebenarnya mereka lakukan? Bagaimana saya menggunakannya jika, misalnya, saya ingin meneruskan set variabel yang bervariasi per vertex ke shader fragmen?

Secara harfiah setiap tutorial yang saya temukan menggunakan varying/ attributekata kunci dan itu tidak membantu.

Avi
sumber

Jawaban:

65

Kualifikasi penyimpanan indan outsebenarnya memiliki tujuan yang mengandung dan menggantikan tujuan dari varyingdan 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 inuntuk vertex shader
  • varying: sama seperti outuntuk vertex shader, sama seperti inuntuk 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 .

Eric
sumber
2
@NicolBolas Ha! Saya sudah menduga ada sesuatu yang mencurigakan dengan itu. Itu kesalahan dalam kartu referensi itu. Terima kasih! :-)
Eric