Lenguaje de sombreado OpenGL | |
---|---|
Tipo de | lenguaje de programación shader [d] ylenguaje |
Desarrollador | Grupo Khronos |
Sistema operativo | Software multiplataforma |
Primera edición | 2004 |
ultima versión | 11.12.0 ( octubre de 2022 ) |
Sitio web | opengl.org |
GLSL (OpenGL Shading Language, Graphics Library Shader Language) es un lenguaje de alto nivel para la programación de sombreadores . Diseñado para realizar las operaciones matemáticas que normalmente se requieren para realizar la rasterización de gráficos . La sintaxis del lenguaje se basa en el lenguaje de programación ANSI C , sin embargo, debido a su enfoque específico, se han excluido muchas funciones para simplificar el lenguaje y mejorar el rendimiento. El lenguaje incluye funciones y tipos de datos adicionales, como aquellos para trabajar con vectores y matrices .
La principal ventaja de GLSL sobre otros lenguajes de sombreado es la portabilidad del código entre plataformas y sistemas operativos .
GLSL se usa en OpenGL , OpenGL ES y WebGL usan GLSL ES (OpenGL ES Shading Language) .
Inicialmente, GLSL 1.10 estuvo disponible como un conjunto de extensiones GL_ARB_shading_language_100, GL_ARB_shader_objects, GL_ARB_vertex_shader, GL_ARB_fragment_shader. Pero desde OpenGL 2.0, GLSL se ha incluido en el núcleo.
A partir de OpenGL 3.3, GLSL cambia su numeración de versión. El número de versión de GLSL ahora coincidirá con la versión de OpenGL [1] .
versión GLSL | Versión OpenGL | la fecha |
---|---|---|
1.10.59 [2] | 2.0 | 30 de abril de 2004 |
1.20.8 [3] | 2.1 | 7 de septiembre de 2006 |
1.30.10 [4] | 3.0 | 22 de noviembre de 2009 |
1.40.08 [5] | 3.1 | 22 de noviembre de 2009 |
1.50.11 [6] | 3.2 | 4 de diciembre de 2009 |
3.30.6 [7] | 3.3 | 11 de marzo de 2010 |
4.00.9 [8] | 4.0 | 24 de julio de 2010 |
4.10.6 [9] | 4.1 | 24 de julio de 2010 |
4.20.11 [10] | 4.2 | 12 diciembre 2011 |
4.30.8 [11] | 4.3 | 7 febrero 2013 |
4.40.9 [12] | 4.4 | 16 junio 2014 |
4.50.7 [13] | 4.5 | 9 mayo 2017 |
4.60.5 [14] | 4.6 | 14 junio 2018 |
versión GLSLES | Versión OpenGL ES | versión webgl | Basado en la versión GLSL | la fecha |
---|---|---|---|---|
1.00.17 [15] | 2.0 | 1.0 | 1.20 | 12 de mayo de 2009 |
3.00.6 [16] | 3.0 | 2.0 | 3.30 | 29 enero 2016 |
Se agregó soporte para sombreadores de geometría, para los cuales se usaron previamente las extensiones GL_ARB_geometry_shader4 , GL_EXT_geometry_shader4.
Transforme el vértice de entrada de la misma manera que lo hace la canalización estándar.
vacío principal ( vacío ) { gl_Posición = ftransform (); }Nota: ftransform() ya no es compatible con GLSL desde la versión 1.40 y GLSL ES desde la versión 1.0. Ahora los programadores deben gestionar las matrices de proyección y transformación del modelo de acuerdo con el estándar OpenGL 3.1.
#versión 140 Transformación uniforme { matriz_proyección mat4 ; Mat4 modelo vista_matriz ; }; en vec3 vértice ; vacío principal () { gl_Position = matriz_proyección * matriz_vista_modelo * vec4 ( vértice , 1.0 ); }Un sombreador simple que funciona con el color y la posición.
#versión 120 #extensión GL_EXT_geometry_shader4: habilitar vacío principal () { for ( int i = 0 ; i < gl_VerticesIn ; ++ i ) { gl_FrontColor = gl_FrontColorIn [ i ]; gl_Position = gl_PositionIn [ i ]; emitVertex (); } }En OpenGL 3.2 con GLSL 1.50, se agregaron sombreadores de geometría a la "funcionalidad principal", lo que significa que ahora no es necesario usar extensiones. Sin embargo, la sintaxis es bastante complicada.
Un sombreador simple que pasa las posiciones de los vértices de los triángulos a la siguiente etapa:
#versión 150 diseño ( triángulos ) en ; // tipo de datos de entrada - diseño de triángulos ( triángulo_strip , max_vertices = 3 ) fuera ; //tipo de datos de salida: una cadena de triángulos, no más de 3 vértices (es decir, un triángulo) vacío principal () { for ( int i = 0 ; i < gl_in . longitud (); i ++ ) { gl_Posición = gl_in [ i ]. gl_Posición ; emitVertex (); //se ha creado un vértice de salida que contiene una copia de todas las salidas activas, en este caso solo gl_Position } EndPrimitive (); }Crea un texel de color rojo .
#version 120 void principal ( void ) { gl_FragColor = vec4 ( 1.0 , 0.0 , 0.0 , 1.0 ); }En GLSL 1.30 y posteriores, se utiliza la siguiente función:
glBindFragDataLocation ( Programa , 0 , "MyFragColor" );donde: Programa - un puntero al programa; 0 - número de búfer de color, si no usa MRT (Multiple Render Targets), el valor debe ser 0; "MyFragColor" es el nombre de la variable de salida del programa shader que escribe en este búfer.
#version 150 void principal ( void ) { MiFragColor = vec4 ( 1.0 , 0.0 , 0.0 , 1.0 ); }Artículos
Especificaciones