Lenguaje de sombreado OpenGL

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 14 de mayo de 2018; las comprobaciones requieren 19 ediciones .
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) .

Historia

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

GLSL 1.50

Se agregó soporte para sombreadores de geometría, para los cuales se usaron previamente las extensiones GL_ARB_geometry_shader4 , GL_EXT_geometry_shader4.

Un ejemplo de un Vertex Shader simple en GLSL

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 ejemplo de un Geometry Shader simple en GLSL

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

Un ejemplo de un sombreador de fragmentos GLSL simple

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

ID

Véase también

Literatura

  • Boreskov Aleksey . Desarrollo y depuración de shaders. - BHV-Petersburg, 2006. - 488 p. - ISBN 5-94157-712-5 .
  • Boreskov Aleksey . Extensiones OpenGL. - BHV-Petersburg, 2005. - 688 p. — ISBN 5-94157-614-5 .

Notas

  1. OpenGL 3.3 y 4.0 dan nueva vida al hardware de gráficos existente y allanan el camino para las GPU de próxima generación (enlace descendente) . Nick Haemel (11 de marzo de 2010). Consultado el 13 de marzo de 2010. Archivado desde el original el 10 de abril de 2012. 
  2. Especificación del idioma GLSL, versión 1.10.59 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 28 de septiembre de 2018.
  3. Especificación del idioma GLSL, versión 1.20.8 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 5 de abril de 2019.
  4. Especificación del idioma GLSL, versión 1.30.10 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 19 de enero de 2019.
  5. Especificación del idioma GLSL, versión 1.40.8 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 11 de agosto de 2017.
  6. Especificación del idioma GLSL, versión 1.50.11 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 29 de abril de 2016.
  7. Especificación del idioma GLSL, versión 3.30.6 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 11 de agosto de 2017.
  8. Especificación del idioma GLSL, versión 4.00.9 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 12 de agosto de 2017.
  9. Especificación del idioma GLSL, versión 4.10.6 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 19 de enero de 2019.
  10. Especificación del idioma GLSL, versión 4.20.11 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 19 de enero de 2019.
  11. Especificación del idioma GLSL, versión 4.30.8 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 28 de septiembre de 2018.
  12. Especificación del idioma GLSL, versión 4.40.9 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 28 de septiembre de 2018.
  13. Especificación del idioma GLSL, versión 4.50.7 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 19 de julio de 2019.
  14. Especificación del lenguaje GLSL, versión 4.60.5 . Consultado el 28 de septiembre de 2018. Archivado desde el original el 12 de agosto de 2018.
  15. Especificación del idioma GLSL ES, versión 1.00, revisión 17 . Consultado el 19 de junio de 2018. Archivado desde el original el 13 de julio de 2018.
  16. Especificación del idioma GLSL ES, versión 3.00, revisión 6 . Consultado el 19 de junio de 2018. Archivado desde el original el 4 de marzo de 2018.

Enlaces

Artículos

Especificaciones