06 Capítulo 6 · Lección 2

Introducción a GLSL

Redactado por
Author Sebastian V.
Fecha de publicación

25/03/2026

Tiempo de lectura

8 min

Tema

Shaders GLSL

Un nuevo idioma: GLSL

Los Shaders no se escriben en JavaScript. Se escriben en GLSL (OpenGL Shading Language). Es un lenguaje muy parecido a C. Es fuertemente tipado, estricto y no perdona errores. Si olvidas un punto y coma (;), la pantalla se quedará negra.

Tipos de Datos (El casting estricto)

En JS puedes sumar 1 + 1.5 y no pasa nada. En GLSL, eso es un crimen que colapsa el programa. Tienes que ser explícito.

  • int: Números enteros (ej. 1, 2)
  • float: Números decimales (ej. 1.0, 2.5). Importante: Siempre pon el .0 aunque sea un número cerrado.
  • vec2: Un vector de 2 dimensiones (x, y). Se usa para posiciones 2D o coordenadas UV.
  • vec3: Un vector de 3 dimensiones (x, y, z) o (r, g, b). Se usa para colores y posiciones 3D.
  • vec4: (x, y, z, w) o (r, g, b, a). El clásico para colores con opacidad (Alpha).

Swizzling: Magia con vectores

GLSL tiene un atajo maravilloso llamado "Swizzling". Si tienes un color vec3 miColor = vec3(1.0, 0.0, 0.5);, puedes acceder a sus canales usando .rgb o .xyz.

Puedes extraer partes y mezclarlas como piezas de Lego: vec2 rojoYVerde = miColor.rg; o incluso invertirlas: vec3 invertido = miColor.bgr;.

La función main()

Todo shader GLSL DEBE tener una función llamada void main() { ... }. Es la puerta de entrada, lo primero que la GPU ejecutará. La palabra "void" significa que esta función no devuelve ningún valor con "return", sino que asigna un valor a una variable global especial (como gl_FragColor).

Consejo profesional

Acostúmbrate a pensar en rangos normalizados. En diseño web estamos acostumbrados a RGB(255, 255, 255). En GLSL, los colores van de 0.0 a 1.0. El blanco es vec3(1.0, 1.0, 1.0) y el negro vec3(0.0, 0.0, 0.0).

Sintaxis GLSL

> _
// Comentarios igual que en JS

void main() {
  // Casting estricto
  float a = 1.0;
  float b = 2.0;
  float c = a + b;

  // Declaración de un vector de color (RGB)
  vec3 colorPurpura = vec3(0.6, 0.2, 1.0);
  
  // Convertirlo a vec4 añadiendo la opacidad (Alpha de 1.0)
  vec4 colorFinal = vec4(colorPurpura, 1.0);

  // Variable global de salida obligatoria en Fragment Shaders
  gl_FragColor = colorFinal;
}
> _

El resultado de este Fragment Shader simple es un bloque de color sólido.

Errores comunes

01
Olvidar los flotantes Escribir vec3(1, 0, 0) en lugar de vec3(1.0, 0.0, 0.0). Algunas tarjetas gráficas más permisivas lo aceptarán, pero fallará estrepitosamente en los iPhones de tus usuarios.
02
Variables no inicializadas En JS si no defines el valor de algo, es undefined. En GLSL, tienes que darle valor a las variables al crearlas o tendrás comportamientos aleatorios en la GPU.

Practica lo aprendido

Habla el idioma de la GPU.

01 Asegúrate de poner .0 a todos tus números (1.0).
02 Usa vec3 o vec4 para definir colores RGB/RGBA.
03 Envía tu resultado siempre a la variable gl_FragColor.