Bạn có thể thử đính kết cấu vào bộ đệm khung và sau đó gọi readPixels trên bộ đệm khung.
lúc 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);
lúc đọc
if (canRead) {
// bind the framebuffer
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
// read the pixels
gl.readPixels(......);
// Unbind the framebuffer
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
}
Đối với kết cấu của format = gl.RGBA, type = gl.UNSIGNED_BYTE canRead nên luôn luôn là sự thật. Đối với các định dạng và loại khác, có thể là sai.
ý tưởng tuyệt vời! cảm ơn!! :) – Andy
Vì vậy, như tôi hiểu, điều này sẽ chỉ làm việc cho kết cấu của cấp = 0, vì gl.framebufferTexture2D yêu cầu mức = 0. Có cách nào để xử lý các mức khác không? – Andy
Bạn có thể hiển thị một mức cụ thể bằng cách sử dụng texture2DLod trong các trình đổ bóng của bạn vào cấp độ kết cấu khác 0 rồi đọc điều đó. – gman