WebGL 最大分辨率? gl.readPixels 返回空像素
WebGL maximum resolution? gl.readPixels returning empty pixels
我正在使用 headless-gl 和节点一起在服务器端渲染高分辨率生成的 WebGL 图像。这取决于所选的分辨率。
'use strict';
const Gl = require('gl');
const width = 7200;
const height = 10800;
// Setup renderer using headless-gl
const gl = Gl(width, height, { preserveDrawingBuffer: true })
// Clear screen to red
gl.clearColor(1, 0, 0, 1)
gl.clear(gl.COLOR_BUFFER_BIT)
// Get pixels
const pixels = new Uint8Array(width * height * 4);
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
// Is first color indeed red?
if (pixels[0] === 255) {
console.log('OK');
}
process.exit();
在增加 width/height 值后,pixels
数组中的 rgba 像素仅填充零值。我猜我在某个地方达到了 memory/buffer 限制,但我不确定是哪一个。根据 nvidia-smi 的说法,GPU 内存 (12GB) 在 运行 时远未耗尽。
webgl 的理论最大分辨率是多少,它取决于什么?
有一个最大视口大小,它与 GPU 内存量无关。
您可以使用 gl.getParameter
查看限制:
console.log(gl.getParameter(gl.MAX_VIEWPORT_DIMS))
console.log(gl.getParameter(gl.MAX_RENDERBUFFER_SIZE))
我的猜测是您达到了 MAX_VIEWPORT_DIMS
限制。
我正在使用 headless-gl 和节点一起在服务器端渲染高分辨率生成的 WebGL 图像。这取决于所选的分辨率。
'use strict';
const Gl = require('gl');
const width = 7200;
const height = 10800;
// Setup renderer using headless-gl
const gl = Gl(width, height, { preserveDrawingBuffer: true })
// Clear screen to red
gl.clearColor(1, 0, 0, 1)
gl.clear(gl.COLOR_BUFFER_BIT)
// Get pixels
const pixels = new Uint8Array(width * height * 4);
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
// Is first color indeed red?
if (pixels[0] === 255) {
console.log('OK');
}
process.exit();
在增加 width/height 值后,pixels
数组中的 rgba 像素仅填充零值。我猜我在某个地方达到了 memory/buffer 限制,但我不确定是哪一个。根据 nvidia-smi 的说法,GPU 内存 (12GB) 在 运行 时远未耗尽。
webgl 的理论最大分辨率是多少,它取决于什么?
有一个最大视口大小,它与 GPU 内存量无关。
您可以使用 gl.getParameter
查看限制:
console.log(gl.getParameter(gl.MAX_VIEWPORT_DIMS))
console.log(gl.getParameter(gl.MAX_RENDERBUFFER_SIZE))
我的猜测是您达到了 MAX_VIEWPORT_DIMS
限制。