Javascript 在webgl中切换画布是否会影响';上下文切换开销';像桌面opengl?

Javascript 在webgl中切换画布是否会影响';上下文切换开销';像桌面opengl?,javascript,canvas,webgl,Javascript,Canvas,Webgl,在桌面OpenGL中,众所周知,切换上下文会导致一些开销损失,尤其是您必须重新加载/重新绑定内存中的某些对象(纹理等) 当您在WebGL中的不同画布元素之间切换时,是否会发生相同的上下文切换惩罚?是否有任何webgl对象可以在一个页面上的画布元素之间共享 没有可以在画布上共享的WebGL对象。如果画布需要共享WebGL对象,可以使用一个大画布来显示多个画布,这是一个解决方案 至少在Chrome上,我不希望在画布之间切换到绘图会有任何开销。首先,您不太可能在画布之间每帧切换一次以上。如果你的画布都

在桌面OpenGL中,众所周知,切换上下文会导致一些开销损失,尤其是您必须重新加载/重新绑定内存中的某些对象(纹理等)


当您在WebGL中的不同画布元素之间切换时,是否会发生相同的上下文切换惩罚?是否有任何webgl对象可以在一个页面上的画布元素之间共享

没有可以在画布上共享的WebGL对象。如果画布需要共享WebGL对象,可以使用一个大画布来显示多个画布,这是一个解决方案


至少在Chrome上,我不希望在画布之间切换到绘图会有任何开销。首先,您不太可能在画布之间每帧切换一次以上。如果你的画布都在屏幕上,那么上面的解决方案会覆盖它们。如果它们之间的距离更大(比如你必须滚动才能看到更多的画布),则会减少开关的数量。在大多数驱动程序上,虽然开销很小。

“尤其是您必须重新加载/重新绑定内存中的某些对象(纹理等)。”不正确。上下文保留在上下文中设置的所有状态。现在,如果上下文被破坏,那么是的,您必须恢复该状态。不,实际上,具有共享对象的上下文有各种状态问题,因为它们共享对象的状态。我知道,因为我得和他们打交道。我还知道,一些驱动程序在切换内容时有严重的开销。我也知道这一点,因为我们的解决方案(在Chrome中)是在特定GPU的一个实际上下文之上虚拟化多个上下文。在Chrome中切换没有开销,特别是因为Chrome在一个实际上下文之上虚拟化多个上下文,正如您在上面评论的那样?电子也是这样吗?