Кваліфікатори пам’яті 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+. Незважаючи на те, для гарного та більш сучасного підручника я з радістю вкажу вам назустріч навчанню сучасної 3D графічної графіки Ніколя Боласа .