Я начал использовать WebGL и доволен тем, как легко использовать мой опыт OpenGL (и, соответственно, OpenGL ES). Тем не менее, мое понимание таково:
- OpenGL ES является подмножеством OpenGL
- WebGL является подмножеством OpenGL ES
Это правильно для обоих случаев? Если да, есть ли ресурсы для детализации, какие функции отсутствуют?
Например, одной заметной отсутствующей функцией является glPushMatrix
и glPopMatrix
. Я не вижу их в WebGL, но в своих поисках я не могу найти их ссылки в материалах OpenGL ES.
Я нашел отличный ресурс для сравнения того, какие конкретные API доступны в разных версиях OpenGL / WebGL / OpenGL ES.
Я думаю, вы найдете то, что вы ищете, здесь: http://web.eecs.umich.edu/~sugih/courses/eecs487/common/notes/APITables.xml
источник
Один из способов взглянуть на это - WebGL - это OpenGL ES 2.0, а OpenGL ES 2.0 - это OpenGL, в котором все устаревшие версии удалены.
Поскольку шейдеры были добавлены все наследие фиксированной функции трубопровода
glPushMatrix
,glLight
, иglVertex
т.д. все не имеет смысла держать вокруг.Так являются ли эти «недостающие» функции или правильно и должным образом «устаревшими» функциями?
Какие особенности вы ищете?
WebGL / OpenGL ES 2.0 - это базовые вершинные и фрагментные шейдеры. Имеется ограниченная поддержка текстур, не поддерживающих степень 2, и только несколько форматов текстур (на самом деле ограничение не составляет 99% всех текстур RGB8 или RGBA8). Поддержка текстур с плавающей точкой является необязательной, но большинство устройств поддерживают их. Однако поддержка рендеринга в текстуры с плавающей точкой встречается реже. Мало кто из мобильных устройств поддерживает рендеринг в текстуру с плавающей точкой.
WebGL2 (только что поставленный) и OpenGL ES 3.0 добавили массу новых форматов текстур, включая целочисленные текстуры и 3D-текстуры. Это убрало пределы текстуры не-степени-2. Добавлена обратная связь преобразования (возможность для вершинного шейдера писать в буфер). Также добавлены окклюзионные запросы. Vertex Array Objects являются стандартными (они были необязательны в WebGL / ES 3.0). Есть куча других более мелких особенностей.
В ES 3.1 (и, вероятно, в следующей версии WebGL) добавлены вычислительные шейдеры (возможность фрагментного шейдера выполнять запись в произвольном доступе). Фрагментные шейдеры могут записывать только те фрагменты / пиксели, которые запрашиваются у них в данный момент, тогда как вычисляют шейдеры и пишут где угодно.
Какие еще функции вы хотели использовать?
источник