当 RenderingContext.drawElements 在绘制之前清除屏幕时,它是否正确?
考虑这些屏幕截图,这些屏幕截图显示了调用 drawElements 的一个步骤,并且已绘制的对象被删除。
WebGL 有效地页面合成后清除屏幕。当您一次一行地逐步执行某些内容时,每次停下来时它都会被合成。
如果您不希望其被清除,请询问preserveDrawingBuffer: true
当您创建 WebGL 上下文时,如下所示
gl = someCanvas.getContext("webgl", { preserveDrawingBuffer: true });
至于为什么,从规范
虽然有时需要保留绘图缓冲区,但它可能会在某些平台上导致显着的性能损失。只要有可能,此标志应保持为 false 并使用其他技术。诸如同步绘图缓冲区访问之类的技术(例如,在渲染到绘图缓冲区的同一函数中调用 readPixels 或 toDataURL)可用于获取绘图缓冲区的内容。如果作者需要通过一系列调用渲染到同一个绘图缓冲区,则可以使用帧缓冲区对象。
只要可以保证作者无法从另一个进程访问缓冲区内容,实现就可以优化绘图缓冲区所需的隐式清除操作。例如,如果作者执行显式清除,则不需要隐式清除。
TL;DR 版本是preserveDrawingBuffer: false
(默认)允许 WebGL 在合成时交换缓冲区(这并不意味着它将交换缓冲区,但如果它选择的话它可以)。preserveDrawingBuffer: true
意味着它不能交换缓冲区,它必须复制缓冲区。复制比交换慢得多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)