xtk renderer3D的pick()在启用webgl2的浏览器中产生错误

时间:2017-04-04 05:55:18

标签: xtk webgl2

是否有人使用xtk和webgl2进行pick()调用?特别 renderer3d'第

错误:WebGL:drawArrays:检测到反馈循环... renderer3D.js:1977:7

错误:WebGL:readPixels:不推荐使用readPixels的越界读取,并且可能很慢。 renderer3D.js:1445:5

1 个答案:

答案 0 :(得分:0)

对于第一个错误,反馈循环始终无效且WebGL中存在错误。来自WebGL 1 spec section 6.26

  

6.26纹理和帧缓冲区之间的反馈循环

     

在OpenGL ES 2.0 API中,可以进行写入和读取相同纹理的调用,从而创建反馈循环。它指定存在这些反馈循环的位置,导致未定义的行为。

     

在WebGL API中,导致此类反馈循环的操作(通过OpenGL ES 2.0规范中的定义)将生成INVALID_OPERATION错误。

对于第二个错误,它不是有效的WebGL错误。哪个浏览器生成该错误的版本?

这是WebGL一致性测试,以确保您可以读出界限

https://www.khronos.org/registry/webgl/sdk/tests/conformance/reading/read-pixels-test.html?webglVersion=1&quiet=0

这里有一个显示读出范围的片段不会产生错误。

['webgl', 'webgl2'].forEach(check);

function check(version) {
  log(`checking ${version}`);
  
  const gl = document.createElement("canvas").getContext(version);
  if (!gl) {
    log(`${version} not supported`);
    return;
  }
  const pixel = new Uint8Array(4);
  // read off the left bottom
  gl.readPixels(-10, -10, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
  // read off the right top
  gl.readPixels(400, 300, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
  //
  const error = gl.getError();
  log(error ? `error was ${error} reading out of bounds` 
            : "there were no errors reading out of bounds");
}

function log(...args) {
  const elem = document.createElement("pre");
  elem.textContent = [...args].join();
  document.body.appendChild(elem);
}

Maybe file bugs with xtk