为什么RenderingContext.drawElements清除屏幕它吸引过吗?(Why is

2019-10-21 13:32发布

被RenderingContext.drawElements纠正时,它会清除屏幕它吸引过吗?

考虑这些截图,显示整个调用drawElements与已经绘制的被擦除目标的一个步骤。

Answer 1:

WebGL的有效清除页面已经被合成后的画面。 当你通过东西一条线同时加强它会在每次停车时间进行合成。

如果你不希望它要求清除preserveDrawingBuffer: true当您创建WebGL的上下文关系中

gl = someCanvas.getContext("webgl", { preserveDrawingBuffer: true });

至于为什么, 从规范

虽然有时需要保留绘制缓冲区,它可能会导致在某些平台上显著的性能损失。 只要有可能,这个标志应该保持虚假和使用其他技术。 像同步绘图缓冲器接入(例如,主叫readPixels或toDataURL在呈现附图缓冲器相同的功能)的技术可用于获得绘制缓冲区的内容。 如果作者需要呈现在一系列的呼叫同一图形缓冲区,可以使用帧缓冲区对象。

实现可以优化掉后绘制缓冲区所需的隐含清除操作,只要保证可以做出笔者无法访问从另一个进程缓冲区的内容。 举例来说,如果作者执行的明确清晰,则隐含清除不需要。

该TL; DR版本preserveDrawingBuffer: false (默认)允许WebGL的交换合成时的缓冲区(如果它选择,这并不意味着它会交换缓冲,但它可以)。 preserveDrawingBuffer: true意味着它不能交换缓冲,它必须复制的缓冲区。 复制是比交换慢得多。



文章来源: Why is RenderingContext.drawElements clearing the screen before it draws?