Volver al blog Read this post in English
Las limitaciones técnicas de RobinPad al detalle

Las limitaciones técnicas de RobinPad al detalle

En este post te quiero explicar cómo funciona RobinPad enfocándome en sus límites técnicos. Desde el rendimiento, compatibilidad con dispositivos o motor de pintura.

Como ya sabes, RobinPad es una herramienta que funciona en tu navegador de forma 100% local. Esto quiere decir que, cuando RobinPad aparece en tu pantalla, todo lo que sucede, las herramientas que utilizas, todo lo que pintas, lo que exportas, los filtros que aplicas, la configuración que modificas, lo que personalizas, etc... se procesa y se guarda en tu dispositivo, nada se transfiere a ningún servidor.

El navegador

Durante el desarrollo de RobinPad me documenté acerca de las posibilidades de cada navegador, la compatibilidad con dispositivos de entrada (stylus, tabletas), con gestos, pantallas táctiles, etc.

Finalmente los navegadores basados en Chrome, como el propio Google Chrome, pero también Helium, Opera, Edge, Vivaldi... y algún otro, resultaron ser los que ofrecen compatibilidad nativa con muchas funciones esenciales. Mejor gestión de almacenamiento, opciones de privacidad, compatibilidad con stylus por defecto, también con pantallas multitáctil... por lo que me centré totalmente en este motor base de navegador, y es por ello que RobinPad solo funciona de forma óptima en ellos.

Los límites de almacenamiento y rendimiento

Para empezar, un navegador no permite aprovechar todo el rendimiento de los dispositivos, al menos con el framework que escogí para desarrollar RobinPad, sólo tengo acceso al procesador, no a la tarjeta gráfica.

Tampoco permite el acceso total al disco duro para almacenar datos persistentes, el navegador permite a cada sitio web un pequeño espacio, que puede variar dependiendo de las condiciones del dispositivo. No es un espacio fijo. A veces puede asignarte unos pocos gigas, y otras veces puede asignar entre 10 y 15 gb.

Compatibilidad con tabletas y stylus

Este ha sido uno de los puntos más delicados, y el que más dolores de cabeza me ha provocado. Es mucho más complejo de lo que puedo explicar en un post, pero resumiendo: el navegador no sabe qué tableta ni stylus estás usando, detecta un dispositivo y trata con su propio motor de presión genérico a todos los dispositivos por igual. Es decir, no se aprovechan los drivers, ni los niveles de presión, ni las curvas de presión propias de cada dispositivo.

Además, el navegador trata los dispositivos de entrada como dispositivos de escritura trazos simples, es decir, nunca se pensó en el navegador como un lugar para pintar, por lo que las curvas de presión no están bien ajustadas, con saltos bruscos al finalizar o empezar trazos, habiendo tenido que crear un motor de pintura alrededor del sistema nativo del navegador, que arregle todos los desajustes e imprecisiones del mismo, y aún sigue habiendo margen para afinar, algo que iré haciendo poco a poco.

Los trucos para optimizar el motor de pintura

La base que utilizan todos los programas de pintura digital es simple. Cada vez que apoyas y arrastras el stylus, se repite la forma de la punta del pincel elegido, según la configuración: X veces por X distancia, sumado a la curva de opacidad por presión, tamaño etc... Todo esto debe ser procesado por un algoritmo y guardado en milésimas de segundo, y ahí es donde se debe hacer magia.

En cuanto a "magia" me refiero a lógica pura.

El motor de pintura de RobinPad y su optimización, se basa en aprovechar los movimientos que realizas al pintar, parar, levantar el stylus o alejarte del lienzo.

La mayor carga sucede cuando, tras pintar uno o varios trazos seguidos, eso debe mostrarse, no desaparecer, y ser procesado en un formato que el navegador pueda volver a mostrar.

¿Qué sucede?

Lo que sucede en RobinPad es lo siguiente: