OpenGL Shading Language | это... Что такое OpenGL Shading Language? (original) (raw)
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
Примечания
- ↑ 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.
- ↑ Amyto - GLSL Tutorial 1: Hello red
Ссылки
Статьи
Спецификации
- GLSL Language Specification, Version 1.50
- GLSL Language Specification, Version 1.40
- GLSL Language Specification, Version 1.30
- GLSL Language Specification, Version 1.20
- OpenGL Fragment Shader Specification
- OpenGL Vertex Shader Specification
- OpenGL Shader Objects Specification
- OpenGL Geometry Shader Specification
Примеры