Emulująca grafika oparta na palecie w WebGL v.s. Canvas 2D

Obecnie używam kontekstu kanwy 2D, aby narysować wygenerowany obraz (od piksela do piksela, ale odświeżony jako cały bufor raz po wygenerowanej ramce) z JavaScript przy szybkości około 25 klatek na sekundę. Wygenerowany obraz jest zawsze jednobajtowy (liczba całkowita / tablica typowana) na piksel, a stała paleta jest używana do wygenerowania końcowego wyniku RGB. Skalowanie jest również potrzebne, aby dostosować się do rozmiaru płótna (np. Przejście do pełnego ekranu) i / lub na żądanie użytkownika (przyciski powiększania / zmniejszania).

W tym celu kontekst 2D płótna jest w porządku, ale jestem ciekawy, czy WebGL może zapewnić lepszy wynik i / lub lepszą wydajność. Uwaga: Nie chcę umieszczać pikseli przez webGL, chcę umieścić piksele w moim buforze (co jest zasadniczo Uint8Array) i użyć tego bufora (jednorazowo), aby odświeżyć kontekst. Nie wiem zbyt wiele na temat WebGL, ale użycie potrzebnego generowanego obrazu jako jakiegoś rodzaju tekstury zadziała jakoś na przykład? Wtedy chyba będę musiał odświeżyć teksturę z szybkością około 25 klatek na sekundę.

Byłoby naprawdę fantastycznie, gdyby WebGL w jakiś sposób obsługiwał konwersję przestrzeni kolorów. W kontekście 2D muszę przekonwertować bufor 1 bajt / piksel na RGBA dla obrazu w JavaScript dla każdego piksela ... Skalowanie (dla kontekstu 2D) odbywa się teraz przez zmianę stylu wysokości / szerokości płótna, więc przeglądarki skalują obraz. Sądzę jednak, że może być wolniejszy niż WebGL z obsługą hw, a także (mam nadzieję), że WebGL może zapewnić większą elastyczność w kontrolowaniu skalowania, np. W kontekście 2D, przeglądarki będą wykonywać antyaliasing nawet, jeśli nie chcę zrobić (np .: współczynnik powiększenia całkowitoliczbowego) i być może dlatego czasami może być dość powolny.

Próbowałem już nauczyć się kilku samouczków WebGL, ale wszystkie zaczynają się od obiektów, kształtów, kostek 3D itp. Nie potrzebuję żadnego - klasycznego - obiektu do renderowania tylko tego, co może zrobić kontekst 2D - w nadziei, że WebGL może być szybszym rozwiązaniem dla tego samego zadania! Oczywiście, jeśli w ogóle nie ma wygranej w WebGL, kontynuowałbym korzystanie z kontekstu 2D.

Aby było jasne: jest to rodzaj komputerowego emulatora sprzętowego wykonanego w JavaScript, a jego wyjście (to, co można zobaczyć na podłączonym do niego telewizorze PAL) jest renderowane za pomocą kontekstu płótna. Maszyna ma stałą paletę z 256 elementami, wewnętrznie potrzebuje tylko jednego bajtu na piksel, aby określić jego kolor.

questionAnswers(2)

yourAnswerToTheQuestion