From a6b44658eb1c55295f132a36233a11aa2bd8f9cf Mon Sep 17 00:00:00 2001 From: Scott Barta Date: Fri, 9 Mar 2012 13:52:20 -0800 Subject: New drop of the jmonkeyengine library A new drop of the jmonkeyengine library sources, based on a 2012-03-05 snapshot. Fixes a few unnecessary memory allocations in the main rendering loop. Change-Id: I51ac0942fe87204df102cfdce746b59a5cb5ff85 --- .../niftygui/com/jme3/niftygui/InputSystemJme.java | 507 +++++++++++---------- .../com/jme3/niftygui/RenderDeviceJme.java | 289 ++++++------ 2 files changed, 414 insertions(+), 382 deletions(-) (limited to 'engine/src/niftygui/com') diff --git a/engine/src/niftygui/com/jme3/niftygui/InputSystemJme.java b/engine/src/niftygui/com/jme3/niftygui/InputSystemJme.java index 0b80131..01c2ac7 100644 --- a/engine/src/niftygui/com/jme3/niftygui/InputSystemJme.java +++ b/engine/src/niftygui/com/jme3/niftygui/InputSystemJme.java @@ -1,233 +1,274 @@ -/* - * Copyright (c) 2009-2010 jMonkeyEngine - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'jMonkeyEngine' nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package com.jme3.niftygui; - -import com.jme3.input.InputManager; -import com.jme3.input.KeyInput; -import com.jme3.input.RawInputListener; -import com.jme3.input.event.*; -import de.lessvoid.nifty.Nifty; -import de.lessvoid.nifty.NiftyInputConsumer; -import de.lessvoid.nifty.tools.resourceloader.NiftyResourceLoader; -import de.lessvoid.nifty.input.keyboard.KeyboardInputEvent; -import de.lessvoid.nifty.spi.input.InputSystem; -import java.util.ArrayList; - -public class InputSystemJme implements InputSystem, RawInputListener { - - private final ArrayList inputQueue = new ArrayList(); - - private InputManager inputManager; - - private boolean isDragging = false, niftyOwnsDragging = false; - private boolean pressed = false; - private int buttonIndex; - private int x, y; - private int height; - - private boolean shiftDown = false; - private boolean ctrlDown = false; - - private Nifty nifty; - - public InputSystemJme(InputManager inputManager){ - this.inputManager = inputManager; - } - - public void setResourceLoader(NiftyResourceLoader niftyResourceLoader) { - } - - public void setNifty(Nifty nifty) { - this.nifty = nifty; - } - - /** - * @param height The height of the viewport. Used to convert - * buttom-left origin to upper-left origin. - */ - public void setHeight(int height){ - this.height = height; - } - - public void setMousePosition(int x, int y){ - } - - public void beginInput(){ - } - - public void endInput(){ - boolean result = nifty.update(); - } - - private void onTouchEventQueued(TouchEvent evt, NiftyInputConsumer nic) { - boolean consumed = false; - - x = (int) evt.getX(); - y = (int) (height - evt.getY()); - - switch (evt.getType()) { - case DOWN: - consumed = nic.processMouseEvent(x, y, 0, 0, false); - isDragging = true; - niftyOwnsDragging = consumed; - if (consumed){ - evt.setConsumed(); - } - - break; - - case UP: - if (niftyOwnsDragging){ - consumed = nic.processMouseEvent(x, y, 0, buttonIndex, pressed); - if (consumed){ - evt.setConsumed(); - } - } - - isDragging = false; - niftyOwnsDragging = false; - break; - } - } - - private void onMouseMotionEventQueued(MouseMotionEvent evt, NiftyInputConsumer nic) { - x = evt.getX(); - y = height - evt.getY(); - nic.processMouseEvent(x, y, evt.getDeltaWheel(), buttonIndex, pressed); -// if (nic.processMouseEvent(niftyEvt) /*|| nifty.getCurrentScreen().isMouseOverElement()*/){ - // Do not consume motion events - //evt.setConsumed(); -// } - } - - private void onMouseButtonEventQueued(MouseButtonEvent evt, NiftyInputConsumer nic) { - boolean wasPressed = pressed; - boolean forwardToNifty = true; - - buttonIndex = evt.getButtonIndex(); - pressed = evt.isPressed(); - - // Mouse button raised. End dragging - if (wasPressed && !pressed){ - if (!niftyOwnsDragging){ - forwardToNifty = false; - } - isDragging = false; - niftyOwnsDragging = false; - } - - boolean consumed = false; - if (forwardToNifty){ - consumed = nic.processMouseEvent(x, y, 0, buttonIndex, pressed); - if (consumed){ - evt.setConsumed(); - } - } - - // Mouse button pressed. Begin dragging - if (!wasPressed && pressed){ - isDragging = true; - niftyOwnsDragging = consumed; - } - } - - private void onKeyEventQueued(KeyInputEvent evt, NiftyInputConsumer nic) { - int code = evt.getKeyCode(); - - if (code == KeyInput.KEY_LSHIFT || code == KeyInput.KEY_RSHIFT) { - shiftDown = evt.isPressed(); - } else if (code == KeyInput.KEY_LCONTROL || code == KeyInput.KEY_RCONTROL) { - ctrlDown = evt.isPressed(); - } - - KeyboardInputEvent keyEvt = new KeyboardInputEvent(code, - evt.getKeyChar(), - evt.isPressed(), - shiftDown, - ctrlDown); - - if (nic.processKeyboardEvent(keyEvt)){ - evt.setConsumed(); - } - } - - public void onMouseMotionEvent(MouseMotionEvent evt) { - // Only forward the event if there's actual motion involved. - if (inputManager.isCursorVisible() && (evt.getDX() != 0 || - evt.getDY() != 0 || - evt.getDeltaWheel() != 0)){ - inputQueue.add(evt); - } - } - - public void onMouseButtonEvent(MouseButtonEvent evt) { - if (inputManager.isCursorVisible() && evt.getButtonIndex() >= 0 && evt.getButtonIndex() <= 2){ - inputQueue.add(evt); - } - } - - public void onJoyAxisEvent(JoyAxisEvent evt) { - } - - public void onJoyButtonEvent(JoyButtonEvent evt) { - } - - public void onKeyEvent(KeyInputEvent evt) { - inputQueue.add(evt); - } - - public void onTouchEvent(TouchEvent evt) { - inputQueue.add(evt); - } - - public void forwardEvents(NiftyInputConsumer nic) { - int queueSize = inputQueue.size(); - - for (int i = 0; i < queueSize; i++){ - InputEvent evt = inputQueue.get(i); - if (evt instanceof MouseMotionEvent){ - onMouseMotionEventQueued( (MouseMotionEvent)evt, nic); - }else if (evt instanceof MouseButtonEvent){ - onMouseButtonEventQueued( (MouseButtonEvent)evt, nic); - }else if (evt instanceof KeyInputEvent){ - onKeyEventQueued( (KeyInputEvent)evt, nic); - }else if (evt instanceof TouchEvent){ - onTouchEventQueued( (TouchEvent)evt, nic); - } - } - - inputQueue.clear(); - } - - -} +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.niftygui; + +import com.jme3.input.InputManager; +import com.jme3.input.KeyInput; +import com.jme3.input.RawInputListener; +import com.jme3.input.SoftTextDialogInput; +import com.jme3.input.controls.SoftTextDialogInputListener; +import com.jme3.input.event.*; +import com.jme3.system.JmeSystem; +import de.lessvoid.nifty.Nifty; +import de.lessvoid.nifty.NiftyInputConsumer; +import de.lessvoid.nifty.controls.TextField; +import de.lessvoid.nifty.controls.nullobjects.TextFieldNull; +import de.lessvoid.nifty.elements.Element; +import de.lessvoid.nifty.tools.resourceloader.NiftyResourceLoader; +import de.lessvoid.nifty.input.keyboard.KeyboardInputEvent; +import de.lessvoid.nifty.spi.input.InputSystem; +import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class InputSystemJme implements InputSystem, RawInputListener { + + private final ArrayList inputQueue = new ArrayList(); + private InputManager inputManager; + private boolean isDragging = false, niftyOwnsDragging = false; + private boolean pressed = false; + private int buttonIndex; + private int x, y; + private int height; + private boolean shiftDown = false; + private boolean ctrlDown = false; + private Nifty nifty; + + public InputSystemJme(InputManager inputManager) { + this.inputManager = inputManager; + } + + public void setResourceLoader(NiftyResourceLoader niftyResourceLoader) { + } + + public void setNifty(Nifty nifty) { + this.nifty = nifty; + } + + /** + * @param height The height of the viewport. Used to convert + * buttom-left origin to upper-left origin. + */ + public void setHeight(int height) { + this.height = height; + } + + public void setMousePosition(int x, int y) { + } + + public void beginInput() { + } + + public void endInput() { + boolean result = nifty.update(); + } + + private void onTouchEventQueued(TouchEvent evt, NiftyInputConsumer nic) { + boolean consumed = false; + + x = (int) evt.getX(); + y = (int) (height - evt.getY()); + + if (!inputManager.getSimulateMouse()) { + switch (evt.getType()) { + case DOWN: + consumed = nic.processMouseEvent(x, y, 0, 0, true); + isDragging = true; + niftyOwnsDragging = consumed; + if (consumed) { + evt.setConsumed(); + } + + break; + + case UP: + if (niftyOwnsDragging) { + consumed = nic.processMouseEvent(x, y, 0, 0, false); + if (consumed) { + evt.setConsumed(); + } + } + + isDragging = false; + niftyOwnsDragging = false; + + if (consumed) { + processSoftKeyboard(); + } + + break; + } + } + } + + private void onMouseMotionEventQueued(MouseMotionEvent evt, NiftyInputConsumer nic) { + x = evt.getX(); + y = height - evt.getY(); + nic.processMouseEvent(x, y, evt.getDeltaWheel(), buttonIndex, pressed); +// if (nic.processMouseEvent(niftyEvt) /*|| nifty.getCurrentScreen().isMouseOverElement()*/){ + // Do not consume motion events + //evt.setConsumed(); +// } + } + + private void onMouseButtonEventQueued(MouseButtonEvent evt, NiftyInputConsumer nic) { + boolean wasPressed = pressed; + boolean forwardToNifty = true; + + buttonIndex = evt.getButtonIndex(); + pressed = evt.isPressed(); + + // Mouse button raised. End dragging + if (wasPressed && !pressed) { + if (!niftyOwnsDragging) { + forwardToNifty = false; + } + isDragging = false; + niftyOwnsDragging = false; + } + + boolean consumed = false; + if (forwardToNifty) { + consumed = nic.processMouseEvent(x, y, 0, buttonIndex, pressed); + if (consumed) { + evt.setConsumed(); + } + } + + // Mouse button pressed. Begin dragging + if (!wasPressed && pressed) { + isDragging = true; + niftyOwnsDragging = consumed; + } + + if (consumed && pressed) { + processSoftKeyboard(); + } + + } + + private void onKeyEventQueued(KeyInputEvent evt, NiftyInputConsumer nic) { + int code = evt.getKeyCode(); + + if (code == KeyInput.KEY_LSHIFT || code == KeyInput.KEY_RSHIFT) { + shiftDown = evt.isPressed(); + } else if (code == KeyInput.KEY_LCONTROL || code == KeyInput.KEY_RCONTROL) { + ctrlDown = evt.isPressed(); + } + + KeyboardInputEvent keyEvt = new KeyboardInputEvent(code, + evt.getKeyChar(), + evt.isPressed(), + shiftDown, + ctrlDown); + + if (nic.processKeyboardEvent(keyEvt)) { + evt.setConsumed(); + } + } + + public void onMouseMotionEvent(MouseMotionEvent evt) { + // Only forward the event if there's actual motion involved. + if (inputManager.isCursorVisible() && (evt.getDX() != 0 + || evt.getDY() != 0 + || evt.getDeltaWheel() != 0)) { + inputQueue.add(evt); + } + } + + public void onMouseButtonEvent(MouseButtonEvent evt) { + if (inputManager.isCursorVisible() && evt.getButtonIndex() >= 0 && evt.getButtonIndex() <= 2) { + inputQueue.add(evt); + } + } + + public void onJoyAxisEvent(JoyAxisEvent evt) { + } + + public void onJoyButtonEvent(JoyButtonEvent evt) { + } + + public void onKeyEvent(KeyInputEvent evt) { + inputQueue.add(evt); + } + + public void onTouchEvent(TouchEvent evt) { + inputQueue.add(evt); + } + + public void forwardEvents(NiftyInputConsumer nic) { + int queueSize = inputQueue.size(); + + for (int i = 0; i < queueSize; i++) { + InputEvent evt = inputQueue.get(i); + if (evt instanceof MouseMotionEvent) { + onMouseMotionEventQueued((MouseMotionEvent) evt, nic); + } else if (evt instanceof MouseButtonEvent) { + onMouseButtonEventQueued((MouseButtonEvent) evt, nic); + } else if (evt instanceof KeyInputEvent) { + onKeyEventQueued((KeyInputEvent) evt, nic); + } else if (evt instanceof TouchEvent) { + onTouchEventQueued((TouchEvent) evt, nic); + } + } + + inputQueue.clear(); + } + + private void processSoftKeyboard() { + SoftTextDialogInput softTextDialogInput = JmeSystem.getSoftTextDialogInput(); + if (softTextDialogInput != null) { + + Element element = nifty.getCurrentScreen().getFocusHandler().getKeyboardFocusElement(); + if (element != null) { + final TextField textField = element.getNiftyControl(TextField.class); + if (textField != null && !(textField instanceof TextFieldNull)) { + Logger.getLogger(InputSystemJme.class.getName()).log(Level.INFO, "Current TextField: {0}", textField.getId()); + String initialValue = textField.getText(); + if (initialValue == null) { + initialValue = ""; + } + + softTextDialogInput.requestDialog(SoftTextDialogInput.TEXT_ENTRY_DIALOG, "Enter Text", initialValue, new SoftTextDialogInputListener() { + + public void onSoftText(int action, String text) { + if (action == SoftTextDialogInputListener.COMPLETE) { + textField.setText(text); + } + } + }); + } + } + } + + } +} diff --git a/engine/src/niftygui/com/jme3/niftygui/RenderDeviceJme.java b/engine/src/niftygui/com/jme3/niftygui/RenderDeviceJme.java index 8977ed6..1f36a97 100644 --- a/engine/src/niftygui/com/jme3/niftygui/RenderDeviceJme.java +++ b/engine/src/niftygui/com/jme3/niftygui/RenderDeviceJme.java @@ -29,7 +29,6 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - package com.jme3.niftygui; import com.jme3.font.BitmapText; @@ -60,140 +59,148 @@ import java.nio.FloatBuffer; import java.util.HashMap; public class RenderDeviceJme implements RenderDevice { - + private NiftyJmeDisplay display; private RenderManager rm; private Renderer r; - private HashMap textCacheLastFrame = new HashMap(); private HashMap textCacheCurrentFrame = new HashMap(); - private final Quad quad = new Quad(1, -1, true); private final Geometry quadGeom = new Geometry("nifty-quad", quad); private final Material niftyMat; - + private final Material niftyQuadMat; + private final Material niftyQuadGradMat; private boolean clipWasSet = false; private BlendMode blendMode = null; - private VertexBuffer quadDefaultTC = quad.getBuffer(Type.TexCoord); private VertexBuffer quadModTC = quadDefaultTC.clone(); private VertexBuffer quadColor; - private Matrix4f tempMat = new Matrix4f(); private ColorRGBA tempColor = new ColorRGBA(); - - public RenderDeviceJme(NiftyJmeDisplay display){ + + public RenderDeviceJme(NiftyJmeDisplay display) { this.display = display; - + quadColor = new VertexBuffer(Type.Color); quadColor.setNormalized(true); ByteBuffer bb = BufferUtils.createByteBuffer(4 * 4); quadColor.setupData(Usage.Stream, 4, Format.UnsignedByte, bb); quad.setBuffer(quadColor); - + quadModTC.setUsage(Usage.Stream); - - niftyMat = new Material(display.getAssetManager(), "Common/MatDefs/Nifty/Nifty.j3md"); + + //Color + texture color material for text and images + niftyMat = new Material(display.getAssetManager(), "Common/MatDefs/Nifty/NiftyTex.j3md"); niftyMat.getAdditionalRenderState().setDepthTest(false); + //Color material for uniform colored quads + niftyQuadMat = new Material(display.getAssetManager(), "Common/MatDefs/Nifty/NiftyQuad.j3md"); + niftyQuadMat.getAdditionalRenderState().setDepthTest(false); + + //vertex color only for gradient quads (although i didn't find a way in nifty to make a gradient using vertex color) + niftyQuadGradMat = new Material(display.getAssetManager(), "Common/MatDefs/Nifty/NiftyQuadGrad.j3md"); + niftyQuadGradMat.getAdditionalRenderState().setDepthTest(false); + } - + public void setResourceLoader(NiftyResourceLoader niftyResourceLoader) { } - - public void setRenderManager(RenderManager rm){ + + public void setRenderManager(RenderManager rm) { this.rm = rm; this.r = rm.getRenderer(); } // TODO: Cursor support - public MouseCursor createMouseCursor(String str, int x, int y){ + public MouseCursor createMouseCursor(String str, int x, int y) { return new MouseCursor() { + public void dispose() { } }; } - - public void enableMouseCursor(MouseCursor cursor){ + + public void enableMouseCursor(MouseCursor cursor) { } - - public void disableMouseCursor(){ + + public void disableMouseCursor() { } - + public RenderImage createImage(String filename, boolean linear) { return new RenderImageJme(filename, linear, display); } - + public RenderFont createFont(String filename) { return new RenderFontJme(filename, display); } - + public void beginFrame() { } - + public void endFrame() { HashMap temp = textCacheLastFrame; textCacheLastFrame = textCacheCurrentFrame; textCacheCurrentFrame = temp; textCacheCurrentFrame.clear(); - + // System.exit(1); } - + public int getWidth() { return display.getWidth(); } - + public int getHeight() { return display.getHeight(); } - + public void clear() { } - + public void setBlendMode(BlendMode blendMode) { - if (this.blendMode != blendMode){ + if (this.blendMode != blendMode) { this.blendMode = blendMode; } } - - private RenderState.BlendMode convertBlend(){ - if (blendMode == null) + + private RenderState.BlendMode convertBlend() { + if (blendMode == null) { return RenderState.BlendMode.Off; - else if (blendMode == BlendMode.BLEND) + } else if (blendMode == BlendMode.BLEND) { return RenderState.BlendMode.Alpha; - else if (blendMode == BlendMode.MULIPLY) + } else if (blendMode == BlendMode.MULIPLY) { return RenderState.BlendMode.Modulate; - else + } else { throw new UnsupportedOperationException(); + } } - - private int convertColor(Color color){ + + private int convertColor(Color color) { int color2 = 0; - color2 |= ((int)(255.0 * color.getAlpha())) << 24; - color2 |= ((int)(255.0 * color.getBlue())) << 16; - color2 |= ((int)(255.0 * color.getGreen())) << 8; - color2 |= ((int)(255.0 * color.getRed())); + color2 |= ((int) (255.0 * color.getAlpha())) << 24; + color2 |= ((int) (255.0 * color.getBlue())) << 16; + color2 |= ((int) (255.0 * color.getGreen())) << 8; + color2 |= ((int) (255.0 * color.getRed())); return color2; } - - private ColorRGBA convertColor(Color inColor, ColorRGBA outColor){ + + private ColorRGBA convertColor(Color inColor, ColorRGBA outColor) { return outColor.set(inColor.getRed(), inColor.getGreen(), inColor.getBlue(), inColor.getAlpha()); } - - private void setColor(Color color){ - ByteBuffer buf = (ByteBuffer) quadColor.getData(); - buf.rewind(); - - int color2 = convertColor(color); - buf.putInt(color2); - buf.putInt(color2); - buf.putInt(color2); - buf.putInt(color2); - - buf.flip(); - quadColor.updateData(buf); - } +// private void setColor(Color color) { +// ByteBuffer buf = (ByteBuffer) quadColor.getData(); +// buf.rewind(); +// +// int color2 = convertColor(color); +// buf.putInt(color2); +// buf.putInt(color2); +// buf.putInt(color2); +// buf.putInt(color2); +// +// buf.flip(); +// quadColor.updateData(buf); +// } + /** * * @param font @@ -205,22 +212,23 @@ public class RenderDeviceJme implements RenderDevice { * @deprecated use renderFont(RenderFont font, String str, int x, int y, Color color, float sizeX, float sizeY) instead */ @Deprecated - public void renderFont(RenderFont font, String str, int x, int y, Color color, float size){ + public void renderFont(RenderFont font, String str, int x, int y, Color color, float size) { renderFont(font, str, x, y, color, size, size); } - + @Override - public void renderFont(RenderFont font, String str, int x, int y, Color color, float sizeX, float sizeY){ - //TODO find out what the f1 param is for - if (str.length() == 0) + public void renderFont(RenderFont font, String str, int x, int y, Color color, float sizeX, float sizeY) { + if (str.length() == 0) { return; - - if (font instanceof RenderFontNull) + } + + if (font instanceof RenderFontNull) { return; - + } + RenderFontJme jmeFont = (RenderFontJme) font; - String key = font+str+color.getColorString(); + String key = font + str + color.getColorString(); BitmapText text = textCacheLastFrame.get(key); if (text == null) { text = jmeFont.createText(); @@ -228,166 +236,149 @@ public class RenderDeviceJme implements RenderDevice { text.updateLogicalState(0); } textCacheCurrentFrame.put(key, text); - - niftyMat.setColor("Color", convertColor(color, tempColor)); - niftyMat.setBoolean("UseTex", true); + + niftyMat.setColor("Color", convertColor(color, tempColor)); niftyMat.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha); // niftyMat.getAdditionalRenderState().setBlendMode(convertBlend()); text.setMaterial(niftyMat); - - float width = text.getLineWidth(); - float height = text.getLineHeight(); - - float x0 = x + 0.5f * width * (1f - sizeX); - float y0 = y + 0.5f * height * (1f - sizeY); - + tempMat.loadIdentity(); - tempMat.setTranslation(x0, getHeight() - y0, 0); + tempMat.setTranslation(x, getHeight() - y, 0); tempMat.setScale(sizeX, sizeY, 0); - + rm.setWorldMatrix(tempMat); text.render(rm); - + // System.out.println("renderFont"); } - + public void renderImage(RenderImage image, int x, int y, int w, int h, - int srcX, int srcY, int srcW, int srcH, - Color color, float scale, - int centerX, int centerY){ + int srcX, int srcY, int srcW, int srcH, + Color color, float scale, + int centerX, int centerY) { RenderImageJme jmeImage = (RenderImageJme) image; Texture2D texture = jmeImage.getTexture(); - + niftyMat.getAdditionalRenderState().setBlendMode(convertBlend()); - niftyMat.setColor("Color", ColorRGBA.White); - niftyMat.setTexture("Texture", texture); - niftyMat.setBoolean("UseTex", true); - setColor(color); - - float imageWidth = jmeImage.getWidth(); + niftyMat.setColor("Color", convertColor(color, tempColor)); + niftyMat.setTexture("Texture", texture); + //setColor(color); + + float imageWidth = jmeImage.getWidth(); float imageHeight = jmeImage.getHeight(); FloatBuffer texCoords = (FloatBuffer) quadModTC.getData(); - + float startX = srcX / imageWidth; float startY = srcY / imageHeight; - float endX = startX + (srcW / imageWidth); - float endY = startY + (srcH / imageHeight); - + float endX = startX + (srcW / imageWidth); + float endY = startY + (srcH / imageHeight); + startY = 1f - startY; - endY = 1f - endY; - + endY = 1f - endY; + texCoords.rewind(); texCoords.put(startX).put(startY); - texCoords.put(endX) .put(startY); - texCoords.put(endX) .put(endY); + texCoords.put(endX).put(startY); + texCoords.put(endX).put(endY); texCoords.put(startX).put(endY); texCoords.flip(); quadModTC.updateData(texCoords); - + quad.clearBuffer(Type.TexCoord); quad.setBuffer(quadModTC); - + float x0 = centerX + (x - centerX) * scale; float y0 = centerY + (y - centerY) * scale; - + tempMat.loadIdentity(); tempMat.setTranslation(x0, getHeight() - y0, 0); tempMat.setScale(w * scale, h * scale, 0); - + rm.setWorldMatrix(tempMat); niftyMat.render(quadGeom, rm); // // System.out.println("renderImage (Sub)"); } - + public void renderImage(RenderImage image, int x, int y, int width, int height, - Color color, float imageScale){ - + Color color, float imageScale) { + RenderImageJme jmeImage = (RenderImageJme) image; - + niftyMat.getAdditionalRenderState().setBlendMode(convertBlend()); - niftyMat.setColor("Color", ColorRGBA.White); - niftyMat.setTexture("Texture", jmeImage.getTexture()); - niftyMat.setBoolean("UseTex", true); - setColor(color); - + niftyMat.setColor("Color", convertColor(color, tempColor)); + niftyMat.setTexture("Texture", jmeImage.getTexture()); + //setColor(color); + quad.clearBuffer(Type.TexCoord); quad.setBuffer(quadDefaultTC); - - float x0 = x + 0.5f * width * (1f - imageScale); + + float x0 = x + 0.5f * width * (1f - imageScale); float y0 = y + 0.5f * height * (1f - imageScale); - + tempMat.loadIdentity(); tempMat.setTranslation(x0, getHeight() - y0, 0); tempMat.setScale(width * imageScale, height * imageScale, 0); - + rm.setWorldMatrix(tempMat); niftyMat.render(quadGeom, rm); // // System.out.println("renderImage"); } - - public void renderQuad(int x, int y, int width, int height, Color color){ - niftyMat.getAdditionalRenderState().setBlendMode(convertBlend()); - niftyMat.setColor("Color", ColorRGBA.White); - niftyMat.clearParam("Texture"); - niftyMat.setBoolean("UseTex", false); - setColor(color); - - tempMat.loadIdentity(); - tempMat.setTranslation(x, getHeight() - y, 0); - tempMat.setScale(width, height, 0); - - rm.setWorldMatrix(tempMat); - niftyMat.render(quadGeom, rm); - + + public void renderQuad(int x, int y, int width, int height, Color color) { + if (color.getAlpha() > 0) { + niftyQuadMat.getAdditionalRenderState().setBlendMode(convertBlend()); + niftyQuadMat.setColor("Color", convertColor(color, tempColor)); + + tempMat.loadIdentity(); + tempMat.setTranslation(x, getHeight() - y, 0); + tempMat.setScale(width, height, 0); + + rm.setWorldMatrix(tempMat); + niftyQuadMat.render(quadGeom, rm); + } // System.out.println("renderQuad (Solid)"); } - + public void renderQuad(int x, int y, int width, int height, - Color topLeft, Color topRight, Color bottomRight, Color bottomLeft) { + Color topLeft, Color topRight, Color bottomRight, Color bottomLeft) { ByteBuffer buf = (ByteBuffer) quadColor.getData(); buf.rewind(); buf.putInt(convertColor(topRight)); buf.putInt(convertColor(topLeft)); - + buf.putInt(convertColor(bottomLeft)); buf.putInt(convertColor(bottomRight)); buf.flip(); quadColor.updateData(buf); - niftyMat.getAdditionalRenderState().setBlendMode(convertBlend()); - niftyMat.setColor("Color", ColorRGBA.White); - niftyMat.clearParam("Texture"); - niftyMat.setBoolean("UseTex", false); - + niftyQuadGradMat.getAdditionalRenderState().setBlendMode(convertBlend()); + tempMat.loadIdentity(); tempMat.setTranslation(x, getHeight() - y, 0); tempMat.setScale(width, height, 0); - + rm.setWorldMatrix(tempMat); - niftyMat.render(quadGeom, rm); + niftyQuadGradMat.render(quadGeom, rm); // // System.out.println("renderQuad (Grad)"); } - - public void enableClip(int x0, int y0, int x1, int y1){ + + public void enableClip(int x0, int y0, int x1, int y1) { // System.out.println("enableClip"); clipWasSet = true; r.setClipRect(x0, getHeight() - y1, x1 - x0, y1 - y0); } - + public void disableClip() { // System.out.println("disableClip"); - if (clipWasSet){ + if (clipWasSet) { r.clearClipRect(); clipWasSet = false; } } - - - } -- cgit v1.2.3