因为这就是WebGL的工作方式。
WebGL自动交换/复制。每当你做任何影响WebGL drawingBuffer(想想“backbuffer”)的事情时,它都会被标记为交换/复制。下次浏览器合成网页时,它会进行交换或复制。你可以告诉它总是复制。你不能告诉它总是交换
具体来说,使用创建WebGL上下文{preserveDrawingBuffer:true}
如中所示
gl=someCanvas.getContext(“webgl”,{preserveDrawingBuffer:true});
告诉WebGL您总是希望它进行复制。
默认情况下,WebGL根据各种因素选择交换或复制。例如,如果启用了抗锯齿,那么它始终是一个有效的副本(解决方案),而如果禁用了抗锯齿则可能是一个交换。此外,在这种默认情况下,当保留DrawingBuffer
如果是false,则在执行复制或交换后,将清除后台缓冲区。这是为了使它看起来一致,而不管它选择复制还是交换。
如果保留DrawingBuffer
=true,则从不清除后台缓冲区。
如果您想在多个JavaScript事件上完成一系列工作,并且在完成所有工作之前不让用户看到结果,那么您需要使用附加的纹理或renderbuffer渲染到帧缓冲区,然后在完成所有的工作后,将其渲染到画布上(后缓冲区)。
至于gl.饰面
这是WebGL中的no-op。这毫无意义。