Modo GPU restringido
Los recintos grandes con imágenes de fondo de alta resolución pueden agotar la memoria de la GPU en dispositivos móviles, provocando el cierre de la pestaña del navegador. Ahora el renderizador detecta automáticamente las capacidades del dispositivo durante la inicialización y adapta su estrategia de renderizado. En dispositivos restringidos, un sistema de texturas de dos capas reemplaza la carga del fondo a resolución completa, manteniendo el uso de memoria de la GPU dentro de límites seguros y preservando la calidad visual cuando el usuario acerca la imagen.
No se requiere ningún cambio de código en las aplicaciones host: la optimización es automática y transparente.
Cómo funciona la detección
Al inicializar el renderizador se ejecuta un microbenchmark de GPU que clasifica el dispositivo en uno de dos niveles:
| Nivel | Dispositivos típicos | Estrategia de fondo |
|---|---|---|
| high | Escritorio, móviles de gama alta | Textura a resolución completa cargada en la GPU |
| constrained | iPhone, Android de gama media, tabletas | Sistema de texturas de dos capas (ver abajo) |
La detección utiliza una heurística de tres capas, evaluada en orden:
- Basada en pantalla (la más rápida): los dispositivos con DPR >= 3 o un total de píxeles de pantalla > 8 millones se clasifican como constrained
- Basada en WebGL: los dispositivos que reportan un tamaño máximo de textura <= 8192 se clasifican como constrained
- Basada en benchmark: una textura RGBA de 512x512 se carga en la GPU 10 veces; los dispositivos con un resultado total superior a 30ms se clasifican como constrained
Si ninguna de las comprobaciones se activa, el dispositivo se clasifica como high.
Qué cambia en el modo restringido
| Aspecto | Nivel high | Nivel constrained |
|---|---|---|
| Dimensión máxima del canvas | Sin límite | 2048px |
| Fondo en la GPU | Resolución completa | Solo vista previa de baja resolución |
| Detalle al hacer zoom | N/D | Recorte de alta resolución bajo demanda |
| Memoria de GPU | Mayor | Limitada |
Sistema de texturas de dos capas
En el modo restringido, el renderizador mantiene dos capas de texturas:
Capa 1 – Vista previa (permanente): una imagen de vista previa precomprimida (~1000px de ancho) permanece en la memoria de la GPU en todo momento. Esto proporciona la vista del recinto completo cuando se aleja la imagen.
Capa 2 – Detalle (bajo demanda): cuando el usuario hace zoom en una sección más allá de un umbral calculado, se genera un recorte de alta resolución del área visible y se carga en la GPU. El recorte se limita a 2048px en su lado más largo e incluye un margen del 30% alrededor de la ventana gráfica para reducir los nuevos recortes durante pequeños movimientos de paneo.
La textura de detalle se descarta automáticamente cuando el usuario aleja la imagen por debajo del umbral, liberando memoria de la GPU. Un contador de generación evita que se apliquen recortes obsoletos durante cambios rápidos de zoom.
Configuración
El nivel de GPU se resuelve en este orden de prioridad:
1. Detección automática (predeterminado)
No se necesita configuración. El renderizador ejecuta el microbenchmark y clasifica el dispositivo automáticamente.
const renderer = new SeatmapBookingRenderer(container, {
publicKey: 'your-public-key',
// gpuTier not set -- auto-detected
});
2. Anulación en la configuración
Fuerza un nivel específico mediante el ajuste gpuTier. Útil para despliegues en quioscos o cuando se conoce el parque de dispositivos de destino.
const renderer = new SeatmapBookingRenderer(container, {
publicKey: 'your-public-key',
gpuTier: 'constrained', // or 'high'
});
3. Parámetro de URL
Anulación mediante la cadena de consulta para pruebas o anulaciones por dispositivo en incrustaciones iframe:
https://your-site.com/venue/123?gpuTier=constrained
Cuándo forzar el modo restringido
La detección automática funciona bien en la mayoría de los escenarios. Considera forzar gpuTier: 'constrained' cuando:
- Quiosco / señalización digital: hardware conocido con memoria de GPU limitada
- Parque de dispositivos de gama baja: escáneres móviles de entradas o tabletas de punto de venta
- Fallos reportados por usuarios: una mitigación rápida mientras se investiga la causa raíz
- Pruebas: verificar que la ruta restringida funciona correctamente en una máquina de escritorio
Salida de depuración
Activa debug: true en la configuración del renderizador para ver los detalles de detección de GPU en la consola del navegador:
[seatmap] GPU tier: constrained (DPR=3, screen=8.5M px, maxCanvas=2048, source=auto)
[seatmap] GPU: Apple A15 (maxTex=4096, mem=6GB, bench=45ms)
El campo source muestra de dónde provino la decisión de nivel: settings (anulación explícita), url (parámetro de consulta) o auto (resultado del microbenchmark).
Los eventos de carga de la imagen de fondo incluyen el tipo de textura y el tiempo:
[seatmap] Background loaded: type=detail-crop, 1024x768, 3.0MB GPU, 87ms
Referencia del benchmark
Resultados típicos del microbenchmark como referencia:
| Resultado | Clase de dispositivo | Nivel |
|---|---|---|
| < 10ms | Escritorio, móviles de gama alta | high |
| 10-30ms | Móviles de gama media | high |
| 30-80ms | iPhone 13, Android económicos | constrained |
| > 80ms | Antiguos / de muy baja gama | constrained |
El umbral de 30ms se eligió a partir de pruebas empíricas en varios dispositivos. Los dispositivos cercanos al umbral pueden variar entre sesiones: esto es esperable y ambos niveles ofrecen un renderizado correcto.