是否可以同步捕获画布图像以确保在交换期间WebGL画布当前不是空白/黑色?

我们正在尝试拍摄在WebGL画布上播放的视频的快照。但是,当用户单击快照按钮时,捕获的图像有时为黑色。是的-我已经阅读了有关WebGL画布如何与交换一起工作的所有主题,因此我理解了为什么我们会得到黑色图像。不幸的是,由于我们的视频需要具有最高的质量并且无法承受任何减慢的速度,因此我们无法将prepareDrawingBuffer属性设置为true。

我想看看是否可以以编程方式继续拍摄快照,直到获得良好的图像为止。

问题是我不能只使用循环,因为这会阻止画布绘制新图像。因此,如果我只是添加一个while循环并继续调用canvas.toDataURL,它将永远得到相同的黑色图像,因为画布从未被更新。

我正在尝试确定是否存在一种异步捕获画布的方式,以便仍在更新画布。

任何建议将不胜感激。

谢谢。

wxw111 回答:是否可以同步捕获画布图像以确保在交换期间WebGL画布当前不是空白/黑色?

只需重复您声称已经阅读的答案

  1. 使用preserveDrawingBuffer

    const gl = someCanvas.getContext('webgl',{preserveDrawingBuffer: true});
    
  2. 绘制后捕获

    function render() {
       drawWithWebGL();
       if (needScreenshot) {
         takeScreenshot();
       }
    }
    
  3. 在捕获前进行绘制(与2相同)

    function doScreenshot() {
      drawWithWebGL();  // force a draw
      takeScreenshot();
    }
    

这3种解决方案的其他所有变化

所以...

  

是否可以同步捕获画布图像以确保在交换期间WebGL画布当前不是空白/黑色?

没有preserveDrawingBufffer的答案是“否”

本文链接:https://www.f2er.com/3163762.html

大家都在问