Dla większej przejrzystości: benchmark, z którym się łączysz, w ogóle nie korzysta z WebGL. (Powinienem wiedzieć, napisałem to.) A w przypadku tego konkretnego testu porównawczego absolutnie mógłbyś go uruchomić w Web Worker teraz i byłoby idealnie.
(Co ciekawe - pracownicy sieci Web nie obsługiwali aplikacji TypedArrays podczas konstruowania testu porównawczego, a ponieważ większość bibliotek macierzy polega na tym, że w danym czasie uruchamianie jej w Robotniku było niepraktyczne, zostało to naprawione.)
W każdym razie, aby odpowiedzieć na twoje pierwotne pytanie: Nie, WebGL nie może działać w pracownikach. Rdzeniem tego jest to, że aby uzyskać kontekst WebGL, należy wywołać getContext
na elemencie canvas. Pracownicy Sieci wyraźnie nie zezwalają na dostęp do DOM (co jest dobrą rzeczą, BTW!) I jako taki nigdy nie będziesz mieć dostępu do WebGL od pracownika.
Ale to nie jest tak źle, jak mogłoby się wydawać. Po pierwsze, należy wziąć pod uwagę, że większość renderowania 3D w rzeczywistości dzieje się w innym wątku. W szczególności cała masa wątków uruchomionych na twoim GPU. Jedyną częścią, którą przeglądarka ma w swojej przeglądarce, jest poinformowanie sterownika graficznego "Hey! Start renderowanie niektórych trójkątów przy użyciu tych danych!" a następnie porusza się, nie czekając na renderowanie trójkątów. W związku z tym, podczas gdy komendy rysowania muszą być wykonywane z głównego procesu, czas, w jakim blokuje ten proces (zazwyczaj) jest bardzo mały.
Oczywiście, to nie jest to, co zje dużo czasu, jeśli kodowałeś grę w czasie rzeczywistym. Masz animacje, fizykę, sztuczną inteligencję, wykrywanie kolizji, odnajdywanie ścieżek ... istnieje wiele zadań nie związanych z grafiką, które pochłoną twój procesor, jeśli im na to pozwolisz. W niektórych przypadkach (animacja) zwykle są to tylko porcje matematyczne i matematyczne, podobnie jak w przypadku testu porównawczego, z którym się łączysz! Na szczęście dla nas ten typ przetwarzania może zostać wykonany w module Robotnik, a wszystko, co musimy przekazać do głównego wątku, to dane wymagane do renderowania sceny.
Tak, to wprowadza pewne wyzwania związane z synchronizacją i transferem danych, ale ogólnie rzecz biorąc, zdecydowanie lepiej będzie zamknąć przeglądarkę, gdy próbujemy symulować zderzenia tych 500 skrzynek.
W innych nowościach, że test porównawczy jest stary (używa starych wersji różnych bibliotek macierzy), błędny i nieważny (nie zadał sobie trudu sprawdzenia, czy wywoływane funkcje faktycznie obliczają te same rzeczy). Oto jeden, który nie jest uszkodzony http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html – gman
Jeszcze nie. Ale po prostu wyszukuj WebGL w WebWorker, a przekonasz się, że to działa. – abergmeier