我有机会更新我们用在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上下文获得了该扩展的一些属性。我在Chrome中有disjoint_timer_query_webgl2,除了一个被重命名为getQueryParameter的getQueryObject之外,它拥有所有属性,但是在火狐中,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 )火狐WebGL2上下文仍然有EXT_disjoint_timer_query扩展,没有EXT_disjoint_timer_query_webgl2扩展。
发布于 2017-05-16 04:25:51
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也一样。
https://stackoverflow.com/questions/43987719
复制相似问题