OpenGL Shading Language
OpenGL Shading Language (GLSL), is a high-level shading language with a syntax based on the C programming language. It was created by the OpenGL ARB (OpenGL Architecture Review Board) to give developers more direct control of the graphics pipeline without having to use ARB assembly language or hardware-specific languages.
With advances in graphics cards, new features have been added to allow for increased flexibility in the rendering pipeline at the vertex and fragment level. Programmability at this level is achieved with the use of fragment and vertex shaders.
Originally, this functionality was achieved by writing shaders in ARB assembly language – a complex and unintuitive task. The OpenGL ARB created the OpenGL Shading Language to provide a more intuitive method for programming the graphics processing unit while maintaining the open standards advantage that has driven OpenGL throughout its history.
Originally introduced as an extension to OpenGL 1.4, GLSL was formally included into the OpenGL 2.0 core in 2004 by the OpenGL ARB. It was the first major revision to OpenGL since the creation of OpenGL 1.0 in 1992.
Some benefits of using GLSL are:
- Cross-platform compatibility on multiple operating systems, including GNU/Linux, macOS and Windows.
- The ability to write shaders that can be used on any hardware vendor's graphics card that supports the OpenGL Shading Language.
- Each hardware vendor includes the GLSL compiler in their driver, thus allowing each vendor to create code optimized for their particular graphics card’s architecture.
GLSL versions have evolved alongside specific versions of the OpenGL API. It is only with OpenGL versions 3.3 and above that the GLSL and OpenGL major and minor version numbers match. These versions for GLSL and OpenGL are related in the following table:
|GLSL Version||OpenGL Version||Date||Shader Preprocessor|
|1.10.59||2.0||30 April 2004||#version 110|
|1.20.8||2.1||07 September 2006||#version 120|
|1.30.10||3.0||22 November 2009||#version 130|
|1.40.08||3.1||22 November 2009||#version 140|
|1.50.11||3.2||04 December 2009||#version 150|
|3.30.6||3.3||11 March 2010||#version 330|
|4.00.9||4.0||24 July 2010||#version 400|
|4.10.6||4.1||24 July 2010||#version 410|
|4.20.11||4.2||12 December 2011||#version 420|
|4.30.8||4.3||7 February 2013||#version 430|
|4.40.9||4.4||16 June 2014||#version 440|
|4.50.7||4.5||09 May 2017||#version 450|
|4.60.5||4.6||14 June 2018||#version 460|
|GLSL ES version||OpenGL ES version||WebGL version||Based on GLSL version||Date||Shader Preprocessor|
|1.00.17||2.0||1.0||1.20||12 May 2009||#version 100 es|
|3.00.6||3.0||2.0||3.30||29 January 2016||#version 300 es|
Functions and control structures
Similar to the C programming language, GLSL supports loops and branching, for instance: if-else, for, switch, etc. Recursion is forbidden.
User-defined functions are supported and built-in functions are provided. The graphics card manufacturer may optimize built-in functions at the hardware level. Many of these functions are similar to those in the math library of the C programming language while others are specific to graphics programming.
Compilation and execution
GLSL shaders themselves are simply a set of strings that are passed to the hardware vendor's driver for compilation from within an application using the OpenGL API's entry points. Shaders can be created on the fly from within an application, or read-in as text files, but must be sent to the driver in the form of a string.
The set of APIs used to compile, link, and pass parameters to GLSL programs are specified in three OpenGL extensions, and became part of core OpenGL as of OpenGL Version 2.0. The API was expanded with geometry shaders in OpenGL 3.2, tessellation shaders in OpenGL 4.0 and compute shaders in OpenGL 4.3. These OpenGL APIs are found in the extensions:
- ARB vertex shader
- ARB fragment shader
- ARB shader objects
- ARB geometry shader 4
- ARB tessellation shader
- ARB compute shader
- Standard Portable Intermediate Representation, an intermediate shader language by Khronos Group
- 3D computer graphics
- Khronos Group
- WebGL, an OpenGL-ES dialect for web browsers, which uses GLSL for shaders
- LWJGL, a library that includes Java bindings for OpenGL.
Other shading languages
- ARB assembly language, a low-level shading language
- Cg, a high-level shading language for programming vertex and pixel shaders
- HLSL, a high-level shading language for use with Direct3D
- TGSI, a low-level intermediate language introduced by Gallium3D
- AMDIL, a low-level intermediate language used internally at AMD
- "GLSL Language Specification, Version 1.10.59" (PDF).
- "GLSL Language Specification, Version 1.20.8" (PDF).
- "GLSL Language Specification, Version 1.30.10" (PDF).
- "GLSL Language Specification, Version 1.40.08" (PDF).
- "GLSL Language Specification, Version 1.50.11" (PDF).
- "GLSL Language Specification, Version 3.30.6" (PDF).
- "GLSL Language Specification, Version 4.00.9" (PDF).
- "GLSL Language Specification, Version 4.10.6" (PDF).
- "GLSL Language Specification, Version 4.20.11" (PDF).
- "GLSL Language Specification, Version 4.30.8" (PDF).
- "GLSL Language Specification, Version 4.40.9" (PDF).
- "GLSL Language Specification, Version 4.50.7" (PDF).
- "GLSL Language Specification, Version 4.60.5" (PDF).
- "GLSL ES Language Specification, Version 1.00, revision 17" (PDF).
- "GLSL ES Language Specification, Version 3.00, revision 6" (PDF).
- Rost, Randi J. (30 July 2009). OpenGL Shading Language (3rd ed.). Addison-Wesley. ISBN 978-0-321-63763-5.
- Kessenich, John; Baldwin, David; Rost, Randi. The OpenGL Shading Language. Version 1.10.59. 3Dlabs, Inc. Ltd.
- Bailey, Mike; Cunningham, Steve (22 April 2009). Graphics Shaders: Theory and Practice (2nd ed.). CRC Press. ISBN 978-1-56881-434-6.
|Wikibooks has a book on the topic of: GLSL Programming|