De Wikipedia, la enciclopedia libre
  (Redirigido desde GLSL )
Saltar a navegación Saltar a búsqueda
Los videojuegos subcontratan los cálculos de renderizado a la GPU a través de OpenGL en tiempo real. Los sombreadores se escriben en OpenGL Shading Language y se compilan. Los programas compilados se ejecutan en la GPU.

Glsl ( GLSL ) es un alto nivel de lenguaje de sombreado con una sintaxis basada en el lenguaje de programación C . Fue creado por OpenGL ARB (OpenGL Architecture Review Board) para brindar a los desarrolladores un control más directo de la canalización de gráficos sin tener que usar lenguaje ensamblador ARB o lenguajes específicos de hardware.

Antecedentes [ editar ]

Con los avances en las tarjetas gráficas, se han agregado nuevas funciones para permitir una mayor flexibilidad en la canalización de renderizado a nivel de vértice y fragmento . La programabilidad en este nivel se logra con el uso de sombreadores de vértices y fragmentos .

Originalmente, esta funcionalidad se logró escribiendo sombreadores en lenguaje ensamblador ARB , una tarea compleja y poco intuitiva. El OpenGL ARB creó el lenguaje de sombreado OpenGL para proporcionar un método más intuitivo para programar la unidad de procesamiento de gráficos mientras se mantiene la ventaja de los estándares abiertos que ha impulsado OpenGL a lo largo de su historia.

Originalmente introducido como una extensión de OpenGL 1.4, GLSL fue incluido formalmente en el núcleo de OpenGL 2.0 en 2004 por OpenGL ARB. Fue la primera revisión importante de OpenGL desde la creación de OpenGL 1.0 en 1992.

Algunos beneficios de usar GLSL son:

  • Compatibilidad multiplataforma en múltiples sistemas operativos, incluidos Linux , macOS y Windows .
  • La capacidad de escribir sombreadores que se pueden usar en la tarjeta gráfica de cualquier proveedor de hardware que admita OpenGL Shading Language.
  • Cada proveedor de hardware incluye el compilador GLSL en su controlador, lo que permite a cada proveedor crear código optimizado para la arquitectura de su tarjeta gráfica en particular.

Versiones [ editar ]

Las versiones de GLSL han evolucionado junto con versiones específicas de la API de OpenGL. Solo con las versiones 3.3 y superiores de OpenGL coinciden los números de versión mayor y menor de GLSL y OpenGL. Estas versiones para GLSL y OpenGL están relacionadas en la siguiente tabla:

OpenGL ES y WebGL usan OpenGL ES Shading Language (abreviado: GLSL ES o ESSL ).

Los dos idiomas están relacionados pero no son directamente compatibles. Se pueden interconvertir a través de SPIR-Cross . [dieciséis]

Idioma [ editar ]

Operadores [ editar ]

GLSL contiene los mismos operadores que los operadores en C y C ++ , con la excepción de punteros . Los operadores bit a bit se agregaron en la versión 1.30.

Funciones y estructuras de control [ editar ]

Similar al lenguaje de programación C , GLSL admite bucles y ramificaciones, por ejemplo: if-else, for, switch, etc. La recursividad está prohibida y se comprueba durante la compilación.

Se admiten funciones definidas por el usuario y se proporcionan funciones integradas. El fabricante de la tarjeta gráfica puede optimizar las funciones integradas a nivel de hardware. Muchas de estas funciones son similares a las de la biblioteca matemática del lenguaje de programación C, mientras que otras son específicas de la programación de gráficos. La mayoría de las funciones y operadores incorporados pueden operar tanto en escalares como en vectores (hasta 4 elementos), para uno o ambos operandos. Común funciones integradas que se proporcionan y se usan comúnmente para fines gráficos son: mix, smoothstep, normalize, inversesqrt, clamp, length, distance, dot, cross, reflect, refracty el vector miny max. Otras funciones como abs, sin,pow, etc., pero también todos pueden operar en cantidades vectoriales, es decir pow(vec3(1.5, 2.0, 2.5), abs(vec3(0.1, -0.2, 0.3))). GLSL admite la sobrecarga de funciones (tanto para funciones y operadores integrados como para funciones definidas por el usuario), por lo que puede haber varias definiciones de función con el mismo nombre, con diferente número de parámetros o tipos de parámetros. Cada uno de ellos puede tener su propio tipo de retorno independiente.

Preprocesador [ editar ]

GLSL define un subconjunto del preprocesador C (CPP), combinado con sus propias directivas especiales para especificar versiones y extensiones OpenGL. Las partes eliminadas de CPP son las relacionadas con nombres de archivos como #includey __FILE__. [17]

La GL_ARB_shading_language_includeextensión [18] (implementada, por ejemplo, en los controladores de Nvidia [19] en Windows y Linux, y todos los controladores de Mesa 20.0.0 [20] en Linux, FreeBSD y Android) implementa la capacidad de uso #includeen el código fuente, lo que permite compartir el código más fácilmente. y definiciones entre muchos sombreadores sin preprocesamiento manual adicional. Extensión similares GL_GOOGLE_include_directivey GL_GOOGLE_cpp_style_line_directiveexisten para el uso de GLSL con Vulkan, y se apoyan en referencia SPIR-V compilador ( glslangaka glslangValidator). [21] [22] [23]

Compilación y ejecución [ editar ]

Los sombreadores GLSL no son aplicaciones independientes; requieren una aplicación que utilice la API OpenGL, que está disponible en muchas plataformas diferentes (por ejemplo, Linux , macOS , Windows ). Hay enlaces de lenguaje para C , C ++ , C # , JavaScript , Delphi , Java y muchos más.

Los sombreadores GLSL en sí mismos son simplemente un conjunto de cadenas que se pasan al controlador del proveedor de hardware para su compilación desde dentro de una aplicación utilizando los puntos de entrada de la API OpenGL. Los sombreadores pueden crearse sobre la marcha desde una aplicación o leerse como archivos de texto, pero deben enviarse al controlador en forma de cadena.

El conjunto de API que se utiliza para compilar, vincular y pasar parámetros a los programas GLSL se especifica en tres extensiones de OpenGL y se convirtió en parte del núcleo de OpenGL a partir de la versión 2.0 de OpenGL. La API se amplió con sombreadores de geometría en OpenGL 3.2, sombreadores de teselación en OpenGL 4.0 y sombreadores de cálculo en OpenGL 4.3. Estas API de OpenGL se encuentran en las extensiones:

  • Sombreador de vértices ARB
  • Sombreador de fragmentos ARB
  • Objetos de sombreado ARB
  • Sombreador de geometría ARB 4
  • Sombreador de teselación ARB
  • Sombreador de cálculo ARB

Los sombreadores GLSL también se pueden usar con Vulkan , y son una forma común de usar sombreadores en Vulkan. Los sombreadores GLSL se precompilan antes de su uso, o en tiempo de ejecución, en un formato de código de bytes binario llamado SPIR-V , generalmente usando un compilador fuera de línea.

Ver también [ editar ]

  • Representación intermedia estándar portátil , un lenguaje de sombreado intermedio de Khronos Group
  • Gráficos 3D por computadora
  • Grupo Khronos
  • WebGL , un dialecto OpenGL-ES para navegadores web, que usa GLSL para sombreadores
  • Shadertoy
  • LWJGL , una biblioteca que incluye enlaces Java para OpenGL.

Otros lenguajes de sombreado [ editar ]

  • Lenguaje ensamblador ARB , un lenguaje de sombreado de bajo nivel
  • Cg , un lenguaje de sombreado de alto nivel para programar sombreadores de vértices y píxeles
  • HLSL , un lenguaje de sombreado de alto nivel para usar con Direct3D
  • TGSI , un lenguaje intermedio de bajo nivel introducido por Gallium3D
  • AMDIL , un lenguaje intermedio de bajo nivel utilizado internamente en AMD
  • Lenguaje de sombreado de RenderMan

Referencias [ editar ]

Citas
  1. ^ "Especificación de lenguaje GLSL, versión 1.10.59" (PDF) .
  2. ^ "Especificación de lenguaje GLSL, versión 1.20.8" (PDF) .
  3. ^ "Especificación de lenguaje GLSL, versión 1.30.10" (PDF) .
  4. ^ "Especificación de lenguaje GLSL, versión 1.40.08" (PDF) .
  5. ^ "Especificación de lenguaje GLSL, versión 1.50.11" (PDF) .
  6. ^ "Especificación de lenguaje GLSL, versión 3.30.6" (PDF) .
  7. ^ "Especificación de lenguaje GLSL, versión 4.00.9" (PDF) .
  8. ^ "Especificación de lenguaje GLSL, versión 4.10.6" (PDF) .
  9. ^ "Especificación de lenguaje GLSL, versión 4.20.11" (PDF) .
  10. ^ "Especificación de lenguaje GLSL, versión 4.30.8" (PDF) .
  11. ^ "Especificación de lenguaje GLSL, versión 4.40.9" (PDF) .
  12. ^ "Especificación de lenguaje GLSL, versión 4.50.7" (PDF) .
  13. ^ "Especificación de lenguaje GLSL, versión 4.60.5" (PDF) .
  14. ^ "Especificación de lenguaje GLSL ES, versión 1.00, revisión 17" (PDF) .
  15. ^ "Especificación de lenguaje GLSL ES, versión 3.00, revisión 6" (PDF) .
  16. KhronosGroup / SPIRV-Cross , The Khronos Group, 2019-09-06 , consultado el 2019-09-08
  17. ^ "Preprocesador de sombreado". Guía de programación de OpenGL: la guía oficial para aprender OpenGL, versión 4.3, octava edición .
  18. ^ "ARB_shading_language_include" . Khronos.org . Consultado el 31 de mayo de 2020 .
  19. ^ "Controlador NVIDIA 265.90 WHQL Quadro" . Foros de LaptopVideo2Go .
  20. ^ "Notas de la versión de Mesa 20.0.0 / 19/02/2020" . www.mesa3d.org . Consultado el 31 de mayo de 2020 .
  21. ^ "#incluye el apoyo de la directiva de antiagainst · Pull Request # 46 · KhronosGroup / glslang" . GitHub . Consultado el 31 de mayo de 2020 .
  22. ^ "Manejo de número de línea de preprocesamiento por antiagainst · Pull Request # 38 · KhronosGroup / glslang" . GitHub .
  23. ^ "Extienda la sintaxis de #line y __FILE__ para admitir cadenas de nombre de archivo por antiagainst · Pull Request # 43 · KhronosGroup / glslang" . GitHub .

Lectura adicional [ editar ]

Libros
  • Rost, Randi J. (30 de julio de 2009). Lenguaje de sombreado OpenGL (3ª ed.). Addison-Wesley. ISBN 978-0-321-63763-5.
  • Kessenich, John; Baldwin, David; Rost, Randi. El lenguaje de sombreado de OpenGL . Versión 1.10.59. 3Dlabs, Inc. Ltd.
  • Bailey, Mike; Cunningham, Steve (22 de abril de 2009). Sombreadores gráficos: teoría y práctica (2ª ed.). Prensa CRC. ISBN 978-1-56881-434-6.

Enlaces externos [ editar ]

  • El sitio web oficial de OpenGL