En aras de la claridad: el punto de referencia al que se vinculó no utiliza WebGL en absoluto. (Debería saberlo, lo escribí). Y en el caso de ese punto de referencia en particular, absolutamente podría ejecutarlo en un Trabajador web ahora y estaría perfectamente bien.
(Dato curioso - Web trabajadores no apoyaron TypedArrays cuando el punto de referencia fue construido, y ya que la mayoría de las bibliotecas de la matriz se basan en que no era práctico para ejecutarlo en un trabajador en ese momento que ya se ha solucionado..)
De todos modos, para responder a su pregunta original: No, WebGL no se puede ejecutar en un trabajador. El principal bloqueador de esto es que para obtener un contexto WebGL debe llamar al getContext
en un elemento canvas. Los Trabajadores Web explícitamente no permiten el acceso a DOM (¡lo cual es bueno, por cierto!) Y como tal, nunca podrás acceder a WebGL de un trabajador.
Pero eso no es tan malo como se podría pensar. Por un lado, considere que la mayoría de todas las representaciones 3D en realidad están sucediendo en un hilo diferente de todos modos. Específicamente, un conjunto completo de subprocesos que se ejecutan en su GPU. La única parte que tiene el navegador es decirle a su controlador de gráficos "¡Hey! ¡Comience a renderizar algunos triángulos usando esta información!" y luego se mueve sin esperar a que los triángulos realmente sean renderizados. Como tal, aunque los comandos de dibujo se deben ejecutar desde el proceso principal, el tiempo que pasa bloqueando ese proceso es (por lo general) muy poco.
Por supuesto, eso no es lo que va a consumir mucho de su tiempo si estuviera programando un juego en tiempo real. Tienes animaciones, física, inteligencia artificial, detección de colisión, detección de caminos ... hay muchas tareas no gráficas involucradas que comerán tu CPU con vida si las permites. En algunos casos (animación), usualmente son solo gilipollas de matemática matricial, ¡justo como el punto de referencia al que se vincula! Afortunadamente para nosotros, sin embargo, ese tipo de procesamiento PUEDE hacerse en un trabajador, y todo lo que necesitamos comunicar al hilo principal son los datos necesarios para representar la escena.
Sí, esto presenta algunos desafíos en términos de sincronización y transferencia de datos, pero en general será mucho más preferible bloquear su navegador mientras tratamos de simular esas 500 cajas colisionando.
En otras noticias de ese punto de referencia es antiguo (utiliza versiones antiguas de las distintas bibliotecas de la matriz), mal y no válido (no se molestó en comprobar si las funciones que se llaman fueron en realidad el cálculo de las mismas cosas). Aquí hay uno que no está roto http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html – gman
Aún no. Pero solo busque WebGL en WebWorker y verá que está en proceso. – abergmeier