Javascript WebGL:以字符串形式获取错误/警告消息文本

Javascript WebGL:以字符串形式获取错误/警告消息文本,javascript,runtime-error,webgl,Javascript,Runtime Error,Webgl,当WebGL中发生错误时,浏览器控制台中通常会显示警告消息 例如,尝试创建过大的纹理: gl.texImage2D( gl.TEXTURE_2D, // target 0, // level gl.RGBA, // internalformat 1000000, // width 1000000, // height 0,

当WebGL中发生错误时,浏览器控制台中通常会显示警告消息

例如,尝试创建过大的纹理:

gl.texImage2D(
    gl.TEXTURE_2D,     // target
    0,                 // level
    gl.RGBA,           // internalformat
    1000000,           // width
    1000000,           // height
    0,                 // border
    gl.RGBA,           // format
    gl.UNSIGNED_BYTE,  // type
    null               // data
);
Chrome和Safari在控制台中显示此警告消息:

WebGL: INVALID_VALUE: texImage2D: width or height out of range
Firefox显示以下警告消息:

Error: WebGL: texImage2D: the maximum width for level 0 is 4096
如何以编程方式从WebGL获取此消息

我正在寻找类似于
gl.getErrorMessage()
的东西,它将返回一个字符串

我试过的 WebGL错误不会抛出JavaScript错误,因此不可能捕获它们以获取它们的
消息
属性

仅返回
ErrorCode
枚举值,例如
无效的\u值

仅提供与特定着色器相关的错误消息(例如编译错误)

仅提供与特定程序相关的错误消息(例如链接错误)


Khronos已经创建了一个名为
WebGLDebugUtils
,但似乎与错误消息相关的唯一方法是
glEnumToString()
,它将枚举值(例如
无效值
)转换为字符串。

简而言之,您不能

WebGL仅通过
gl.getError()
返回错误号。剩下的只是浏览器添加的东西,以帮助开发人员发现错误,因为他们已经需要对WebGL进行大量验证


也许你应该。

非常感谢。我注意到,对于某些错误(例如,试图渲染不符合要求的NPOT纹理),控制台中会记录一条警告消息(无法通过编程获得),并且
gl.getError()
返回
无错误
。我想这就是你所说的开发人员“必须进行大量验证”的意思吧?由于WebGL可能会默默地无法渲染NPOT纹理,因此开发人员有责任在尝试渲染它之前验证NPOT纹理是否满足要求?是的,规范OpenGL ES规范说这在技术上不是一个错误,但这是一个很难找到的问题。WebGL实现无论如何都必须进行检查,这样他们就不会让较新版本的GL允许ES 2.0不允许的东西(否则就无法跨浏览器工作),所以。。因为他们已经在检查了,所以他们可以为你打印一条警告。