Canvas 如何将WebGL帧缓冲区中的内容绘制到画布';backbuffer?

Canvas 如何将WebGL帧缓冲区中的内容绘制到画布';backbuffer?,canvas,webgl,draw,framebuffer,Canvas,Webgl,Draw,Framebuffer,我有一个现有的帧缓冲区(带有颜色和深度信息),需要与画布的backbuffer(图形缓冲区)组合。如何将一个帧缓冲区中的内容绘制到backbuffer中 或者,如果有直接操作图形缓冲区的方法,我可以直接将信息放入其中,而无需创建第二个帧缓冲区。立即写入我正在使用以下命令将纹理写入帧缓冲区: gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); 但这在图形缓冲区上不起作用

我有一个现有的帧缓冲区(带有颜色和深度信息),需要与画布的backbuffer(图形缓冲区)组合。如何将一个帧缓冲区中的内容绘制到backbuffer中

或者,如果有直接操作图形缓冲区的方法,我可以直接将信息放入其中,而无需创建第二个帧缓冲区。立即写入我正在使用以下命令将纹理写入帧缓冲区:

gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);

但这在图形缓冲区上不起作用,因为当gl.FRAMEBUFFER未绑定时会引发错误(我不知道如何将其绑定到图形缓冲区)。

要从主屏幕缓冲区获取数据,需要将其数据复制到另一个纹理

还请注意有关是否已使用设置为true的“preserveDrawingBuffer”构建WebGL上下文的问题。上下文创建的默认值为false,这意味着在绘图后将控制权返回到浏览器后,不能指望主绘图缓冲区的内容仍然存在


一般来说,最好使用preserveDrawingBuffer=false,因为它会对性能产生重大影响

我不太明白你的问题。帧缓冲区只是附件的组合。这些附件可以是渲染缓冲区和纹理。任何纹理都可以轻松地使用渲染。这意味着你的问题基本上变成了“如何渲染纹理”,我猜你已经知道了。呵呵。。。很对,我的问题比那复杂一点;o) 我想知道如何获取已经存在的纹理,并将其设置为绘图缓冲区的颜色附件(因此,我不是在绘制应用此纹理的多边形,而是将纹理用作整个渲染场景)。然后,我将对深度附件执行相同的操作,然后在绘图缓冲区中渲染另一组几何体,以创建合成场景。。。这更有意义吗?我还是不明白。如果你只是想把一些多边形画到一个纹理上,然后把这个纹理作为绘图缓冲区,然后在上面画我的多边形,为什么不先把所有的多边形都画到绘图缓冲区呢?否则,将纹理作为四边形绘制到绘图缓冲区上,然后在其上绘制材质。在WebGL中,无法使纹理成为图形缓冲区的颜色附件。图形缓冲区由WebGL独占管理(至少在WebGL版本1中是如此),第一次渲染实际上没有在我的计算机上完成。它由渲染服务器提供。但你提出了一个很好的观点。我可以把它放在一个帧缓冲区,然后把我的三角形画到同一个帧缓冲区,然后我可以把得到的纹理画到一个矩形上。谢谢如果你想写下来作为回答,我会接受的o) 实际上我正试图去另一个方向。。。将纹理填充到主屏幕缓冲区中,而不是读取它。你知道怎么做吗?