【问题标题】:WebGL maximum resolution? gl.readPixels returning empty pixelsWebGL 最大分辨率? gl.readPixels 返回空像素
【发布时间】:2017-01-18 15:07:02
【问题描述】:

我正在使用headless-gl 和 node 在服务器端渲染生成的高分辨率 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();

在增加宽度/高度值之后,pixels 数组仅填充了 rgba 像素的零值。我猜我在某个地方遇到了内存/缓冲区限制,但我不确定是哪一个。根据 nvidia-smi 的说法,运行此程序时 GPU 内存 (12GB) 远未耗尽。

webgl 的理论最大分辨率是多少,它依赖于什么?

【问题讨论】:

  • 您可能还想通过调用gl.getError()来检查错误

标签: javascript node.js webgl


【解决方案1】:

存在与 GPU 内存量无关的最大视口大小。

您可以使用gl.getParameter查看限制:

console.log(gl.getParameter(gl.MAX_VIEWPORT_DIMS))
console.log(gl.getParameter(gl.MAX_RENDERBUFFER_SIZE))

我的猜测是你达到了MAX_VIEWPORT_DIMS 的限制。

【讨论】:

  • 感谢您的帮助!
  • 以非常大的图像分辨率捕获 OpenGL 窗口的快照:stackoverflow.com/a/6491939/243103
  • @stefan 引用的答案是针对 OpenGL 的。虽然这个想法是合理的,但实际的解决方案与 WebGL 无关。 WebGL 没有这些功能。如果您使用的是three.js you can reference this sample。否则,渲染图像网格以生成更大图像的解决方案将取决于您的着色器和您选择的数学库。
猜你喜欢
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多