package com.akjava.gwt.three.client.java.utils;
import com.akjava.gwt.three.client.gwt.renderers.WebGLContext;
import com.akjava.gwt.three.client.js.renderers.WebGLRenderTarget;
import com.akjava.gwt.three.client.js.renderers.WebGLRenderer;
import com.google.gwt.canvas.client.Canvas;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.CanvasElement;
public class TextureExportUtils {
public static final String toDataUrl(WebGLRenderer renderer,WebGLRenderTarget renderTarget,Canvas canvas){
int w= renderTarget.getWidth();
int h= renderTarget.getHeight();
CanvasElement element=canvas!=null?canvas.getCanvasElement():null;
return toDataUrl(renderer.getContext(), renderTarget.getWebglTexture(),w,h, element);
}
public static final native String toDataUrl(WebGLContext gl, JavaScriptObject texture, int width, int height,CanvasElement c)/*-{
// Create a framebuffer backed by the texture
var framebuffer = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
// Read the contents of the framebuffer
var data = new Uint8Array(width * height * 4);
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);
gl.deleteFramebuffer(framebuffer);
// Create a 2D canvas to store the result
var canvas;
if(c){
canvas=c;
}else{
canvas= document.createElement('canvas');
canvas.width = width;
canvas.height = height;
}
var context = canvas.getContext('2d');
// Copy the pixels to a 2D canvas
var imageData = context.createImageData(width, height);
imageData.data.set(data);
context.putImageData(imageData, 0, 0);
return canvas.toDataURL();
}-*/;
}