【问题标题】:Is 2d context considered as "webgl coding"2d 上下文是否被视为“webgl 编码”
【发布时间】:2017-06-07 18:05:49
【问题描述】:

当我编写如下代码时:

var x = document.createElement("canvas");
var ctx = x.getContext("2d");
--------
--------

当我编写如下代码时:

var canvas = document.createElement('canvas');
var gl = canvas.getContext('experimental-webgl');
--------
--------

a) 以上两个 - 都将在 GPU 中运行??

b) 两者都被视为 Webgl 编码??

【问题讨论】:

  • 这两个代码很可能是 gpu 加速的(尽管第一个可能是 cpu 在旧浏览器上呈现的)。只有第二个是 webgl,它公开了一组与第一个不同的函数。
  • 我有一个用“2d”编写的代码,我希望它在“experimental-webgl”中运行。我如何使用/将 2d 代码转换为 webgl ...,因为我想在 GPU 中运行我的代码。
  • 2d 和 webgl 上下文具有非常不同的 API(以及不同的目的),因此没有简单的方法来翻译代码。但是,2d 画布在现代浏览器上默认是 gpu 加速的。看看这个:http://stackoverflow.com/questions/32815646/is-canvas-element-in-html5-hardware-accelerated
  • 感谢弗朗索瓦的快速回复!我在浏览器上执行了 chrome://gpu/ 发现:“Canvas:硬件加速”,这意味着我的 2d 上下文代码也将在 GPU 中运行,对吧? (不需要 webgl 上下文)
  • 您可以将 2d 画布移植到 webgl 纹理。结合起来区分的好方法。

标签: webgl openlayers-3


【解决方案1】:

“2d”或“webgl”是否支持 GPU 加速取决于浏览器和操作系统。

例如you can run Chrome using osmesa,它将完全由软件渲染。

一般而言,WebGL 上下文几乎总是 GPU 加速的,这取决于 2d 上下文。我知道曾经在一定大小下的 2d 上下文在 Chrome 中没有 GPU 加速,因为绘制小东西的软件通常比 GPU 加速更快。这是否仍然是真的我不知道,但关键在于它取决于浏览器和/或操作系统。

2d 上下文不是“webgl”编码。 WebGL coding is writing GLSL shaders and calling all the necessary functions to supply those shaders with data.

【讨论】:

  • 感谢您的回答。如果代码在 GPU 或 CPU 上运行,您能否告诉我如何直观地检查/验证?
  • 你可以在 chrome 中去about:gpu 进行检查,但它不会告诉你它是否一直在使用 GPU 加速,只有在可以的情况下。换句话说,即使“about:gpu”说 canvas 2d 是 GPU 加速的,但这并不意味着 chrome 总是使用 GPU 加速。请参阅上面关于未加速的小型上下文的示例(至少在过去)。对于 WebGL,您还可以尝试将 {failIfMajorPerformanceCaveat: true} 作为第二个参数传递给 getContext,在这种情况下,如果是软件渲染它可能会失败。当然,如果没有 webgl 它也会失败,所以你可能需要制作 2 个上下文。
猜你喜欢
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 2011-01-26
  • 2012-03-17
相关资源
最近更新 更多