我有机会将我们使用的渲染器更新为 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
扩展。