Ni5*_*5aN 1 memory opengl-es webgl html5-canvas
例如,对于我的 940M 视频卡,使用以下代码创建的画布需要 500 MB 的显存
var c = document.createElement('canvas');
var ctx = c.getContext('webgl');
c.width = c.height = 4096;
Run Code Online (Sandbox Code Playgroud)
同时,相同大小的 OpenGL 上下文仅使用 100 MB 的显存:
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
int s = 4096;
glutInitWindowSize(s, s);
glutCreateWindow("Hello world :D");
Run Code Online (Sandbox Code Playgroud)
为什么 WebGL 使用这么多内存?是否可以减少相同大小的上下文的已用内存量?
正如 LJ 指出的那样,画布是双缓冲的,抗锯齿的,默认情况下具有 alpha 和深度缓冲区。你把画布做成了 4096 x 4096
16meg * 4 (RGBA) or 64meg for one buffer
Run Code Online (Sandbox Code Playgroud)
你得到那个时间至少 4
front buffer = 1
antialiased backbuffer = 2 to 16
depth buffer = 1
Run Code Online (Sandbox Code Playgroud)
所以这是 256meg 到 1152meg 取决于浏览器选择的抗锯齿。
在回答您的问题时,您可以尝试不要求深度缓冲区、alpha 缓冲区和/或抗锯齿
var c = document.createElement('canvas');
var ctx = c.getContext('webgl', { alpha: false, depth: false, antialias: false});
c.width = c.height = 4096;
Run Code Online (Sandbox Code Playgroud)
浏览器是否实际上不分配 alpha 通道或只是忽略它取决于浏览器和驱动程序。它是否实际上不会分配深度缓冲区也取决于浏览器。传递antialias: false至少应该使第二个缓冲区变为 1x 而不是 2x 到 16x。
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |