"webgl" 和 "experimental-webgl" 之间的区别

Difference between "webgl" and "experimental-webgl"

有些网站说您应该按以下方式初始化 webgl:

var gl = c.getContext("webgl") || c.getContext("experimental-webgl");

if (!gl)
    alert("This browser doesn't support WebGL!");

webglexperimental-webgl 有什么区别?我能找到的唯一描述是在 MDN 上:

getContext(in DOMString contextId) RenderingContext Returns a drawing context on the canvas, or null if the context ID is not supported. A drawing context lets you draw on the canvas. Calling getContext with "2d" returns a CanvasRenderingContext2D object, whereas calling it with "experimental-webgl" (or "webgl") returns a WebGLRenderingContext object. This context is only available on browsers that implement WebGL.

然而,这使得 2 看起来是一样的。有区别吗?

TL;DR:"experimental-webgl" = beta,它在 WebGL 1.0 发布之前被浏览器用来试图表明这不是最终版本。当 WebGL 1.0 发布并且浏览器 passed all the conformance tests 时,该浏览器将开始接受 "webgl" 而 "experimental-webgl" 将只是一个同义词并被弃用。

长版:

浏览器供应商过去常常为尚未标准化或完整的内容添加前缀。希望开发人员会尝试一下。当标准最终确定时,前缀将被删除,每个人都将只使用无前缀的版本。 "experimental-"这个前缀是那个时代遗留下来的。浏览器供应商发现前缀是个坏主意,因为成千上万的网站会在生产站点中使用前缀,然后浏览器无法在不破坏数千个网站的情况下删除前缀。

浏览器供应商普遍同意不再这样做。相反,他们将新功能放在标志后面,要求开发人员进行测试,当浏览器供应商和标准委员会有理由确定一切都很好且稳定时,他们允许新功能 运行 没有标志。 WebGL2 以这种新方式完成,因此没有 "experimental-webgl2",只有浏览器标志。

唯一仍然需要 "experimental-webgl" 的浏览器是 Edge。它使用它只是因为 Edge 仍然没有实现整个 WebGL 规范。对于所有其他浏览器,"experimental-webgl" 与 "webgl" 完全相同,只是那个旧时代的遗留物

就我个人而言,我根本不再使用 "experimental-webgl"。这意味着我的代码在真正符合标准之前无法在 Edge 中运行。 IMO 他们需要网站无法正常工作的压力来促使他们花费资源来修复他们损坏的实现,因为它已经损坏多年了。