Si può provare ad allegare la trama a un framebuffer e quindi chiamare readPixels sul frame buffer.
in fase di init
// make a framebuffer
fb = gl.createFramebuffer();
// make this the current frame buffer
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
// attach the texture to the framebuffer.
gl.framebufferTexture2D(
gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0,
gl.TEXTURE_2D, texture, 0);
// check if you can read from this type of texture.
bool canRead = (gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE);
// Unbind the framebuffer
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
al tempo di lettura
if (canRead) {
// bind the framebuffer
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
// read the pixels
gl.readPixels(......);
// Unbind the framebuffer
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
}
Per le texture di format = gl.RGBA, type = gl.UNSIGNED_BYTE CanRead dovrebbe essere sempre vero. Per altri formati e tipi, canRead potrebbe essere falso.
che bella idea! Grazie!! :) – Andy
Quindi, come ho capito, questo funzionerà solo per le trame di livello = 0, poiché gl.framebufferTexture2D richiede il livello = 0. C'è un modo per gestire anche i livelli diversi da zero? – Andy
È possibile eseguire il rendering di un livello specifico utilizzando texture2DLod negli shader in un altro livello di texture 0, quindi rileggilo. – gman