в /из ключевых слов в GLSL

Я действительно не понимаю, как использовать in / out ключевые слова в GLSL, а google является нехарактерно бесполезным.

Что именно они делают? Как бы я их использовал, если, например, я хочу передать переменную переменной, установленную на вершину, в шейдер фрагмента?

Буквально каждое учебное пособие, которое я нахожу, использует varying / attribute , и это не помогает.

43 голоса | спросил Avi 27 Mayam12 2012, 00:55:46

1 ответ


61

Квалификаторы хранения in и out действительно имеют цель, которая содержит и заменяет код varying и attribute , Они определяют, какие переменные соответственно в puts и out помещают для шейдера. См. справочная карта GLSL 4.2 .

  • 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);
}

Unhelpful Tutorials

Я предполагаю, что основная причина, по которой вы находите «устаревший» код учебника, заключается в том, что не все имеют доступ к совместимому с GLSL 3.3+ аппаратным обеспечением. Несмотря на это, для хорошего и более современного учебника я с радостью укажу вам в сторону Nicol Bolas ' Изучение современного 3D-графического программирования .

ответил Eric 27 Mayam12 2012, 01:28:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132