0

Has anyone used xtk with webgl2 to do the pick() call? specifically renderer3d's.

Error: WebGL: drawArrays: Feedback loop detected...renderer3D.js:1977:7

Error: WebGL: readPixels: Out-of-bounds reads with readPixels are deprecated, and may be slow. renderer3D.js:1445:5

4

1 回答 1

0

对于第一个错误,反馈循环一直是无效的,并且在 WebGL 中是一个错误。来自WebGL 1 规范第 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);
}

也许用 xtk 文件错误

于 2017-04-04T16:29:38.110 回答