0

我无法WEBGL_draw_buffers在 chrome 上获取 webgl 扩展。我的 GPU 肯定应该支持多个绘制缓冲区,Firefox 支持扩展,但 Chrome 没有列出它。缺少支持有什么原因吗?

基本信息

  • 浏览器:Chrome 37.0.2062.102 m(与版本 36 和 38 的结果相同)
  • 浏览器命令行:Files (x86)\Google\Chrome\Application\chrome.exe" --flag-switches-begin --js-flags=--harmony --enable-webgl-draft-extensions --flag-switches-end
  • 操作系统:Windows 8.1 Pro
  • GPU:NVS 3100M(驱动版本 327.02)
  • 笔记本:ThinkPad T410
  • 其他人似乎WEBGL_draw_buffers在 Chrome 上获得了支持
  • 我没有找到有关禁用多个绘图缓冲区的 Chrome 错误的任何信息。

可用的 webgl 扩展

GL_OES_element_index_uint GL_OES_packed_depth_stencil GL_OES_get_program_binary GL_OES_rgb8_rgba8 NV_pixel_buffer_object GL_OES_mapbuffer GL_EXT_map_buffer_range GL_OES_standard_derivatives GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_float GL_OES_texture_float_linear GL_EXT_texture_rg GL_OES_texture_npot GL_EXT_occlusion_query_boolean GL_EXT_read_format_bgra GL_EXT_robustness GL_EXT_shader_texture_lod GL_EXT_texture_compression_dxt1 GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_texture_storage GL_EXT_frag_depth GL_EXT_blend_minmax GL_ANGLE_depth_texture GL_ANGLE_framebuffer_blit GL_ANGLE_framebuffer_multisample GL_ANGLE_instanced_arrays GL_ANGLE_pack_reverse_row_order GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_ANGLE_texture_usage GL_ANGLE_translated_shader_source GL_NV_fence

chrome://gpu 问题报告

Problems Detected
GPU rasterization is whitelisted on N4, N5, N7 and Moto X: 362779
Disabled Features: gpu_rasterization
Additional GPU rasterization whitelist for field trial: 380694
Disabled Features: gpu_rasterization_field_trial
Always call glUseProgram after a successful link to avoid a driver bug: 349137
Applied Workarounds: use_current_program_after_successful_link
Some drivers are unable to reset the D3D device in the GPU process sandbox
Applied Workarounds: exit_on_context_lost
TexSubImage2D() is faster for full uploads on ANGLE
Applied Workarounds: texsubimage2d_faster_than_teximage2d
Clear uniforms before first program use on all platforms: 124764, 349137
Applied Workarounds: clear_uniforms_before_first_program_use
Threaded rasterization has not been enabled or is not supported by the current system.
Disabled Features: threaded_rasterization
4

2 回答 2

0

根据webgl stats 网站,只有大约 20% 的用户WEBGL_draw_buffers启用了扩展,因此并非所有 Chrome 版本都默认支持扩展。

如果 GPU 支持多个渲染目标,则所有 Linux 和 Mac 版本的 Chrome 都应该启用它。对于 Windows,只有部分版本的 Chrome 支持该扩展。Windows 上的 Chrome 并不适用于所有具有 D3D11 渲染后端的用户,D3D9 后端在大多数情况下仍然使用并且它不支持多个渲染目标。

您可以强制 Chrome 使用带有--enable-d3d11标志的 D3D11 后端。

于 2014-09-01T16:20:42.890 回答
0

我不知道确切的原因,但正如 Jan 指出的那样,它们并没有被广泛使用

这不仅仅是关于 GPU 是否支持它。很长一段时间,如果 MRT 设置不正确,OSX 会导致操作系统崩溃,因此在 OSX 上没有启用它。在我运行 10.9.4 (OSX Mavericks) 的 Retina MBP 上仍然没有启用它们

打字

document.createElement("canvas").getContext("webgl").getSupportedExtensions().join("\n")

在 JavaScript 控制台打印

"ANGLE_instanced_arrays
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_debug_renderer_info
WEBGL_debug_shaders
WEBGL_depth_texture
WEBKIT_WEBGL_depth_texture
WEBGL_lose_context
WEBKIT_WEBGL_lose_context"

所以我猜他们仍然没有找到阻止操作系统在 MRT 设置不正确时崩溃的方法。向苹果和其他驱动程序制造商抱怨。

游戏和应用程序没有这个问题,因为他们当然不想让你的机器崩溃,因为你手动安装它们,但浏览器不能允许随机网页让你的机器崩溃,所以他们不能启用这些功能,直到他们可以找到一种方法来防止崩溃或直到驱动程序/操作系统在使用时停止崩溃。

于 2014-09-01T18:44:14.640 回答