diff --git a/engine/src/ios/com/jme3/system/ios/IGLESContext.java b/engine/src/ios/com/jme3/system/ios/IGLESContext.java new file mode 100644 index 000000000..d96962244 --- /dev/null +++ b/engine/src/ios/com/jme3/system/ios/IGLESContext.java @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2009-2012 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.system.ios; + +import com.jme3.input.*; +import com.jme3.input.controls.SoftTextDialogInputListener; +import com.jme3.input.dummy.DummyKeyInput; +import com.jme3.input.dummy.DummyMouseInput; +import com.jme3.renderer.ios.IGLESShaderRenderer; +import com.jme3.system.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class IGLESContext implements JmeContext { + + private static final Logger logger = Logger.getLogger(IGLESContext.class.getName()); + protected final AtomicBoolean created = new AtomicBoolean(false); + protected final AtomicBoolean renderable = new AtomicBoolean(false); + protected final AtomicBoolean needClose = new AtomicBoolean(false); + protected AppSettings settings = new AppSettings(true); + protected boolean autoFlush = true; + + /* + * >= OpenGL ES 2.0 (iOS) + */ + protected IGLESShaderRenderer renderer; + protected Timer timer; + protected SystemListener listener; + protected int minFrameDuration = 0; // No FPS cap + + public IGLESContext() { + logger.log(Level.FINE, "IGLESContext constructor"); + } + + @Override + public Type getType() { + return Type.Display; + } + + @Override + public void setSettings(AppSettings settings) { + logger.log(Level.FINE, "IGLESContext setSettings"); + this.settings.copyFrom(settings); + /* + if (androidInput != null) { + androidInput.loadSettings(settings); + } + */ + + } + + @Override + public void setSystemListener(SystemListener listener) { + logger.log(Level.FINE, "IGLESContext setSystemListener"); + this.listener = listener; + } + + @Override + public AppSettings getSettings() { + return settings; + } + + @Override + public com.jme3.renderer.Renderer getRenderer() { + logger.log(Level.FINE, "IGLESContext getRenderer"); + return renderer; + } + + @Override + public MouseInput getMouseInput() { + return new DummyMouseInput(); + } + + @Override + public KeyInput getKeyInput() { + return new DummyKeyInput(); + } + + @Override + public JoyInput getJoyInput() { + /* + if (androidSensorJoyInput == null) { + androidSensorJoyInput = new AndroidSensorJoyInput(); + } + return androidSensorJoyInput; + */ + return null;// new DummySensorJoyInput(); + } + + @Override + public TouchInput getTouchInput() { + //return androidInput; + return null;// new DummyTouchInput(); + } + + @Override + public Timer getTimer() { + return timer; + } + + @Override + public void setTitle(String title) { + } + + @Override + public boolean isCreated() { + logger.log(Level.FINE, "IGLESContext isCreated"); + return created.get(); + } + + @Override + public void setAutoFlushFrames(boolean enabled) { + this.autoFlush = enabled; + } + + @Override + public boolean isRenderable() { + logger.log(Level.FINE, "IGLESContext isRenderable"); + return true;// renderable.get(); + } + + @Override + public void create(boolean waitFor) { + logger.log(Level.FINE, "IGLESContext create"); + renderer = new IGLESShaderRenderer(); + timer = new NanoTimer(); + +//synchronized (createdLock){ + created.set(true); + //createdLock.notifyAll(); + //} + + listener.initialize(); + + if (waitFor) { + //waitFor(true); + } + logger.log(Level.FINE, "IGLESContext created"); + } + + public void create() { + create(false); + } + + @Override + public void restart() { + } + + @Override + public void destroy(boolean waitFor) { + logger.log(Level.FINE, "IGLESContext destroy"); + listener.destroy(); + needClose.set(true); + if (waitFor) { + //waitFor(false); + } + } + + public void destroy() { + destroy(true); + } + + protected void waitFor(boolean createdVal) { + while (renderable.get() != createdVal) { + try { + Thread.sleep(10); + } catch (InterruptedException ex) { + } + } + } +} \ No newline at end of file diff --git a/engine/src/ios/com/jme3/system/ios/IosHarness.java b/engine/src/ios/com/jme3/system/ios/IosHarness.java index 5c111c585..f3b10196e 100644 --- a/engine/src/ios/com/jme3/system/ios/IosHarness.java +++ b/engine/src/ios/com/jme3/system/ios/IosHarness.java @@ -51,4 +51,11 @@ public abstract class IosHarness extends ObjcNativeObject { public abstract void appReactivated(); public abstract void appClosed(); + + public abstract void appUpdate(); + + public abstract void appDraw(); + + public abstract void appReshape(int width, int height); + } \ No newline at end of file diff --git a/engine/src/ios/com/jme3/system/ios/JmeIosSystem.java b/engine/src/ios/com/jme3/system/ios/JmeIosSystem.java index 935dc8e77..fc5965a45 100644 --- a/engine/src/ios/com/jme3/system/ios/JmeIosSystem.java +++ b/engine/src/ios/com/jme3/system/ios/JmeIosSystem.java @@ -89,7 +89,7 @@ public class JmeIosSystem extends JmeSystemDelegate { ctx = new NullContext(); ctx.setSettings(settings); } else { - ctx = new NullContext(); + ctx = new IGLESContext(); ctx.setSettings(settings); } return ctx;