Shaders GLSL y OpenGL

Los Shaders son una herramienta sumamente útil cuando estamos desarrollando aplicaciones visuales.

No solo nos permiten programar dentro del pipeline de la Tarjeta de Video para desarrollar efectos visuales sorprendentes, sino que además nuestros programas se ejecutan automáticamente en paralelo sobre cada uno de los vértices o fragmentos (dependiendo del tipo de Shader), permitiendo acelerar muchísimo algunas operaciones que, de ser realizadas en la CPU, frenarían toda la aplicación.

Los Shaders se desarrollan en lenguajes de programación especiales y deben ser compilados en tiempo de ejecución sobre la plataforma en la cual nuestra aplicación está ejecutando. El lenguaje de Shading compañero de OpenGL es GLSL (GL Shading Language) y su desarrollo también se encuentra a cargo del Grupo Khronos.

En Lighthouse 3D se presenta un tutorial muy claro (si bien un poquito desactualizado) que explica cómo cargar Shaders GLSL, compilarlos y adjuntarlos a un programa. Lo que me llamó la atención particularmente en el sitio fue el siguiente esquema, el cual resume visualmente todo proceso.


Carga de Shaders escritos en GLSL desde OpenGL. Fuente: Lighthouse 3D.



El lector cauteloso notará inmediatamente la similitud entre el proceso de compilación de Shaders GLSL y el proceso de compilación de programas C. Esto no es casualidad; Ya que GLSL está basado en C, es razonable que el Grupo Khronos se decidiera a basarse también en su modelo de compilación.

Algo a notar es que esta figura deja por fuera todo el proceso de interacción de la aplicación con los programas GLSL compilados, así como el proceso de limpieza de recursos posterior. Pueden revisar el resto del tutorial para obtener un pantallazo de cómo se realizan estas otras tareas.

Como es de esperarse, el tutorial asume que estamos trabajando en C, no obstante, trabajando desde Python con PyOpenGL, el proceso de carga de archivos de texto con código fuente GLSL, así como su carga a OpenGL es extremadamente sencillo. Esto es principalmente debido a que las construcciones de Python para E/S son extremadamente sencillas y, aparentemente, los desarrolladores de PyOpenGL se tomaron el trabajo de “Pythonizar” esta porción de la API, simplificando mucho todo el proceso.

Les recomiendo revisar el tutorial en Lighthouse 3D o bien dirigirse a opengl.org para encontrar la referencia completa de cada una de estas funciones y de GLSL.

This entry was posted in OpenGL. Bookmark the permalink.