06
Technologia WebGL wciąż ewoluuje, na ostateczną wersję musimy jeszcze trochę poczekać, a w między czasie spotkać mogą nas niespodzianki takie jak np. zmiany w API. I tak się właśnie stało – wprowadzone zostały 2 poważne zmiany do specyfikacji WebGL. Na szczęście są one niewielkie, ale zmuszają nas do wprowadzenia poprawek we wszystkich programach.
Walidacja shaderów. Jest to pierwsza poważna zmiana. Shadery będą teraz sprawdzane, czy są zgodne ze specyfikacją WebGL. W przypadku większości aplikacji zmiana ta wymaga określenia precyzji obliczeń dla fragment shadera. W zasadzie wystarczy na początku programu dopisać następujący ciąg:
#ifdef GL_ES precision highp float; #endif
Oznacza to wysoką precyzję obliczeń. Aby shadery były walidowane zgodnie z ostatnimi zmianami w api, musimy pobrać najnowsze wersje przeglądarek i uruchomić je z opcją walidacji. Aby to zrobić powinniśmy zachować się zależnie od używanej przeglądarki.
Jeśli tego nie zrobimy, nie zauważymy zmian w naszych programach, ale będą one napisane niezgodnie z aktualną specyfikacją i mogą nie działać poprawnie, gdy technologia WebGL wejdzie w życie.
Kolejna zmiana dotyczy funkcji gl.texImage2D, która tworzy obiekt tekstury na podstawie danych przekazanych w formacie grafiki oraz odpowiednich parametrów. Funkcja ta zaimplementowana w klasie Model wyglada następująco:
gl.texImage2D(gl.TEXTURE_2D, 0, tempImage);
a po wprowadzeniu zmian wyglądać będzie tak:
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, tempImage);
Jak widać dodane zostały nowe parametry: gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE. Pierwsze dwa określają składowe każdego teksela, natomiast trzeci oznacza format, w jakim owe teksele są zapisane. RGBA mówi oczywiście o tym, że każdy teksel zawiera kanały R – czerwony, G – zielony, B – niebieski oraz A czyli kanał alfa. Jeśli nie używamy przezroczystości możemy ustawić te parametry na gl.RGB, co właściwie wystarczy dla naszych dotychczasowych potrzeb, ale można już przygotować klasę Model na przyszłość dodając obsługę kanału alfa. O przezroczystości powiemy więcej na jednej z przyszłych lekcji.
Wszystkie lekcje zostały uaktualnione do najnowszej specyfikacji. Jeśli znajdziecie jeszcze jakieś nieprawidłowości, proszę o informację zwrotną. Mam nadzieję, że była to ostatnia tak poważna zmiana
Informacje o zmianach, jak i ich rozwiązanie zaczerpnięte zostały ze strony learningwebgl.com. Autorowi strony należą się duże podziękowania za to, że odwala kawał dobrej roboty w tej dziedzinie!
Proszę bardzo