“webgl”和“experimental-webgl”之间的区别

时间:2016-12-26 00:03:12

标签: webgl

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

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

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

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

  

getContext(在DOMString contextId中)RenderingContext返回画布上的绘图上下文,如果不支持上下文ID,则返回null。绘图上下文允许您在画布上绘图。使用“2d”调用getContext将返回CanvasRenderingContext2D对象,而使用“experimental-webgl”(或“webgl”)调用它将返回WebGLRenderingContext对象。此上下文仅适用于实现WebGL的浏览器。

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

1 个答案:

答案 0 :(得分:7)

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

长版:

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

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

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

我个人不再使用" experimental-webgl"一点都不这意味着我的代码在Edge实际上符合标准之前不会在Edge中工作。 IMO他们需要网站的压力,不能让他们花费资源来修复他们破碎的实施,因为它已经被打破多年了。