| Artículos | 01 FEB 2004

GLSLANG

Tags: Histórico
Lenguaje de programación gráfica soportado en la API OpenGL
Eugenio Barahona.
La aparición en el mercado de DirectX 8 y de las primeras tarjetas gráficas que aceleraban por hardware dicha API supuso el despegue de una nueva generación de hardware de vídeo que, además de soportar el render de objetos tridimensionales mediante un pipeline fijo, soportaba la sustitución de determinadas partes de dicha pipeline por funciones programadas por el usuario, en un principio en un lenguaje ensamblador definido por Microsoft y posteriormente mediante el uso de lenguajes de programación de alto nivel.
En aquel momento la comunidad de desarrolladores que empleaban OpenGL como API gráfica no disponía de una capacidad estandarizada similar a la soportada en DirectX, por lo que el acceso a las nuevas funciones de programabilidad del nuevo hardware debía realizarse mediante extensiones de OpenGL propietarias de cada diseñador de procesadores gráficos. A día de hoy los programadores de OpenGL disponen ya de un lenguaje estándar definido para dicha API: glslang.
Al igual que sucede con el lenguaje de programación HLSL implementado por Microsoft para DirectX o el Cg de nVidia (este último utilizable tanto en DirectX como en OpenGL), glslang añade la posibilidad de realizar programas ejecutables por el procesador de la tarjeta gráfica, que efectúan diversos tipos de operaciones sobre la geometría presente en la memoria del adaptador de vídeo o que incluso pueden modificar la manera en que se genera cada uno de los píxeles que dan forma a cada uno de los polígonos que conforman la escena 3D que el usuario posteriormente contempla en la pantalla.
A cada unidad, que escrita en glslang es compilable individualmente, se le denomina shader, mientras que un programa es un conjunto de shaders compilados y enlazados de manera conjunta. El lenguaje de programación está basado en la sintaxis de ANSI C, si bien se han modificado algunas características cuando entraban en conflicto con el objetivo de realizar un compilador que generase código de alto rendimiento o dificultasen la implementación del compilador. Además, se ha extendido el lenguaje C estándar con nuevos tipos de datos que reflejan de manera fiel algunas de las estructuras más importantes usadas en la programación gráfica: vectores y matrices. También se han adoptado algunas de las características de C++, como por ejemplo la sobrecarga de funciones basada en los tipos de los argumentos de las mismas y la posibilidad de declarar variables cuando es preciso utilizarlas por primera vez en lugar de hacerlo al inicio de un bloque de código.
La especificación de glslang define que el hardware debe contener un procesador de vértices y otro de fragmentos. El primero de ellos trabaja sobre los datos que definen los vértices, realizando su transformación, normalización, generación y transformación de coordenadas de texturas, iluminación, aplicación del color de los materiales y recorte de colores para que sus valores estén dentro del rango representable. Por otro lado, el procesador de fragmentos se encarga de trabajar sobre valores interpolados, realizar accesos a texturas, ejecutar la aplicación de texturas a los polígonos, realizar efectos de niebla y efectuar sumas de colores. Para cada fragmento que se procesa el procesador podría calcular los valores de color y profundidad (coordenada Z), o bien descartar por completo el fragmento. Una vez que los procesadores de vértices y fragmentos han aplicado sus funciones (testeos contra el buffer Z y stencil, realización de operaciones de fundido mediante canal alfa, operaciones lógicas, etc) a la parte del pipeline que sigue permaneciendo fija. Todas estas operaciones de tipo fijo se realizan antes de escribir ningún valor en la memoria de vídeo y se mantienen como parte fija del hardware, ya que su implementación física es relativamente sencilla y barata de realizar.

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información