Explorar el Código

Refactor Android system
* Minor clean in context creation
* Remove AndroidGLSurfaceView (it wasn't doing anything)
* Delete AndroidTimer. Now android will be using NanoTimer

shadowislord hace 11 años
padre
commit
18b9ef5540

+ 2 - 2
jme3-android/src/main/java/com/jme3/app/AndroidHarness.java

@@ -6,6 +6,7 @@ import android.content.DialogInterface;
 import android.content.pm.ActivityInfo;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.NinePatchDrawable;
+import android.opengl.GLSurfaceView;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.*;
@@ -21,7 +22,6 @@ import com.jme3.input.android.AndroidSensorJoyInput;
 import com.jme3.input.controls.TouchListener;
 import com.jme3.input.controls.TouchTrigger;
 import com.jme3.input.event.TouchEvent;
-import com.jme3.renderer.android.AndroidGLSurfaceView;
 import com.jme3.system.AppSettings;
 import com.jme3.system.SystemListener;
 import com.jme3.system.android.AndroidConfigChooser.ConfigType;
@@ -195,7 +195,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
      */
     protected int screenOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR;
     protected OGLESContext ctx;
-    protected AndroidGLSurfaceView view = null;
+    protected GLSurfaceView view = null;
     protected boolean isGLThreadPaused = true;
     protected ImageView splashImageView = null;
     protected FrameLayout frameLayout = null;

+ 3 - 3
jme3-android/src/main/java/com/jme3/input/android/AndroidInputHandler.java

@@ -32,6 +32,7 @@
 
 package com.jme3.input.android;
 
+import android.opengl.GLSurfaceView;
 import android.os.Build;
 import android.view.View;
 import com.jme3.input.RawInputListener;
@@ -41,7 +42,6 @@ import com.jme3.input.event.KeyInputEvent;
 import com.jme3.input.event.MouseButtonEvent;
 import com.jme3.input.event.MouseMotionEvent;
 import com.jme3.input.event.TouchEvent;
-import com.jme3.renderer.android.AndroidGLSurfaceView;
 import com.jme3.system.AppSettings;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.logging.Level;
@@ -67,7 +67,7 @@ public class AndroidInputHandler implements TouchInput {
     
     
     // Internal
-    private AndroidGLSurfaceView view;
+    private GLSurfaceView view;
     private AndroidTouchHandler touchHandler;
     private AndroidKeyHandler keyHandler;
     private AndroidGestureHandler gestureHandler;
@@ -112,7 +112,7 @@ public class AndroidInputHandler implements TouchInput {
         if (gestureHandler != null) {
             gestureHandler.setView(view);
         }
-        this.view = (AndroidGLSurfaceView)view;
+        this.view = (GLSurfaceView)view;
     }
     
     public View getView() {

+ 0 - 26
jme3-android/src/main/java/com/jme3/renderer/android/AndroidGLSurfaceView.java

@@ -1,26 +0,0 @@
-package com.jme3.renderer.android;
- 
-import android.content.Context;
-import android.opengl.GLSurfaceView;
-import android.util.AttributeSet;
-import java.util.logging.Logger;
- 
-/**
- * <code>AndroidGLSurfaceView</code> is derived from GLSurfaceView
- * @author iwgeric
- *
- */
-public class AndroidGLSurfaceView extends GLSurfaceView {
- 
-    private final static Logger logger = Logger.getLogger(AndroidGLSurfaceView.class.getName());
- 
-    public AndroidGLSurfaceView(Context ctx, AttributeSet attribs) {
-        super(ctx, attribs);
-    }
- 
-    public AndroidGLSurfaceView(Context ctx) {
-        super(ctx);
-    }
- 
- 
-}

+ 0 - 96
jme3-android/src/main/java/com/jme3/system/android/AndroidTimer.java

@@ -1,96 +0,0 @@
-/*
- * 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.android;
-
-import com.jme3.system.Timer;
-
-/**
- * <code>AndroidTimer</code> is a System.nanoTime implementation of <code>Timer</code>.
- */
-public class AndroidTimer extends Timer {
-    
-    //private static final long TIMER_RESOLUTION = 1000L;
-    //private static final float INVERSE_TIMER_RESOLUTION = 1f/1000L;
-    private static final long TIMER_RESOLUTION = 1000000000L;
-    private static final float INVERSE_TIMER_RESOLUTION = 1f/1000000000L;
-    
-    private long startTime;
-    private long previousTime;
-    private float tpf;
-    private float fps;
-    
-    public AndroidTimer() {
-        //startTime = System.currentTimeMillis();
-        startTime = System.nanoTime();
-    }
-
-    /**
-     * Returns the time in seconds. The timer starts
-     * at 0.0 seconds.
-     *
-     * @return the current time in seconds
-     */
-    @Override
-    public float getTimeInSeconds() {
-        return getTime() * INVERSE_TIMER_RESOLUTION;
-    }
-
-    public long getTime() {
-        //return System.currentTimeMillis() - startTime;
-        return System.nanoTime() - startTime;
-    }
-
-    public long getResolution() {
-        return TIMER_RESOLUTION;
-    }
-
-    public float getFrameRate() {
-        return fps;
-    }
-
-    public float getTimePerFrame() {
-        return tpf;
-    }
-
-    public void update() {
-        tpf = (getTime() - previousTime) * (1.0f / TIMER_RESOLUTION);
-        fps = 1.0f / tpf;
-        previousTime = getTime();
-    }
-    
-    public void reset() {
-        //startTime = System.currentTimeMillis();
-        startTime = System.nanoTime();
-        previousTime = getTime();
-    }
-}

+ 15 - 38
jme3-android/src/main/java/com/jme3/system/android/OGLESContext.java

@@ -47,13 +47,11 @@ import android.view.ViewGroup.LayoutParams;
 import android.widget.EditText;
 import android.widget.FrameLayout;
 import com.jme3.input.*;
-import com.jme3.input.android.AndroidInput;
 import com.jme3.input.android.AndroidSensorJoyInput;
 import com.jme3.input.android.AndroidInputHandler;
 import com.jme3.input.controls.SoftTextDialogInputListener;
 import com.jme3.input.dummy.DummyKeyInput;
 import com.jme3.input.dummy.DummyMouseInput;
-import com.jme3.renderer.android.AndroidGLSurfaceView;
 import com.jme3.renderer.android.OGLESShaderRenderer;
 import com.jme3.system.*;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -80,11 +78,6 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer, SoftTex
     protected AndroidInputHandler androidInput;
     protected int minFrameDuration = 0;                   // No FPS cap
     protected JoyInput androidSensorJoyInput = null;
-    /**
-     * EGL_RENDERABLE_TYPE: EGL_OPENGL_ES_BIT = OpenGL ES 1.0 |
-     * EGL_OPENGL_ES2_BIT = OpenGL ES 2.0
-     */
-    protected int clientOpenGLESVersion = 1;
 
     public OGLESContext() {
     }
@@ -103,12 +96,17 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer, SoftTex
      *
      * @return GLSurfaceView The newly created view
      */
-    public AndroidGLSurfaceView createView() {
-        AndroidGLSurfaceView view;
-        int buildVersion = Build.VERSION.SDK_INT;
-
+    public GLSurfaceView createView() {
+        Context appContext = JmeAndroidSystem.getActivity().getApplication();
+        
+        ActivityManager am = (ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);
+        ConfigurationInfo info = am.getDeviceConfigurationInfo();
+        if (info.reqGlEsVersion < 0x20000) {
+            throw new UnsupportedOperationException("OpenGL ES 2.0 is not supported on this device");
+        }
+        
         // Start to set up the view
-        view = new AndroidGLSurfaceView(JmeAndroidSystem.getActivity().getApplication());
+        GLSurfaceView view = new GLSurfaceView(appContext);
         if (androidInput == null) {
             androidInput = new AndroidInputHandler();
         }
@@ -117,20 +115,11 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer, SoftTex
 
         // setEGLContextClientVersion must be set before calling setRenderer
         // this means it cannot be set in AndroidConfigChooser (too late)
-        int rawOpenGLESVersion = getOpenGLESVersion();
-//        logger.log(Level.FINE, "clientOpenGLESVersion {0}.{1}",
-//                new Object[]{clientOpenGLESVersion>>16, clientOpenGLESVersion<<16});
-        if (rawOpenGLESVersion < 0x20000) {
-            throw new UnsupportedOperationException("OpenGL ES 2.0 is not supported on this device");
-        } else {
-            clientOpenGLESVersion = 2;
-            view.setEGLContextClientVersion(clientOpenGLESVersion);
-        }
+        view.setEGLContextClientVersion(2);
 
         view.setFocusableInTouchMode(true);
         view.setFocusable(true);
-        view.getHolder().setType(SurfaceHolder.SURFACE_TYPE_GPU);
-
+        
         // setFormat must be set before AndroidConfigChooser is called by the surfaceview.
         // if setFormat is called after ConfigChooser is called, then execution
         // stops at the setFormat call without a crash.
@@ -160,25 +149,13 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer, SoftTex
         // Not destroying and recreating the EGL context 
         // will help with resume time by reusing the existing context to avoid
         // reloading all the OpenGL objects.
-        if (buildVersion >= 11) {
+        if (Build.VERSION.SDK_INT >= 11) {
             view.setPreserveEGLContextOnPause(true);
         }
 
         return view;
     }
-    /**
-     * Get the  OpenGL ES version
-     * @return version returns the int value of the GLES version
-     */
-    public int getOpenGLESVersion() {
-        ActivityManager am =
-                (ActivityManager) JmeAndroidSystem.getActivity().getApplication().getSystemService(Context.ACTIVITY_SERVICE);
-        ConfigurationInfo info = am.getDeviceConfigurationInfo();
-        logger.log(Level.FINE, "OpenGL Version {0}:", info.getGlEsVersion());
-        return info.reqGlEsVersion;
-//        return (info.reqGlEsVersion >= 0x20000);
-    }
-
+    
     // renderer:initialize
     @Override
     public void onSurfaceCreated(GL10 gl, EGLConfig cfg) {
@@ -207,7 +184,7 @@ public class OGLESContext implements JmeContext, GLSurfaceView.Renderer, SoftTex
             }
         });
 
-        timer = new AndroidTimer();
+        timer = new NanoTimer();
         renderer = new OGLESShaderRenderer();
 
         renderer.initialize();