введення / виведення ключових слів у GLSL


46

Я не дуже розумію, як використовувати in/ outключові слова в GLSL, і Google нехарактерно не допомагає.

Що саме вони роблять? Як би я їх використовував, якщо, наприклад, хочу передати різний набір змінних по вершині шейдеру фрагмента?

Буквально кожен підручник, який я знайшов, використовує varying/ attributeключові слова, і це не корисно.

Відповіді:


65

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


2
@NicolBolas Ha! Я вже зрозумів, що з цим щось рибне. Тоді помилка в цій довідковій картці. Дякую! :-)
Ерік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.