Поддержка расширений WebGL в браузерах

Это может быть что-то столь же простое, как и тупые настройки, которые есть у меня в Chrome или Firefox, но я просто не знаю, куда мне обратиться, чтобы выяснить, так ли это или что-то еще.

Основная вещь, которую я пытаюсь выяснить, заключается в том, почему поддержка расширений так различна в разных браузерах.

Например, перейдя по http://prideout.net/recipes/ExtensionViewer.html

За FireFox я получаю

OES_texture_float (google) (registry)
OES_standard_derivatives (google) (registry)
EXT_texture_filter_anisotropic (google) (registry)
MOZ_WEBGL_lose_context (google) (registry)
WEBGL_lose_context (google) (registry)
MOZ_WEBGL_compressed_texture_s3tc (google) (registry)
WEBGL_compressed_texture_s3tc (google) (registry)

Но в Chrome я получаю:

OES_standard_derivatives (google) (registry)
WEBKIT_EXT_texture_filter_anisotropic (google) (registry)
OES_vertex_array_object (google) (registry)
OES_element_index_uint (google) (registry)
WEBGL_lose_context (google) (registry)

Обратите внимание на отсутствие OES_texture_float

В какой-то момент я заметил, что у меня есть (или есть) расширение с плавающей запятой, связанное с AMD, но я не знаю, на какой странице мне это показывали. У меня такое ощущение, что что бы там ни показывало, это была старая версия Chrome.

Я знаю, что моя карта поддерживает текстуры с плавающей запятой (по крайней мере, до некоторой степени), и всякий раз, когда я перехожу на страницы, требующие текстур с плавающей запятой в Firefox, демонстрация работает прекрасно.

Если я что-то пытаюсь выяснить, это то, что я должен сделать, чтобы текстуры с плавающей точкой работали в Chrome на моей машине. Некоторые из самых крутых вещей, которые вы можете сделать с WebGL, требуют использования расширения с плавающей запятой.

Что меня беспокоит, так это, предположительно, и Firefox, и Chrome используют ANGLE, поэтому не будут ли они поддерживать одинаковые расширения?

3 ответа

Читайте на странице лучших практик WebGL в MDN:

  • Рендеринг в текстуру с плавающей запятой может не поддерживаться, даже если поддерживается расширение OES_texture_float. Как правило, это не работает на современном мобильном оборудовании. Чтобы проверить, поддерживается ли это, вы должны вызвать функцию WebGL checkFramebufferStatus().

Это аппаратная проблема, она должна работать, по крайней мере, на современных выделенных графических картах, но вам потребуются некоторые обходные пути или запасной вариант для "более слабых" устройств, таких как планшеты и телефоны.

Чтобы получить список поддерживаемых расширений на вашей платформе, пожалуйста, используйте

var extensions = gl.getSupportedExtensions();

Возвращает массив строк. Этот массив зависит от многих факторов:

  • аппаратное обеспечение и драйвер у вас есть
  • браузер ( Firefox/Chrome/Other)
  • версия вашего браузера
  • версия контекста WebGL, которую вы запросили (в настоящее время 1 или 2)

На MacBook Pro 2015 года с Intel Iris Graphics 6100 у меня сегодня (16.05.2017)

26 распространенных расширений WebGL 1.0 от Chrome:

[
  'ANGLE_instanced_arrays',
  'EXT_blend_minmax',
  'EXT_disjoint_timer_query',
  'EXT_frag_depth',
  'EXT_shader_texture_lod',
  'EXT_sRGB',
  'EXT_texture_filter_anisotropic',
  'WEBKIT_EXT_texture_filter_anisotropic',
  'OES_element_index_uint',
  'OES_standard_derivatives',
  'OES_texture_float',
  'OES_texture_float_linear',
  'OES_texture_half_float',
  'OES_texture_half_float_linear',
  'OES_vertex_array_object',
  'WEBGL_compressed_texture_s3tc',
  'WEBKIT_WEBGL_compressed_texture_s3tc',
  'WEBGL_compressed_texture_s3tc_srgb',
  'WEBKIT_WEBGL_compressed_texture_s3tc_srgb',
  'WEBGL_debug_renderer_info',
  'WEBGL_debug_shaders',
  'WEBGL_depth_texture',
  'WEBGL_draw_buffers',
  'WEBGL_lose_context',
  'WEBKIT_WEBGL_lose_context'
]

23 распространяемых расширения WebGL 1.0 от Firefox:

[
  'ANGLE_instanced_arrays',
  'EXT_blend_minmax',
  'EXT_color_buffer_half_float',
  'EXT_frag_depth',
  'EXT_sRGB',
  'EXT_shader_texture_lod',
  'EXT_texture_filter_anisotropic',
  'OES_element_index_uint',
  'OES_standard_derivatives',
  'OES_texture_float',
  'OES_texture_float_linear',
  'OES_texture_half_float',
  'OES_texture_half_float_linear',
  'OES_vertex_array_object',
  'WEBGL_color_buffer_float',
  'WEBGL_compressed_texture_s3tc',
  'WEBGL_debug_renderer_info',
  'WEBGL_depth_texture',
  'WEBGL_draw_buffers',
  'WEBGL_lose_context',
  'MOZ_WEBGL_lose_context',
  'MOZ_WEBGL_compressed_texture_s3tc',
  'MOZ_WEBGL_depth_texture'
]

10 распространенных расширений WebGL 2.0 от Chrome:

[
  'EXT_color_buffer_float',
  'EXT_disjoint_timer_query_webgl2',
  'EXT_texture_filter_anisotropic',
  'OES_texture_float_linear',
  'WEBGL_compressed_texture_s3tc',
  'WEBGL_compressed_texture_s3tc_srgb',
  'WEBGL_debug_renderer_info',
  'WEBGL_debug_shaders',
  'WEBGL_get_buffer_sub_data_async',
  'WEBGL_lose_context'
]

8 распространенных расширений WebGL 2.0 от Firefox:

[
  'EXT_color_buffer_float',
  'EXT_texture_filter_anisotropic',
  'EXT_disjoint_timer_query',
  'OES_texture_float_linear',
  'WEBGL_compressed_texture_s3tc',
  'WEBGL_lose_context',
  'MOZ_WEBGL_lose_context',
  'MOZ_WEBGL_compressed_texture_s3tc'
]

Для получения более полезной информации вы можете проверить MDN.

Здесь вы можете найти довольно удобный инструмент для проверки вашего браузера онлайн.

Вы можете найти всемирную статистику по поддержке расширений webgl здесь.

Пожалуйста, проверьте, чтобы получить информацию о продвигаемых расширениях в WebGL2.

Я должен был сохранить информацию о версии Chrome, которую я использовал в то время. По состоянию на 2013-08-14 (и, возможно, некоторое время назад) Chrome на этой машине

Browser: 5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Platform: Win32

теперь поддерживает текстуры с плавающей точкой. http://prideout.net/recipes/ExtensionViewer.html дает следующее:

WEBKIT_EXT_texture_filter_anisotropic (google) (registry)
OES_element_index_uint (google) (registry)
OES_standard_derivatives (google) (registry)
OES_texture_float (google) (registry)
OES_vertex_array_object (google) (registry)
WEBKIT_WEBGL_compressed_texture_s3tc (google) (registry)
WEBKIT_WEBGL_depth_texture (google) (registry)
WEBGL_lose_context (google) (registry)

Это все еще не объясняет, почему между Firefox и Chrome была разница, хотя, насколько я знаю, это могли быть просто разные версии библиотек ANGLE.

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