【问题标题】:does switching canvas in webgl impose 'context switch overhead' like desktop opengl?在 webgl 中切换画布会像桌面 opengl 一样强加“上下文切换开销”吗?
【发布时间】:2017-11-21 23:33:10
【问题描述】:

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

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

【问题讨论】:

  • "尤其是你必须重新加载/重新绑定内存中的一些对象(纹理等)。" 不正确。上下文保留在其中设置的所有状态。现在,如果上下文被destroyed,那么是的,你必须恢复那个状态。
  • 不,实际上具有共享对象的上下文具有各种状态问题,因为它们共享对象的状态。我知道,因为我必须在他们周围工作。我也知道一些驱动程序在切换内容时有很大的开销。我也知道这一点,因为我们的解决方案(在 Chrome 中)是在该特定 GPU 的一个实际上下文之上虚拟化多个上下文。

标签: javascript canvas webgl


【解决方案1】:

没有可以跨画布共享的 WebGL 对象。有一些解决方案可以通过使用一个大画布使其看起来有多个画布,如果画布需要共享 WebGL 对象,这是一种解决方案。 WebGL example, three.js example.

至少在 Chrome 中,我不希望在画布之间切换到绘图有任何开销。首先,您不太可能在每帧每个画布之间多次切换画布。如果您的画布都在屏幕上,那么上面的解决方案将涵盖它们。如果它们更加分离(因为您必须滚动才能看到更多画布),那么a solution like this 会减少开关的数量。尽管开销很小,但在大多数驱动程序上。

【讨论】:

  • 正如您在上面评论的那样,特别是因为 Chrome 在一个实际上下文之上虚拟化了多个上下文,所以在切换 chrome 时没有开销?在 Electron 中也会出现这种情况吗?
猜你喜欢
  • 2011-11-09
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 2010-09-23
  • 2016-04-11
相关资源
最近更新 更多