Поиск…


Синтаксис

  • #version version_number // Какую версию GLSL мы используем
  • void main () {/ * Код * /} // Основная функция шейдера
  • имя типа; // Указывает входной параметр - GLSL 1.30
  • имя типа; // Указывает выходной параметр - GLSL 1.30
  • inout имя типа; // Параметр для ввода и вывода - GLSL 1.30

параметры

параметр подробности
тип Тип параметра, он должен быть встроенным типом GLSL.

замечания

Чтобы указать, какая версия GLSL должна использоваться для компиляции шейдера, используйте препроцессор версии, например, #version 330 . Каждая версия OpenGL требуется для поддержки определенных версий GLSL . Если препроцессор #version не определен в верхней части шейдера, используется версия по умолчанию 1.10.

Шейдер для рендеринга цветного прямоугольника

Шейдерная программа в смысле OpenGL содержит несколько разных шейдеров. Любая шейдерная программа должна иметь по крайней мере вершинный шейдер, который вычисляет положение точек на экране и фрагментарный шейдер, который вычисляет цвет каждого пикселя. (На самом деле история длиннее и сложнее, но в любом случае ...)

Следующие шейдеры предназначены для #version 110 , но должны проиллюстрировать некоторые моменты:

Vertex shader:

#version 110

// x and y coordinates of one of the corners
attribute vec2 input_Position;

// rgba colour of the corner. If all corners are blue, 
// the rectangle is blue. If not, the colours are 
// interpolated (combined) towards the center of the rectangle    
attribute vec4 input_Colour; 

// The vertex shader gets the colour, and passes it forward     
// towards the fragment shader which is responsible with colours
// Must match corresponding declaration in the fragment shader.  
varying vec4 Colour;    

void main()
{
    // Set the final position of the corner
    gl_Position = vec4(input_Position, 0.0f, 1.0f);
    
    // Pass the colour to the fragment shader
    UV = input_UV;
}

Фрагментный шейдер:

#version 110

// Must match declaration in the vertex shader.  
varying vec4 Colour;

void main()
{
    // Set the fragment colour
    gl_FragColor = vec4(Colour);
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow