Una librería GPU en JS convierte colores a 6.000 millones de operaciones por segundo

Fuentes: Converting colors in JS at 6 billion operations per second

El desarrollador detrás de @colordx/core, una de las librerías de color más rápidas para JavaScript basada en optimizaciones específicas del motor V8, presenta ahora @colordx/gpu, una extensión que descarga la conversión de color a la GPU mediante WebGL y shaders de fragmentos.

La idea es sencilla: en lugar de enviar millones de píxeles calculados desde la CPU, se programa el shader con la regla matemática que convierte coordenadas de pantalla a OKLCH y, a partir de ahí, a sRGB. Cada píxel ejecuta esa conversión en paralelo, sin ramas ni estado compartido, y la comprobación de gamut se obtiene gratis como un valor numérico que define el borde.

En pruebas con un Apple M4 sobre una escena de 1024×1024 con tres gamuts y tres líneas de frontera, el sistema alcanza entre 6,1 y 6,4 mil millones de conversiones OKLCH→sRGB por segundo, con tiempos de cuadro de 0,164–0,171 ms. La misma tarea por CPU ronda los 13–18 millones de conversiones por segundo, una diferencia media de 400×. Una ventana 1024×1024 a 60 fps necesita unos 63 millones de conversiones por segundo, así que el sobrado es de casi cien veces.

La inicialización (creación de contexto, compilación del shader y primer pintado) cuesta 5–6 ms y se paga una sola vez. Las conversiones se entregan como píxeles en pantalla, no como valores legibles desde JavaScript: leer el color bajo el cursor sigue siendo una llamada a la librería de CPU, que tarda unos 218 ns.

La librería está disponible como @colordx/gpu en npm y el código en github.com/dkryaklin/colordx-gpu.