รอบคัดเลือกการจัดเก็บin
และout
จริงมีวัตถุประสงค์ที่มีและที่เหนือกว่าของและvarying
attribute
พวกเขากำหนดสิ่งที่ตัวแปรตามลำดับในการทำให้และออกทำให้สำหรับ Shader ดูหน้าบัตรอ้างอิง GLSL 4.2 :
in
: เชื่อมโยงเข้าสู่ shader จากขั้นตอนก่อนหน้า
out
: เชื่อมโยงออกจาก shader ไปยังขั้นตอนต่อไป
attribute
: เช่นเดียวกับin
Shader ที่
varying
: เช่นเดียวกับเวอร์out
เท็กซ์เชดเดอร์เหมือนกับเฟรเดอร์in
แชร์เดอร์(หมายเหตุ: สิ่งเหล่านี้พลิกไปมาอย่างผิด ๆ ในการ์ดอ้างอิงที่กล่าวถึงข้างต้น)
ด้วยหมายเหตุด้านข้างที่สองหลังเป็นประเภทที่เลิกใช้แล้ว: พวกเขาไม่ได้อยู่ในโปรไฟล์ 4.2 หลักเท่านั้นในโปรไฟล์ความเข้ากันได้
พวกเขาทำอะไรกันแน่
สำหรับการใช้งานให้ใช้จุดสุดยอด shader จากAn intro สู่ OpenGL ที่ทันสมัย บทที่ 2.2: Shaders :
#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);
}
มันควรจะเขียนใหม่ใน 4.2 แกนเป็น:
#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);
}
บทเรียนที่ไม่ช่วยเหลือ
ฉันเดาเหตุผลหลักที่คุณพบรหัสการสอนที่ "ล้าสมัย" คือทุกคนไม่สามารถเข้าถึงฮาร์ดแวร์ที่เข้ากันได้กับ GLSL 3.3+ โดยไม่คำนึงถึงสำหรับการที่ดีและอื่น ๆ ถึงวันที่กวดวิชาที่ฉันยินดีจะชี้ให้คุณในทิศทางของโรล Bolas' การเขียนโปรแกรมการเรียนรู้ที่ทันสมัยกราฟิก 3D