【问题标题】:WebGL texture turns black in Safari on OSXWebGL 纹理在 OSX 上的 Safari 中变黑
【发布时间】:2013-05-09 03:30:16
【问题描述】:

我在启用 WebGL 的 OSX 上的 Safari 中遇到问题。我可以将图像加载到纹理中,但是,每当我在某些操作后尝试重绘时,纹理就会变黑。在 Chrome 或 Firefox 中不会出现此问题。我已经在 Safari 5.1.9 和 6.0.4 上进行了测试。这是一个显示问题的小提琴。

http://jsfiddle.net/LTz37/1/

纹理会正确加载,但在按下“左”或“右”按钮后会变黑。

导致问题的代码段:

 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([x1, y1, x2, y1, x1, y2, x1, y2, x2, y1, x2, y2]), gl.STATIC_DRAW);
 gl.drawArrays(gl.TRIANGLES, 0, 6);

【问题讨论】:

    标签: html macos safari webgl


    【解决方案1】:

    这是 Safari (6.0.4) 中的一个错误

    这是测试https://www.khronos.org/registry/webgl/sdk/tests/conformance/state/state-uneffected-after-compositing.html

    如果您只是想要一个解决方案,请重新绑定纹理。否则在他们正式发布 WebGL 之前忽略 Safari。 Safari 没有通过大量的一致性测试,并且还没有准备好运行 WebGL,而没有很多微妙的问题。至少从 Safari 版本 6.0.4 开始

    【讨论】:

      【解决方案2】:

      纹理需要在每次绘制操作之前绑定。下面是更新后的 draw(...) 函数:

      function draw(gl, image, x, y) {
          gl.bindTexture(gl.TEXTURE_2D, texture);
          setRectangle(gl, x, y, image.width, image.height);
          gl.drawArrays(gl.TRIANGLES, 0, 6);
      }
      

      我用注释掉的更新代码更新了小提琴。

      【讨论】:

      • 这是 Safari 中的一个错误。如果用户没有取消绑定纹理,浏览器不应该取消绑定它。 WebGL 隐藏在 Safari 的两层菜单下是有原因的。因为它还没有完成。
      • 这是测试:FF 和 Chrome 通过,Safari (6.0.4) 失败。 khronos.org/registry/webgl/sdk/tests/conformance/state/…
      猜你喜欢
      • 2020-09-17
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多