OpenGL Shading Language

OpenGL Shading Language
OpenGL Shading Language
Разработчик

Khronos Group

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

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

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

4.2 (8 августа 2011)

Сайт

www.opengl.org

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

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

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

Содержание

История

Изначально 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].

OpenGL версия GLSL версия
2.0 1.10
2.1 1.20
3.0 1.30
3.1 1.40
3.2 1.50
3.3 3.3
4.0 4.0
4.1 4.1
4.2 4.2

GLSL 1.50

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

Пример простого вершинного шейдера на GLSL

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

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

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

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

Пример простого GLSL Geometry Shader

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

#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();
}

Пример простого GLSL Fragment Shader

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

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

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

glBindFragDataLocation(Programm, 0, "MyColor");

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

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

IDE

См. также

Литература

  • Боресков Алексей Разработка и отладка шейдеров. — БХВ-Петербург, 2006. — 488 с. — ISBN 5-94157-712-5
  • Боресков Алексей Расширения OpenGL. — БХВ-Петербург, 2005. — 688 с. — ISBN 5-94157-614-5

Примечания

  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). Архивировано из первоисточника 10 апреля 2012. Проверено 13 марта 2010.
  2. Amyto - GLSL Tutorial 1: Hello red

Ссылки

Статьи

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

Примеры


Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Полезное


Смотреть что такое "OpenGL Shading Language" в других словарях:

  • OpenGL Shading Language — Erscheinungsjahr: 2002 Entwickler: Khronos Group Aktuelle Version: 4.10  (8. August 2011) Einflüsse: C …   Deutsch Wikipedia

  • Shading language — A shading language is a special programming language adapted to easily map on shader programming. Those kind of languages usually have special data types like color and normal. Because of the various target markets of 3D graphics, different… …   Wikipedia

  • Shading language — Shader Un shader (anglais, du verbe to shade : ombrager ou estomper, nuancer) est un programme[Quoi ?] utilisé en image de synthèse pour paramétrer une partie du processus de rendu réalisé par une carte graphique ou un moteur de rendu… …   Wikipédia en Français

  • High Level Shading Language — HLSL (High Level Shading Language) bezeichnet die DirectX Komponente, die die Programmierung von Shader Bausteinen ermöglicht. Inhaltsverzeichnis 1 Shader Sprachen 2 Sprach Elemente 2.1 Globale Shader Parameter …   Deutsch Wikipedia

  • OpenGL — Original author(s) Silicon Graphics Developer(s) Khronos Group Stable release 4.2 …   Wikipedia

  • OpenGL — Entwickler Khronos Group Aktuelle Version 4.2 (8. August 2011) Betriebssystem …   Deutsch Wikipedia

  • Opengl — Entwickler: Khronos Group Aktuelle Version: 3.1 (24. März 2009) Betriebssystem: plattformunabhängig Kategorie …   Deutsch Wikipedia

  • OpenGL — Desarrollador Khronos Group www.opengl.org Información general Diseñador Silicon Graphics …   Wikipedia Español

  • OpenGL — Тип API Раз …   Википедия

  • Opengl — Développeur Silicon Graphics Dernière version …   Wikipédia en Français


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»