GLSL es el acrónimo de OpenGL Shading Language, una tecnología parte del API estandar de OpenGL, que permite especificar segmentos de programas gráficos que serán ejecutados sobre el GPU. Su contrapartida en DirectX es HLSL.
Vista al pipeline
La siguiente figura es un diagrama simplificado de los estados del pipeline y de la información que viaja a trabajes de estos. Aunque es extremadamente simplificado, es suficiente para mostrar algunos conceptos importantes de la programación con shaders. Notese que este pipeline es una abstracción y no necesariamente concuerda con alguna implementación en particular.
Tranformación de los vertices
Podemos decir que un vertice es un conjunto de atributos como posición en el espacio, al igual que color, normal, coordinadas de la textura, entre otros. Las entradas para este estado son los atributos de los vertices individuales. Algunas de las operaciones realizadas por la funcionalidad modificada son:
Información interpolada de los fragmentos es la entrada de este estado. Un color ya ha sido definido en el estado anterior atravez de la interpolación, y aqui puede ser combinado con un texel (elemento de textura) por ejemplo. Coordinadas de la textura han sido tambien interpoladas en el estado anterior. El resultado final de este estado por cada uno de los fragmentos es un valor de color y de profundidad para cada uno de los fragmentos.
Podemos decir que un vertice es un conjunto de atributos como posición en el espacio, al igual que color, normal, coordinadas de la textura, entre otros. Las entradas para este estado son los atributos de los vertices individuales. Algunas de las operaciones realizadas por la funcionalidad modificada son:
- Tranformación de la posicion de los vertices
- Iluminación de los vertices
- Generación y transformación de las coordenadas de la texturas
Información interpolada de los fragmentos es la entrada de este estado. Un color ya ha sido definido en el estado anterior atravez de la interpolación, y aqui puede ser combinado con un texel (elemento de textura) por ejemplo. Coordinadas de la textura han sido tambien interpoladas en el estado anterior. El resultado final de este estado por cada uno de los fragmentos es un valor de color y de profundidad para cada uno de los fragmentos.
Ejemplos del uso de GLSL

Cg - C for graphics
¿Que es Cg?
Cg - C for graphics
¿Que es Cg?
Cg es un lenguaje de programación que nos permite controlar la forma, apariencia y movimientos de los objetos dibujados, usando hardware de gráficas programables. Combina el control de estos atributos por medio de la programación, con la increíble velocidad y capacidades de los procesadores gráficos de hoy en día.
Cg probé a los programadores con una plataforma de programación que es fácil de usar y permite la creación de manera rápida de efectos especiales y experiencias en tiempo real de calidad cinematográfica en múltiples plataformas.
Cg remueve la necesidad de los programadores de programar directamente en el lenguaje ensamblador del hardware gráfico, y en su lugar lenguajes más fáciles como OpenGL, DirectX, etc. Este es compatible con HLSL para DirectX.
Los programas en Cg operan en los vertices y en los fragmentos que son procesados cuando se renderiza una imagen. Cada vez que un vertice es renderizado o rasterizado genera un fragmento mientras se renderiza una escena en 3D, el programa en Cg se ejecuta.
De ninguna forma Cg sustituye a los lenguajes de proposito general. Cg es un lenguaje auxiliar diseñado especificamente para GPUs. Prograamas escritos para el CPU en lenguajes convencionales como C o C++ pueden utilizar el runtime de Cg para cargar programas en Cg para que se ejecuten. El runtime de Cg es un subconjunto de subrutinas usadas para cargar, compilar, manipular y configurar programas en Cg para ser ejecutados por el GPU. Las aplicaciones proveen programas Cgpara instruir al GPU en cómo llevar a cabo los efectos de renderizado, que de otra manera serían imposibles en un CPU.
Cg tiene un libreria de funciones, llamada la libreria estandar, que probe las operaciones requeridas para los graficos. Por ejemplo, la libreria incluye una función reflect para realizar reflección de vectores.
No todo lo que se puede escribir en Cg puede ser compilado para ser ejecutado en un GPU dado. Cg incluye el concepto de "perfiles" del hardware, el cual se especifica cuando se compila. Cada perfil corresponde a una combinación particular de arquitecturas de GPU y APIs gráficas. Por lo que el programa no solo tiene que estar bien para compilar, sino que tiene que cumplir las restricciones particulares del perfil escogido.

Cg probé a los programadores con una plataforma de programación que es fácil de usar y permite la creación de manera rápida de efectos especiales y experiencias en tiempo real de calidad cinematográfica en múltiples plataformas.
Cg remueve la necesidad de los programadores de programar directamente en el lenguaje ensamblador del hardware gráfico, y en su lugar lenguajes más fáciles como OpenGL, DirectX, etc. Este es compatible con HLSL para DirectX.
Los programas en Cg operan en los vertices y en los fragmentos que son procesados cuando se renderiza una imagen. Cada vez que un vertice es renderizado o rasterizado genera un fragmento mientras se renderiza una escena en 3D, el programa en Cg se ejecuta.
De ninguna forma Cg sustituye a los lenguajes de proposito general. Cg es un lenguaje auxiliar diseñado especificamente para GPUs. Prograamas escritos para el CPU en lenguajes convencionales como C o C++ pueden utilizar el runtime de Cg para cargar programas en Cg para que se ejecuten. El runtime de Cg es un subconjunto de subrutinas usadas para cargar, compilar, manipular y configurar programas en Cg para ser ejecutados por el GPU. Las aplicaciones proveen programas Cgpara instruir al GPU en cómo llevar a cabo los efectos de renderizado, que de otra manera serían imposibles en un CPU.
Cg tiene un libreria de funciones, llamada la libreria estandar, que probe las operaciones requeridas para los graficos. Por ejemplo, la libreria incluye una función reflect para realizar reflección de vectores.
No todo lo que se puede escribir en Cg puede ser compilado para ser ejecutado en un GPU dado. Cg incluye el concepto de "perfiles" del hardware, el cual se especifica cuando se compila. Cada perfil corresponde a una combinación particular de arquitecturas de GPU y APIs gráficas. Por lo que el programa no solo tiene que estar bien para compilar, sino que tiene que cumplir las restricciones particulares del perfil escogido.
Un poco de historia
Nvidia y Microsoft colaboraron para el desarrollo de Cg. Microsoft llama a su implementación High Level Shading Language, o HLSL. HLSL y Cg son el mismo lenguaje pero reflejan los diferentes nombres que cada compania usa para identificar el lenguaje y la tecnologia en que estan basados. HLSL es parte de DirectX Graphics, un componente del framework multimedia de programacion 3D, por lo que se puede integrar con Direct3D o OpenGL.
Cg trabaja en Windows, Linux, Mac OS X, consolas de videojuegos, o sistemas embebidos. Cg trabaja en la mayoria de los GPUs.
Nvidia y Microsoft colaboraron para el desarrollo de Cg. Microsoft llama a su implementación High Level Shading Language, o HLSL. HLSL y Cg son el mismo lenguaje pero reflejan los diferentes nombres que cada compania usa para identificar el lenguaje y la tecnologia en que estan basados. HLSL es parte de DirectX Graphics, un componente del framework multimedia de programacion 3D, por lo que se puede integrar con Direct3D o OpenGL.
Cg trabaja en Windows, Linux, Mac OS X, consolas de videojuegos, o sistemas embebidos. Cg trabaja en la mayoria de los GPUs.