2017-01-18 11 views
1

私はheadless-glをノードと共に使用して、サーバ側で高解像度のWebGLイメージをレンダリングしています。これは、選択した解像度に応じて正常に動作します。幅/高さがpixelsアレイはRGBAピクセルのための唯一のゼロ値で満たされる値増加のいくつかの時点後WebGLの最大解像度?空のピクセルを返すgl.readPixels

'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(); 

。私はどこかでメモリ/バッファ制限を打っていると推測していますが、どちらが確実かわかりません。 nvidia-smiによると、これを実行するとGPUメモリ(12GB)は枯渇することはありません。

webglの理論上の最大解像度は何ですか?それは何に依存していますか?

+0

また、 'gl.getError()'を呼び出してエラーをチェックしたいかもしれません。 – gman

答えて

0

GPUメモリの量とは無関係に、最大ビューポートサイズがあります。

あなたはgl.getParameterを使用して限界を見ることができます:

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

私の推測では、あなたがMAX_VIEWPORT_DIMS制限をヒットしていることです。

+0

ありがとうございました! –

+0

イメージ解像度が非常に高いOpenGLウィンドウのスナップショットをキャプチャします。http://stackoverflow.com/a/6491939/243103 –

+0

これは、OpenGLのためのものです。アイデアは健全ですが、実際の解決策はWebGLとは関係ありません。 WebGLにはこれらの機能はありません。 three.jsを使用している場合(このサンプルを参照できます)(https://threejs.org/examples/webgl_multiple_canvases_grid.html)。さもなければ、イメージのグリッドをレンダリングしてより大きなイメージを作成するソリューションは、シェーダと選択した数学ライブラリに依存します。 – gman

関連する問題