OpenGL Shading Language

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
OpenGL Shading Language
Тип

q3496485?

Разработчик

Khronos Group

Операционная система

Кроссплатформенное программное обеспечение

Последняя версия

4.3 (7 февраля 2013)

Сайт

http://www.opengl.org

GLSL (OpenGL Shading Language) — язык высокого уровня для программирования шейдеров. Синтаксис языка базируется на языке программирования ANSI C, однако, из-за его специфической направленности, из него были исключены многие возможности, для упрощения языка и повышения производительности. В язык включены дополнительные функции и типы данных, например для работы с векторами и матрицами.

Основные преимущества GLSL:

  • Переносимость кода между платформами и oc

История[править | править вики-текст]

Изначально GLSL 1.10 стал доступен в виде набора расширений GL_ARB_shading_language_100, GL_ARB_shader_objects, GL_ARB_vertex_shader , GL_ARB_fragment_shader. Но уже начиная с OpenGL 2.0, GLSL включен в ядро.

Начиная с релиза OpenGL 3.3, GLSL меняет нумерацию версий. Теперь номер версии GLSL будет соответствовать версии OpenGL [1].

GLSL версия OpenGL версия
1.10.59 [2] 2.0
1.20.8[3] 2.1
1.30.10[4] 3.0
1.40.08[5] 3.1
1.50.11[6] 3.2
3.30.6[7] 3.3
4.00.9[8] 4.0
4.10.6[9] 4.1
4.20.11[10] 4.2
4.30.8[11] 4.3

GLSL 1.50[править | править вики-текст]

Добавлена поддержка геометрических шейдеров, для которых ранее использовались расширения GL_ARB_geometry_shader4, GL_EXT_geometry_shader4.

Пример простого вершинного шейдера (Vertex Shader) на GLSL[править | править вики-текст]

Преобразование входной вершины так же, как это делает стандартный конвейер.

void main(void)
{
    gl_Position = ftransform();
}

Замечание: ftransform() больше не поддерживается GLSL с версии 1.40 и GLSL ES с версии 1.0. Теперь программисты должны управлять матрицами проекции и трансформации модели в соответствии со стандартом OpenGL 3.1.

#version 140
 
uniform Transformation {
    mat4 projection_matrix;
    mat4 modelview_matrix;
};
 
in vec3 vertex;
 
void main() {
    gl_Position = projection_matrix * modelview_matrix * vec4(vertex, 1.0);
}

Пример простого геометрического шейдера (Geometry Shader) на GLSL[править | править вики-текст]

Простой шейдер, работающий с цветом и положением.

#version 120
#extension GL_EXT_geometry_shader4 : enable
 
void main() {
  for(int i = 0; i < gl_VerticesIn; ++i) {
    gl_FrontColor = gl_FrontColorIn[i];
    gl_Position = gl_PositionIn[i];
    EmitVertex();
  }
}

В OpenGL 3.2 с GLSL 1.50 геометрические шейдеры были добавлены в "core functionality" что означает, что теперь не нужно использовать расширения. Однако, синтаксис достаточно сложен.

Простой шейдер, передающий положения вершин треугольников на следующий этап.:

#version 150
 
layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;
 
void main() {
  for(int i = 0; i < gl_in.length(); i++) {
    gl_Position = gl_in[i].gl_Position;
    EmitVertex();
  }
  EndPrimitive();
}

Пример простого фрагментного шейдера (Fragment Shader) на GLSL[править | править вики-текст]

Создаёт тексель красного цвета..

#version 120
void main(void)
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

В GLSL 1.30 и новее используется следующая функция:

glBindFragDataLocation(Programm, 0, "MyFragColor");

где: Programm - указатель на программу; 0 - номер буфера цвета, если вы не используете MRT(Multiple Render Targets), значение должно быть равно 0; "MyFragColor" - имя выходной переменной шейдерной программы, записывающей в данный буфер.

#version 150
void main(void)
{
    MyFragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

IDE[править | править вики-текст]

См. также[править | править вики-текст]

Литература[править | править вики-текст]

Примечания[править | править вики-текст]

  1. OpenGL 3.3 & 4.0 breathe new life into existing graphics hardware and pave the way for next gen GPUs. Nick Haemel (March 11, 2010). Проверено 13 марта 2010. Архивировано из первоисточника 10 апреля 2012.
  2. GLSL Language Specification, Version 1.10.59. Архивировано из первоисточника 12 июня 2013.
  3. GLSL Language Specification, Version 1.20.8. Архивировано из первоисточника 12 июня 2013.
  4. GLSL Language Specification, Version 1.30.10. Архивировано из первоисточника 12 июня 2013.
  5. GLSL Language Specification, Version 1.40.08. Архивировано из первоисточника 12 июня 2013.
  6. GLSL Language Specification, Version 1.50.11. Архивировано из первоисточника 12 июня 2013.
  7. GLSL Language Specification, Version 3.30.6. Архивировано из первоисточника 12 июня 2013.
  8. GLSL Language Specification, Version 4.00.9. Архивировано из первоисточника 12 июня 2013.
  9. GLSL Language Specification, Version 4.10.6. Архивировано из первоисточника 12 июня 2013.
  10. GLSL Language Specification, Version 4.20.11. Архивировано из первоисточника 12 июня 2013.
  11. GLSL Language Specification, Version 4.30.8. Архивировано из первоисточника 12 июня 2013.

Ссылки[править | править вики-текст]

Статьи

Спецификации

Примеры