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

9
一些网站建议您以以下方式初始化webgl:
var gl = c.getContext("webgl") || c.getContext("experimental-webgl");

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

“webgl”和“experimental-webgl”有什么区别?我只在MDN上找到了以下描述:
getContext(in DOMString contextId)RenderingContext 返回画布上的绘图上下文,如果不支持上下文ID,则返回null。绘图上下文可让您在画布上绘制。使用“2d”调用getContext将返回一个CanvasRenderingContext2D对象,而使用“experimental-webgl”(或“webgl”)调用将返回一个WebGLRenderingContext对象。此上下文仅在实现WebGL的浏览器上可用。
然而,这使得两者看起来是相同的。它们之间有什么区别吗?
1个回答

20
TL;DR: "experimental-webgl"是beta版,早在WebGL 1.0发布之前,浏览器就已经使用它来表示“这不是最终版本”。当某个浏览器通过了所有的一致性测试后,该浏览器将开始接受“webgl”,而“experimental-webgl”只是一个同义词并被弃用。
长篇版本:
浏览器供应商曾经给还未标准化或完成的事物加上前缀。希望开发人员能够尝试一下。当标准确定后,前缀将被删除,所有人都只使用无前缀版本。前缀“experimental-”是那个时代留下的遗物。浏览器供应商发现前缀不是一个好主意,因为成千上万的网站会在生产网站中使用前缀,然后浏览器不能删除前缀,否则会破坏成千上万的网站。
浏览器供应商通常都同意不再这样做了。他们将新功能放在标志后面,请开发人员进行测试。当浏览器供应商和标准委员会相信一切都很好、很稳定时,他们允许新功能在没有标志的情况下运行。WebGL2就是这样完成的,所以没有“experimental-webgl2”,只有浏览器标志。

唯一需要“experimental-webgl”的浏览器是Edge。这是因为Edge仍未实现整个WebGL规范。对于所有其他浏览器,“experimental-webgl”与“webgl”完全相同,只是残留于旧时代。

个人认为我不再使用“experimental-webgl”。这意味着我的代码在Edge中无法工作,直到它们实际符合标准。在我看来,他们需要网站无法工作的压力,以便他们花费资源修复已经破损多年的实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接