Answers:
存储预选赛in
和out
实际上有包含并取代了的目的varying
和attribute
。它们定义了着色器分别在输入和输出中使用的变量。请参阅GLSL 4.2参考卡第7页:
in
:从上一阶段链接到着色器out
:从着色器链接到下一阶段attribute
:与in
顶点着色器相同varying
:与out
顶点着色器相同,in
与片段着色器相同(注意:在上述参考卡中这些错误地翻转了。)附带说明一下,后两者已过时:它们不在4.2核心配置文件中,仅在兼容性配置文件中。
至于用法,请将顶点着色器从入门介绍到现代OpenGL。第2.2章:着色器:
#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+兼容的硬件。无论如何,对于一个很好且最新的教程,我很乐意为您指明Nicol Bolas的“ 学习现代3D图形编程”的方向。