encyklopedia.space

WebGL

WebGL (ang. Web Graphics Library) to interfejs programistyczny (API) umożliwiający renderowanie grafiki trójwymiarowej oraz 2‑D w przeglądarkach internetowych przy użyciu JavaScript i elementu canvas. WebGL jest oparty na OpenGL ES 2.0, co pozwala na korzystanie z funkcji akceleracji sprzętowej GPU bez konieczności instalowania dodatkowych wtyczek.

Historia

Pomysł stworzenia standardu pozwalającego na wykorzystanie mocy graficznej w przeglądarce pojawił się w połowie 2000‑s roku. Pierwszy prototyp, nazwany Canvas 3D, został opracowany w 2006 roku przez firmę Mozilla we współpracy z Khronos Group. W 2007 roku Khronos wydało pierwszą wersję specyfikacji WebGL 1.0, a wsparcie uzyskały najważniejsze przeglądarki: Chrome, Firefox, Safari i Internet Explorer (od wersji 11). W 2017 roku opublikowano WebGL 2.0, bazujące na OpenGL ES 3.0.

Architektura

WebGL działa jako warstwa pośrednia pomiędzy kodem JavaScript a natywnym API graficznym systemu operacyjnego. Przeglądarka udostępnia kontekst webgl (lub webgl2) po wywołaniu metody getContext na elemencie canvas. Następnie programista może:

  • Tworzyć i kompilować shadery w języku GLSL ES,
  • Tworzyć bufory wierzchołków, indeksów i tekstur,
  • Ustawiać stany renderowania (np. mieszanie, test głębokości),
  • Wykonywać polecenia rysowania (drawArrays, drawElements).

Dzięki temu aplikacje mogą korzystać z pełnej mocy GPU przy zachowaniu bezpieczeństwa – WebGL działa w piaskownicy, a dostęp do pamięci jest ściśle kontrolowany.

Wsparcie w przeglądarkach

Obecnie wszystkie główne przeglądarki desktopowe i mobilne obsługują WebGL 1.0 oraz WebGL 2.0:

  • Chrome (od wersji 8 / 56 dla WebGL 2.0)
  • Firefox (od wersji 4 / 51 dla WebGL 2.0)
  • Safari (od wersji 5.1 / 10 dla WebGL 2.0)
  • Edge (od wersji 12 / 79 dla WebGL 2.0)
  • Przeglądarki oparte na Chromium na Androidzie oraz Safari iOS.

Zastosowania

WebGL znalazło zastosowanie w wielu dziedzinach:

  • Gry przeglądarkowe – biblioteki takie jak Three.js, Babylon.js czy PlayCanvas upraszczają tworzenie interaktywnych środowisk 3‑D.
  • Wizualizacje danych – narzędzia jak D3.js (w połączeniu z WebGL) umożliwiają renderowanie dużych zbiorów punktów i siatek.
  • Modelowanie i CAD – aplikacje takie jak Onshape czy SketchUp w wersji webowej.
  • Rzeczywistość wirtualna i rozszerzona (VR/AR) – dzięki integracji z WebVR oraz WebXR.
  • Edukacja i sztuka – interaktywne instalacje, symulacje fizyczne i narzędzia edukacyjne.

Bezpieczeństwo

WebGL, będąc interfejsem niskopoziomowym, potencjalnie naraża przeglądarki na ataki typu denial‑of‑service lub wycieki informacji o pamięci graficznej. Dlatego przeglądarki wprowadzają:

  • Kontrole same‑origin i cross‑origin resource sharing (CORS) przy wczytywaniu tekstur.
  • Ograniczenia wielkości buforów i liczby jednoczesnych kontekstów.
  • Mechanizmy wykrywania i blokowania nieprawidłowych shaderów.

WebGL 2.0 i perspektywy

WebGL 2.0 wprowadza wsparcie m.in. dla:

  • Nowych formatów tekstur (RG8, RGB10_A2).
  • Instancjonowania (instanced rendering) – efektywne rysowanie wielu identycznych obiektów.
  • Renderowania do wielu docelowych buforów (MRT).
  • Transform feedback – pobieranie wyników vertex shaderów.

W dłuższej perspektywie rosnącą rolę przejmuje WebGPU, które ma oferować niższy poziom abstrakcji i lepszą kontrolę nad nowoczesnymi funkcjami GPU, lecz WebGL pozostanie ważnym rozwiązaniem ze względu na szeroką kompatybilność.

Przykładowy kod

<canvas id="glcanvas" width="640" height="480"></canvas>
<script>
    const canvas = document.getElementById('glcanvas');
    const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
    if (!gl) {
        alert('Twoja przeglądarka nie obsługuje WebGL');
    }
    // ustawienie koloru czyszczenia i wyczyszczenie bufora
    gl.clearColor(0.0, 0.0, 0.0, 1.0);
    gl.clear(gl.COLOR_BUFFER_BIT);
    // dalsza część – shader, bufory, rysowanie …
</script>

Bibliografia i dalsze lektury

  • Specyfikacja WebGL 1.0 – Khronos Group.
  • Specyfikacja WebGL 2.0 – Khronos Group.
  • „Real‑time 3D Rendering with WebGL” – MDN (dokumentacja online).
  • „WebGL Programming Guide” – Schwartz, 2020.

Patrz też