Полный список продвигаемых расширений в 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
,