2016-04-15 66 views
0

我是webgl的新手,现在正在尝试做平面着色。我试过Gouraud阴影,它工作正常。所以我的第一步,实行扁平的阴影,我把我的片段着色器 #extension GL_OES_standard_derivatives : enable
if (!gl.getExtension('OES_standard_derivatives')) throw 'extension not support';
我initGL功能,保持相同的代码的剩余部分。WebGL:gl.getExtension('OES_standard_derivatives')没有回应

但是,画布没有出现,消息也没有出现。通过在上面的代码之前和之后添加一些警报消息,我猜问题是gl.getExtension('OES_standard_derivatives'))没有响应,所以之后的任何代码都不起作用(包括画布部分)。

我已经做了一些搜索,但没有发现类似的问题。
任何帮助,将不胜感激。

+0

'gl.getSupportedExtensions()'返回什么。您可以打开一个控制台并将其粘贴到'document.createElement(“canvas”)。getContext(“webgl”)。getSupportedExtensions()。join(“\ n”)'也许您的GPU不支持该扩展。 – gman

+0

是的,这是我的GPU问题。现在很好。感谢您的评论。 –

回答

0

如果您可以包含有关您的环境的更多信息以帮助理解问题。具体是这些问题:

  • 您使用的浏览器是?
  • 您使用的是什么版本的WebGL?
  • 您使用纯WebGL还是库(例如Three.js)?
  • 你能发布你所有的上下文设置代码吗?

这里是一个自包含的脚本,报告到控制台这个特定的扩展是否是可用的:

<html> 
<head> 
<script> 

    function test() { 
    var canvas = document.getElementById("sandbox"); 
    gl = canvas.getContext("webgl"); 

    if (!gl) 
     console.error("WebGL failed to initialize"); 
    else 
     console.debug("WebGL initialization successful"); 

    var extension = gl.getExtension("OES_standard_derivatives"); 

    if (!extension) 
     console.error("Extension 'OES_standard_derivatives' was not found"); 
    else 
     console.debug("Extension 'OES_standard_derivatives' was found"); 
    } 

</script> 
</head> 
<body onload="test();"> 
    <canvas id="sandbox" width="500" height="500" /> 
</body> 
</html> 

保存该到一个文件中,您使用的浏览器中打开它,检查控制台,看看发生了什么。

请注意,在WebGL2中,此扩展已被提升为核心配置文件。从WebGL OES_standard_derivatives specification

提升为核心,不再作为WebGL API 2.0规范中的扩展提供。需要GLSL #version 300 es。

+0

谢谢你,我发现这是我的GPU不支持。我改变了一台电脑,现在它工作正常。 –