159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/* 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copyright (c) 2009-2010 jMonkeyEngine 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * All rights reserved. 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Redistribution and use in source and binary forms, with or without 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * modification, are permitted provided that the following conditions are 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * met: 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions of source code must retain the above copyright 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer. 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions in binary form must reproduce the above copyright 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer in the 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * documentation and/or other materials provided with the distribution. 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Neither the name of 'jMonkeyEngine' nor the names of its contributors 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * may be used to endorse or promote products derived from this software 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * without specific prior written permission. 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.niftygui; 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.font.BitmapText; 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.material.Material; 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.material.RenderState; 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.math.ColorRGBA; 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.math.Matrix4f; 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.renderer.RenderManager; 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.renderer.Renderer; 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.Geometry; 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.VertexBuffer; 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.VertexBuffer.Format; 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.VertexBuffer.Type; 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.VertexBuffer.Usage; 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.scene.shape.Quad; 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.texture.Texture2D; 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.util.BufferUtils; 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport de.lessvoid.nifty.elements.render.TextRenderer.RenderFontNull; 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport de.lessvoid.nifty.render.BlendMode; 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport de.lessvoid.nifty.spi.render.MouseCursor; 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport de.lessvoid.nifty.spi.render.RenderDevice; 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport de.lessvoid.nifty.spi.render.RenderFont; 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport de.lessvoid.nifty.spi.render.RenderImage; 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport de.lessvoid.nifty.tools.Color; 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport de.lessvoid.nifty.tools.resourceloader.NiftyResourceLoader; 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.nio.ByteBuffer; 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.nio.FloatBuffer; 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.HashMap; 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic class RenderDeviceJme implements RenderDevice { 62a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private NiftyJmeDisplay display; 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private RenderManager rm; 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private Renderer r; 6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private HashMap<String, BitmapText> textCacheLastFrame = new HashMap<String, BitmapText>(); 6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private HashMap<String, BitmapText> textCacheCurrentFrame = new HashMap<String, BitmapText>(); 6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private final Quad quad = new Quad(1, -1, true); 6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private final Geometry quadGeom = new Geometry("nifty-quad", quad); 7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private final Material niftyMat; 71a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta private final Material niftyQuadMat; 72a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta private final Material niftyQuadGradMat; 7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private boolean clipWasSet = false; 7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private BlendMode blendMode = null; 7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private VertexBuffer quadDefaultTC = quad.getBuffer(Type.TexCoord); 7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private VertexBuffer quadModTC = quadDefaultTC.clone(); 7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private VertexBuffer quadColor; 7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private Matrix4f tempMat = new Matrix4f(); 7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private ColorRGBA tempColor = new ColorRGBA(); 80a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 81a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta public RenderDeviceJme(NiftyJmeDisplay display) { 8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.display = display; 83a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta quadColor = new VertexBuffer(Type.Color); 8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta quadColor.setNormalized(true); 8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta ByteBuffer bb = BufferUtils.createByteBuffer(4 * 4); 8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta quadColor.setupData(Usage.Stream, 4, Format.UnsignedByte, bb); 8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta quad.setBuffer(quadColor); 89a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta quadModTC.setUsage(Usage.Stream); 91a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 92a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta //Color + texture color material for text and images 93a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyMat = new Material(display.getAssetManager(), "Common/MatDefs/Nifty/NiftyTex.j3md"); 9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta niftyMat.getAdditionalRenderState().setDepthTest(false); 95a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta //Color material for uniform colored quads 96a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyQuadMat = new Material(display.getAssetManager(), "Common/MatDefs/Nifty/NiftyQuad.j3md"); 97a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyQuadMat.getAdditionalRenderState().setDepthTest(false); 98a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 99a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta //vertex color only for gradient quads (although i didn't find a way in nifty to make a gradient using vertex color) 100a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyQuadGradMat = new Material(display.getAssetManager(), "Common/MatDefs/Nifty/NiftyQuadGrad.j3md"); 101a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyQuadGradMat.getAdditionalRenderState().setDepthTest(false); 102a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 104a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setResourceLoader(NiftyResourceLoader niftyResourceLoader) { 10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 107a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 108a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta public void setRenderManager(RenderManager rm) { 10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.rm = rm; 11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.r = rm.getRenderer(); 11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta // TODO: Cursor support 114a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta public MouseCursor createMouseCursor(String str, int x, int y) { 11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return new MouseCursor() { 116a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void dispose() { 11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta }; 12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 121a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 122a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta public void enableMouseCursor(MouseCursor cursor) { 12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 124a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 125a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta public void disableMouseCursor() { 12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 127a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 12859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public RenderImage createImage(String filename, boolean linear) { 12959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return new RenderImageJme(filename, linear, display); 13059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 131a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 13259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public RenderFont createFont(String filename) { 13359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return new RenderFontJme(filename, display); 13459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 135a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 13659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void beginFrame() { 13759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 138a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 13959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void endFrame() { 14059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta HashMap<String, BitmapText> temp = textCacheLastFrame; 14159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta textCacheLastFrame = textCacheCurrentFrame; 14259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta textCacheCurrentFrame = temp; 14359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta textCacheCurrentFrame.clear(); 144a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 14559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// System.exit(1); 14659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 147a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 14859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int getWidth() { 14959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return display.getWidth(); 15059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 151a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 15259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int getHeight() { 15359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return display.getHeight(); 15459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 155a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 15659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void clear() { 15759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 158a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 15959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setBlendMode(BlendMode blendMode) { 160a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta if (this.blendMode != blendMode) { 16159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.blendMode = blendMode; 16259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 16359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 164a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 165a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta private RenderState.BlendMode convertBlend() { 166a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta if (blendMode == null) { 16759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return RenderState.BlendMode.Off; 168a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta } else if (blendMode == BlendMode.BLEND) { 16959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return RenderState.BlendMode.Alpha; 170a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta } else if (blendMode == BlendMode.MULIPLY) { 17159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return RenderState.BlendMode.Modulate; 172a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta } else { 17359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new UnsupportedOperationException(); 174a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta } 17559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 176a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 177a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta private int convertColor(Color color) { 17859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int color2 = 0; 179a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta color2 |= ((int) (255.0 * color.getAlpha())) << 24; 180a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta color2 |= ((int) (255.0 * color.getBlue())) << 16; 181a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta color2 |= ((int) (255.0 * color.getGreen())) << 8; 182a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta color2 |= ((int) (255.0 * color.getRed())); 18359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return color2; 18459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 185a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 186a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta private ColorRGBA convertColor(Color inColor, ColorRGBA outColor) { 18759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return outColor.set(inColor.getRed(), inColor.getGreen(), inColor.getBlue(), inColor.getAlpha()); 18859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 18959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 190a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// private void setColor(Color color) { 191a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// ByteBuffer buf = (ByteBuffer) quadColor.getData(); 192a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// buf.rewind(); 193a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// 194a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// int color2 = convertColor(color); 195a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// buf.putInt(color2); 196a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// buf.putInt(color2); 197a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// buf.putInt(color2); 198a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// buf.putInt(color2); 199a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// 200a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// buf.flip(); 201a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// quadColor.updateData(buf); 202a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta// } 203a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 20459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 20559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 20659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param font 20759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param str 20859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param x 20959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param y 21059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param color 21159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param size 21259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @deprecated use renderFont(RenderFont font, String str, int x, int y, Color color, float sizeX, float sizeY) instead 21359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 21459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Deprecated 215a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta public void renderFont(RenderFont font, String str, int x, int y, Color color, float size) { 21659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta renderFont(font, str, x, y, color, size, size); 21759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 218a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 21959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 220a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta public void renderFont(RenderFont font, String str, int x, int y, Color color, float sizeX, float sizeY) { 221a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta if (str.length() == 0) { 22259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 223a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta } 224a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 225a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta if (font instanceof RenderFontNull) { 22659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return; 227a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta } 228a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 22959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RenderFontJme jmeFont = (RenderFontJme) font; 23059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 231a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta String key = font + str + color.getColorString(); 23259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta BitmapText text = textCacheLastFrame.get(key); 23359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (text == null) { 23459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta text = jmeFont.createText(); 23559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta text.setText(str); 23659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta text.updateLogicalState(0); 23759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 23859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta textCacheCurrentFrame.put(key, text); 239a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 240a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyMat.setColor("Color", convertColor(color, tempColor)); 24159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta niftyMat.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha); 24259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// niftyMat.getAdditionalRenderState().setBlendMode(convertBlend()); 24359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta text.setMaterial(niftyMat); 244a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 24559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta tempMat.loadIdentity(); 246a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta tempMat.setTranslation(x, getHeight() - y, 0); 24759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta tempMat.setScale(sizeX, sizeY, 0); 248a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 24959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta rm.setWorldMatrix(tempMat); 25059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta text.render(rm); 251a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 25259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// System.out.println("renderFont"); 25359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 254a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 25559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void renderImage(RenderImage image, int x, int y, int w, int h, 256a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta int srcX, int srcY, int srcW, int srcH, 257a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta Color color, float scale, 258a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta int centerX, int centerY) { 25959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RenderImageJme jmeImage = (RenderImageJme) image; 26059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta Texture2D texture = jmeImage.getTexture(); 261a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 26259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta niftyMat.getAdditionalRenderState().setBlendMode(convertBlend()); 263a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyMat.setColor("Color", convertColor(color, tempColor)); 264a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyMat.setTexture("Texture", texture); 265a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta //setColor(color); 266a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 267a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta float imageWidth = jmeImage.getWidth(); 26859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta float imageHeight = jmeImage.getHeight(); 26959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta FloatBuffer texCoords = (FloatBuffer) quadModTC.getData(); 270a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 27159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta float startX = srcX / imageWidth; 27259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta float startY = srcY / imageHeight; 273a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta float endX = startX + (srcW / imageWidth); 274a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta float endY = startY + (srcH / imageHeight); 275a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 27659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta startY = 1f - startY; 277a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta endY = 1f - endY; 278a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 27959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta texCoords.rewind(); 28059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta texCoords.put(startX).put(startY); 281a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta texCoords.put(endX).put(startY); 282a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta texCoords.put(endX).put(endY); 28359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta texCoords.put(startX).put(endY); 28459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta texCoords.flip(); 28559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta quadModTC.updateData(texCoords); 286a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 28759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta quad.clearBuffer(Type.TexCoord); 28859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta quad.setBuffer(quadModTC); 289a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 29059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta float x0 = centerX + (x - centerX) * scale; 29159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta float y0 = centerY + (y - centerY) * scale; 292a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 29359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta tempMat.loadIdentity(); 29459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta tempMat.setTranslation(x0, getHeight() - y0, 0); 29559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta tempMat.setScale(w * scale, h * scale, 0); 296a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 29759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta rm.setWorldMatrix(tempMat); 29859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta niftyMat.render(quadGeom, rm); 29959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// 30059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// System.out.println("renderImage (Sub)"); 30159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 302a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 30359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void renderImage(RenderImage image, int x, int y, int width, int height, 304a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta Color color, float imageScale) { 305a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 30659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta RenderImageJme jmeImage = (RenderImageJme) image; 307a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 30859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta niftyMat.getAdditionalRenderState().setBlendMode(convertBlend()); 309a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyMat.setColor("Color", convertColor(color, tempColor)); 310a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyMat.setTexture("Texture", jmeImage.getTexture()); 311a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta //setColor(color); 312a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 31359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta quad.clearBuffer(Type.TexCoord); 31459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta quad.setBuffer(quadDefaultTC); 315a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 316a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta float x0 = x + 0.5f * width * (1f - imageScale); 31759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta float y0 = y + 0.5f * height * (1f - imageScale); 318a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 31959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta tempMat.loadIdentity(); 32059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta tempMat.setTranslation(x0, getHeight() - y0, 0); 32159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta tempMat.setScale(width * imageScale, height * imageScale, 0); 322a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 32359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta rm.setWorldMatrix(tempMat); 32459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta niftyMat.render(quadGeom, rm); 32559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// 32659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// System.out.println("renderImage"); 32759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 328a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 329a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta public void renderQuad(int x, int y, int width, int height, Color color) { 330a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta if (color.getAlpha() > 0) { 331a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyQuadMat.getAdditionalRenderState().setBlendMode(convertBlend()); 332a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyQuadMat.setColor("Color", convertColor(color, tempColor)); 333a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 334a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta tempMat.loadIdentity(); 335a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta tempMat.setTranslation(x, getHeight() - y, 0); 336a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta tempMat.setScale(width, height, 0); 337a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 338a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta rm.setWorldMatrix(tempMat); 339a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyQuadMat.render(quadGeom, rm); 340a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta } 34159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// System.out.println("renderQuad (Solid)"); 34259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 343a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 34459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void renderQuad(int x, int y, int width, int height, 345a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta Color topLeft, Color topRight, Color bottomRight, Color bottomLeft) { 34659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 34759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta ByteBuffer buf = (ByteBuffer) quadColor.getData(); 34859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta buf.rewind(); 34959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 35059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta buf.putInt(convertColor(topRight)); 35159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta buf.putInt(convertColor(topLeft)); 352a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 35359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta buf.putInt(convertColor(bottomLeft)); 35459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta buf.putInt(convertColor(bottomRight)); 35559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 35659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta buf.flip(); 35759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta quadColor.updateData(buf); 35859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 359a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyQuadGradMat.getAdditionalRenderState().setBlendMode(convertBlend()); 360a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 36159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta tempMat.loadIdentity(); 36259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta tempMat.setTranslation(x, getHeight() - y, 0); 36359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta tempMat.setScale(width, height, 0); 364a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 36559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta rm.setWorldMatrix(tempMat); 366a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta niftyQuadGradMat.render(quadGeom, rm); 36759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// 36859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// System.out.println("renderQuad (Grad)"); 36959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 370a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 371a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta public void enableClip(int x0, int y0, int x1, int y1) { 37259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// System.out.println("enableClip"); 37359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta clipWasSet = true; 37459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta r.setClipRect(x0, getHeight() - y1, x1 - x0, y1 - y0); 37559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 376a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta 37759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void disableClip() { 37859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta// System.out.println("disableClip"); 379a6b44658eb1c55295f132a36233a11aa2bd8f9cfScott Barta if (clipWasSet) { 38059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta r.clearClipRect(); 38159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta clipWasSet = false; 38259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 38359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 38459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 385