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