package com.akjava.gwt.three.client.js.renderers; import com.akjava.gwt.lib.client.CanvasUtils; import com.akjava.gwt.lib.client.experimental.ImageDataUtils; import com.akjava.gwt.three.client.js.core.EventDispatcher; import com.akjava.gwt.three.client.js.math.Vector2; import com.akjava.gwt.three.client.js.textures.Texture; import com.google.gwt.canvas.client.Canvas; import com.google.gwt.canvas.dom.client.ImageData; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.text.shared.Renderer; import com.google.gwt.typedarrays.client.Uint8ArrayNative; public class WebGLRenderTarget extends EventDispatcher{ protected WebGLRenderTarget(){} public final native int getWidth()/*-{ return this.width; }-*/; public final native void setWidth(int width)/*-{ this.width = width; }-*/; public final native int getHeight()/*-{ return this.height; }-*/; public final native void setHeight(int height)/*-{ this.height = height; }-*/; public final native JavaScriptObject getOptions()/*-{ return this.options; }-*/; public final native void setOptions(JavaScriptObject options)/*-{ this.options = options; }-*/; public final native int getWrapS()/*-{ return this.wrapS; }-*/; public final native void setWrapS(int wrapS)/*-{ this.wrapS = wrapS; }-*/; public final native int getWrapT()/*-{ return this.wrapT; }-*/; public final native void setWrapT(int wrapT)/*-{ this.wrapT = wrapT; }-*/; public final native int getMagFilter()/*-{ return this.magFilter; }-*/; public final native void setMagFilter(int magFilter)/*-{ this.magFilter = magFilter; }-*/; public final native int getMinFilter()/*-{ return this.minFilter; }-*/; public final native void setMinFilter(int minFilter)/*-{ this.minFilter = minFilter; }-*/; public final native int getAnisotropy()/*-{ return this.anisotropy; }-*/; public final native void setAnisotropy(int anisotropy)/*-{ this.anisotropy = anisotropy; }-*/; public final native Vector2 getOffset()/*-{ return this.offset; }-*/; public final native void setOffset(Vector2 offset)/*-{ this.offset = offset; }-*/; public final native Vector2 getRepeat()/*-{ return this.repeat; }-*/; public final native void setRepeat(Vector2 repeat)/*-{ this.repeat = repeat; }-*/; public final native int getFormat()/*-{ return this.format; }-*/; public final native void setFormat(int format)/*-{ this.format = format; }-*/; public final native int getType()/*-{ return this.type; }-*/; public final native void setType(int type)/*-{ this.type = type; }-*/; public final native boolean isDepthBuffer()/*-{ return this.depthBuffer; }-*/; public final native void setDepthBuffer(boolean depthBuffer)/*-{ this.depthBuffer = depthBuffer; }-*/; public final native boolean isStencilBuffer()/*-{ return this.stencilBuffer; }-*/; public final native void setStencilBuffer(boolean stencilBuffer)/*-{ this.stencilBuffer = stencilBuffer; }-*/; public final native boolean isGenerateMipmaps()/*-{ return this.generateMipmaps; }-*/; public final native void setGenerateMipmaps(boolean generateMipmaps)/*-{ this.generateMipmaps = generateMipmaps; }-*/; /** * i have no idea * @return */ public final native JavaScriptObject getShareDepthFrom()/*-{ return this.shareDepthFrom; }-*/; public final native void setShareDepthFrom(JavaScriptObject shareDepthFrom)/*-{ this.shareDepthFrom = shareDepthFrom; }-*/; public final native void dispose()/*-{ this.dispose(); }-*/; /** * @deprecated on r72 * @return */ public final native JavaScriptObject getWebglTexture()/*-{ return this.__webglTexture; }-*/; public final native Texture gwtCastTexture()/*-{ return this; }-*/; //TODO convert native? /* * not work WebGLRenderTargetCube */ public final Canvas gwtTextureToCanvas(WebGLRenderer renderer){ int w=getWidth(); int h=getHeight(); Uint8ArrayNative buffer=Uint8ArrayNative.create(w*h*4);//rgba renderer.readRenderTargetPixels(this, 0, 0, w,h, buffer); Canvas canvas=CanvasUtils.createCanvas(w, h); ImageData imageData=CanvasUtils.createSameSizeImageData(canvas); ImageDataUtils.set(imageData, buffer); ImageDataUtils.putImageData(imageData, canvas); return canvas; } }