gpt4 book ai didi

javascript - `WebGLRenderingContext.{isEnabled|getParameter}` 之间的功能差异?

转载 作者:行者123 更新时间:2023-11-29 19:05:00 43 4
gpt4 key购买 nike

我注意到似乎有两种方法可以查询功能是否启用:isEnabledgetParameterisEnabled 似乎是实际上检查功能是否启用的正确方法,但我试图理解调用 getParameter 的含义有能力。

下面是我的测试代码,它遍历了 WebGL1 中定义的每个功能,尝试启用该功能,然后检查 isEnabled 的返回值是否与 getParameter 的返回值匹配>.

    var canvas = document.createElement('canvas')
, gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl')
, capabilities = [
'BLEND',
'CULL_FACE',
'DEPTH_TEST',
'DITHER',
'POLYGON_OFFSET_FILL',
'SAMPLE_ALPHA_TO_COVERAGE',
'SAMPLE_COVERAGE',
'SCISSOR_TEST',
'STENCIL_TEST'
];

for (var i = 0; i < capabilities.length; i++) {
var capability = gl[capabilities[i]];

gl.enable(capability);

var isEnabledResult = gl.isEnabled(capability)
, getParameterResult = gl.getParameter(capability);

if (isEnabledResult !== getParameterResult) {
console.log(capabilities[i], isEnabledResult, getParameterResult);
}
}

  • 使用 Chrome 上的 WebGL1,我收到以下信息(如果在创建上下文时启用了模板缓冲区,STENCIL_TEST 将在此处删除):

    SAMPLE_ALPHA_TO_COVERAGE true null
    SAMPLE_COVERAGE true null
    STENCIL_TEST true false
  • 在 Firefox、IE11 和 Edge 上使用 WebGL1(无论是否启用模板缓冲区):

    SAMPLE_ALPHA_TO_COVERAGE true null 
    SAMPLE_COVERAGE true null
  • 在 Chrome 上使用 WebGL2(如果启用模板缓冲区,STENCIL_TEST 将在此处删除):

    STENCIL_TEST true false
  • 在 Firefox 上使用 WebGL2,我什么也没收到。

因此,根据这些结果,我有几个问题:

  • 哪些浏览器的 gl.getParameter(gl.STENCIL_TEST) 行为正确?如果 Chrome 的行为是正确的,为什么 gl.isEnabled(gl.STENCIL_TEST)gl.getParameter(gl.STENCIL_TEST) 不会返回相同的值?

  • 为什么 SAMPLE_ALPHA_TO_COVERAGESAMPLE_COVERAGE 的行为只在 WebGL2 中才被允许?我感觉这个问题的答案很简单“因为 WebGL1 规范不允许这样做”,但它似乎与其他功能不一致,尤其是在它为 isEnabled 返回值的情况下。也许在 OpenGL ES 中有历史原因?

最佳答案

您可以使用 isEnabled 查询的任何内容也可以使用 getParameter 查询。具体来说,这应该始终为真:

function TestPname(pname) {
var expected = gl.isEnabled(pname);
var error = gl.getError();
if (error)
return error == gl.INVALID_ENUM;

var actual = gl.getParameter(pname);
error = gl.getError();
if (error)
return false;

return actual == expected;
}

GLES 2.0.25 p134:

However, state variables for which IsEnabled is listed as the query command can also be obtained using GetBooleanv, GetIntegerv, and GetFloatv.

这些听起来像是 getParameter 行为中的错误。

关于javascript - `WebGLRenderingContext.{isEnabled|getParameter}` 之间的功能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43613793/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com