Кваліфікатори пам’яті 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 графічної графіки Ніколя Боласа .