有些网站说,您应该以以下方式初始化webgl:
var gl = c.getContext("webgl") || c.getContext("experimental-webgl");
if (!gl)
alert("This browser doesn't support WebGL!");
webgl
和experimental-webgl
有什么区别?我唯一能找到的描述是在MDN上:
getContext(在DOMString contextId中) RenderingContext返回画布上的绘图上下文,如果不支持上下文ID,则返回null。绘图上下文允许您在画布上绘图。使用"2d“调用getContext将返回一个CanvasRenderingContext2D对象,而使用”试验性-webgl“(或"webgl")调用它将返回一个WebGLRenderingContext对象。此上下文仅在实现WebGL的浏览器上可用。
然而,这使2似乎他们是一样的。有什么不同吗?
发布于 2016-12-27 13:39:33
TL;DR:“试验性- WebGL”= beta,它在WebGL 1.0发布之前被浏览器使用,试图表明这不是最终的。当WebGL 1.0发布并提供浏览器通过了所有的一致性测试时,该浏览器将开始接受"webgl“和”试验性-webgl“,这只是一个同义词,不推荐使用。
长篇版本:
浏览器供应商过去常常在尚未标准化或尚未完成的东西前加上前缀。希望开发者们能尝试一下。当标准定稿时,前缀将被删除,每个人都只使用无前缀版本。前缀“试验性-”是从那个时代遗留下来的。浏览器供应商发现前缀是个坏主意,因为1000 s的网站会在生产站点中使用前缀,然后浏览器就无法在不破坏数千个网站的情况下删除前缀。
浏览器供应商普遍同意不再这样做。相反,他们在标志后面添加了新特性,要求开发人员进行测试,当浏览器供应商和标准委员会合理地确定每件事情都是好的和稳定的时,他们允许新特性在没有标志的情况下运行。WebGL2是这样做的,所以没有“试验性的-webgl2”,只有浏览器标志。
唯一还需要“试验性-webgl”的浏览器是Edge。它之所以使用这一点,只是因为Edge仍然没有实现整个WebGL规范。对于所有其他浏览器来说,“试验性-webgl”与"webgl“完全相同,它只是旧时代遗留下来的东西。
就我个人而言,我不再使用“试验性-webgl”了。这意味着我的代码在实际上符合标准之前不会在Edge中工作。国际海事组织( IMO )需要网站的压力,因为这些网站已经被破坏了很多年,所以它们需要花费资源来修复坏掉的执行。
https://stackoverflow.com/questions/41325390
复制相似问题