Полный список продвигаемых расширений в WebGL2

Я получил возможность обновить наш рендерер, который мы используем, до WebGL2. Чтобы сделать рендерер максимально совместимым с предыдущими версиями, мы отслеживаем загруженные расширения (как мы делали до обновления) и эмулируем расширения, даже если такое расширение было продвинуто. Рендерер делает несколько важных вещей с расширениями. Снаружи все довольно прозрачно.

Чтобы все работало гладко, мне нужен полный список продвигаемых расширений. Нашли несколько блогов, но эти списки не полны. Другие списки, которые я нашел на GitHub, выглядят неправильно, потому что они имеют избыточные расширения, которые фактически не были продвинуты или были удалены. Я не нашел много в документах.

Итак, я провел эмпирическое исследование и обнаружил:

// 12 extensions were promoted in WebGL2 without surprises
[
  'ANGLE_instanced_arrays',
  'EXT_blend_minmax',
  'EXT_frag_depth',
  'EXT_shader_texture_lod',
  'EXT_sRGB',
  'OES_element_index_uint',
  'OES_standard_derivatives',
  'OES_texture_float',
  'OES_texture_half_float',
  'OES_vertex_array_object',
  'WEBGL_depth_texture',
  'WEBGL_draw_buffers',
]

Особенно меня беспокоит OES_texture_float_linear а также OES_texture_half_float_linear расширения, которых нет в моем списке. Реализация WebGL2 у меня локально есть OES_texture_float_linear но не имеет OES_texture_half_float_linearв то время как WebGL имел их обоих. Я знаю, что в контексте WebGL1 OES_texture_float_linear действует немного по-другому, поэтому моя интуиция говорит, что могут быть проблемы.

Кроме того, что-то странное случилось с disjoint_timer_query расширение. Это расширение было частично объединено. Контексты WebGL2 получили некоторые свойства этого расширения. я имею disjoint_timer_query_webgl2 в Chrome, который имеет все свойства, кроме одного getQueryObject который был переименован в getQueryParameter, но в Firefox disjoint_timer_query расширение все еще доступно с контекстом WebGL2.

Итак, этот список завершен? И, в частности, следует OES_texture_half_float_linear быть в списке? И почему это прошло, в то время как аналог OES_texture_float_linear остались?

Ценю твою помощь.

-

Таким образом, окончательный ответ (вероятно) должен быть:

// 14 extensions were promoted in WebGL2
[
  'ANGLE_instanced_arrays',
  'EXT_blend_minmax',
  'EXT_frag_depth',
  'EXT_shader_texture_lod',
  'OES_element_index_uint',
  'OES_standard_derivatives',
  'OES_texture_float',
  'OES_texture_half_float',
  'OES_vertex_array_object',
  'WEBGL_depth_texture',
  'WEBGL_draw_buffers',
  /* with caveats */
  'EXT_sRGB',
  'OES_texture_half_float_linear',
  'EXT_disjoint_timer_query',
]

Обратите внимание, что последние три расширения были добавлены с оговорками. расширение EXT_sRGB потерял постоянную SRGB_ALPHA, расширение OES_texture_half_float_linear был повышен в то время как аналог OES_texture_float_linear не было. расширение EXT_disjoint_timer_query повышен частично. Некоторые свойства этого расширения появились в контексте WebGL2, а другие свойства были перемещены в EXT_disjoint_timer_query_webgl2 расширение. Кроме того, в настоящее время ( 2017.05.16) контекст Firefox WebGL2 по-прежнему имеет EXT_disjoint_timer_query расширений и нет EXT_disjoint_timer_query_webgl2 расширение.

1 ответ

WebGL2 требует поддержки текстур с половиной и с плавающей точкой. Также требуется фильтрация для половинных текстур, но не требуется поддержка отфильтрованных текстур с плавающей запятой.

Вот почему OES_texture_half_float_linear отсутствует и OES_texture_float_linear не является обязательным. Большинство мобильных устройств не поддерживают фильтрацию текстур с плавающей запятой.

Другими словами, вы должны добавить OES_texture_half_float_linear в ваш список продвигаемых расширений.

Еще одно расширение, которое имеет странную историю EXT_color_buffer_float, WebGL1 поставляется без него. Предполагалось, что для рендеринга в текстуру с плавающей запятой все что вам нужно было сначала OES_texture_float а затем сделать текстуру с плавающей точкой, прикрепить ее к кадровому буферу и проверить gl.checkFramebufferStatus, Но через год или около того после поставки WebGL кто-то указал, что этого недостаточно, и так EXT_color_buffer_float был добавлен, но не был принудительно установлен, потому что это могло бы сломать страницы.

В WebGL2 это принудительно. Вы не можете визуализировать текстуру с плавающей точкой без включения EXT_color_buffer_float, То же самое для EXT_color_buffer_half_float,

Другие вопросы по тегам