Brakuje funkcji WebGL i OpenGL ES

10

Zacząłem korzystać z WebGL i cieszę się, jak łatwo mogę korzystać z mojego OpenGL (i przez rozszerzenie OpenGL ES). Moje rozumienie jest jednak następujące:

  • OpenGL ES jest podzbiorem OpenGL
  • WebGL jest podzbiorem OpenGL ES

Czy jest to poprawne w obu przypadkach? Jeśli tak, to czy są dostępne zasoby do wyszczególnienia, jakich funkcji brakuje?

Na przykład jedną istotną brakującą funkcją jest glPushMatrixi glPopMatrix. Nie widzę ich w WebGL, ale w moich wyszukiwaniach nie mogę ich znaleźć w materiałach OpenGL ES.

Chris Smith
źródło

Odpowiedzi:

9

WebGL wiki zawierała sekcję w swoim FAQ hierarchii dla „ WebGL i OpenGL różnic ”, który wydaje się skupić na różnicach w WebGL z „pulpitu” implementacjach OpenGL i, niestety, nie jest bardzo szczegółowy (głównie chodzi o zachowanie, a nie API) .

Jeśli nie jest to dla Ciebie wystarczająco szczegółowe, być może konieczne będzie ręczne porównanie najnowszej wersji WebGL ze specyfikacjami OpenGL ES lub OpenGL .


źródło
9

Czy sprawdziłeś najnowszą wersję roboczą WebGL?

Zgodnie z projektem w przypadku sprzeczności specyfikacja OpenGL ES 2.0 jest ostatecznym organem.

Rozdział 6 przedstawia różnice między OpenGL ES 2.0 a WebGL.

http://www.khronos.org/registry/webgl/specs/latest/

Tadeu Maia
źródło
Miałeś dobrą odpowiedź, którą głosowałem, ale zaakceptował inną odpowiedź, ponieważ wskazał inne zasoby do sprawdzenia. Dzięki za pomoc.
Chris Smith
0

Jednym ze sposobów na to jest WebGL to OpenGL ES 2.0, a OpenGL ES 2.0 to OpenGL z usuniętym starszym cruft.

Od shadery dodano całą spuściznę funkcji stałej rurociągu glPushMatrix, glLight, glVertexetc wszystko nie ma sensu trzymać się wokół.

Czy więc te „brakujące” funkcje lub poprawnie i odpowiednio „przestarzałe” funkcje?

Jakich konkretnych funkcji szukasz?

WebGL / OpenGL ES 2.0 to podstawowy moduł cieniujący wierzchołki i fragmenty. Istnieje ograniczona obsługa tekstur bez mocy 2 i tylko kilka formatów tekstur (tak naprawdę nie ma większego limitu, 99% wszystkich tekstur to RGB8 lub RGBA8). Obsługa tekstur zmiennoprzecinkowych jest opcjonalna, ale obsługuje je większość urządzeń. Obsługa renderowania do tekstur zmiennoprzecinkowych jest jednak rzadsza. Niewiele, jeśli jakieś urządzenia mobilne obsługują renderowanie do tekstury zmiennoprzecinkowej.

WebGL2 (właśnie dostarczony) i OpenGL ES 3.0 dodały mnóstwo nowych formatów tekstur, w tym tekstur opartych na liczbach całkowitych i tekstur 3D. Usunęło to ograniczenia tekstur bez mocy 2. Dodano sprzężenie zwrotne dotyczące transformacji (zdolność modułu do cieniowania wierzchołków do zapisywania w buforze). Dodano także zapytania dotyczące okluzji. Obiekty tablicy wierzchołków są standardowe (były opcjonalne w WebGL / ES 3.0). Istnieje wiele innych drobniejszych funkcji.

ES 3.1 (i prawdopodobnie następna wersja WebGL) dodaje shadery obliczeniowe (zdolność shadera fragmentów do wykonywania zapisów o swobodnym dostępie). Shadery fragmentów mogły zapisywać tylko w żądanym momencie fragmentu / piksela, podczas gdy shadery obliczeniowe i zapisywać gdziekolwiek chcą.

Z jakich innych funkcji chciałeś skorzystać?

gman
źródło