diff --git a/engine/src/android/com/jme3/system/android/AndroidConfigChooser.java b/engine/src/android/com/jme3/system/android/AndroidConfigChooser.java
index c4cf581ed..ecd4f64a6 100644
--- a/engine/src/android/com/jme3/system/android/AndroidConfigChooser.java
+++ b/engine/src/android/com/jme3/system/android/AndroidConfigChooser.java
@@ -75,8 +75,25 @@ public class AndroidConfigChooser implements EGLConfigChooser
if (type == ConfigType.BEST)
{
- ComponentSizeChooser compChooser = new ComponentSizeChooser(8, 8, 8, 8, 16, 0);
+ ComponentSizeChooser compChooser = new ComponentSizeChooser(8, 8, 8, 8, 32, 0);
choosenConfig = compChooser.chooseConfig(egl, display);
+
+ if (choosenConfig == null)
+ {
+ compChooser = new ComponentSizeChooser(8, 8, 8, 0, 32, 0);
+ choosenConfig = compChooser.chooseConfig(egl, display);
+ if (choosenConfig == null)
+ {
+ compChooser = new ComponentSizeChooser(8, 8, 8, 8, 16, 0);
+ choosenConfig = compChooser.chooseConfig(egl, display);
+ if (choosenConfig == null)
+ {
+ compChooser = new ComponentSizeChooser(8, 8, 8, 0, 16, 0);
+ choosenConfig = compChooser.chooseConfig(egl, display);
+ }
+ }
+ }
+
logger.info("JME3 using best EGL configuration available here: ");
}
else
@@ -103,10 +120,11 @@ public class AndroidConfigChooser implements EGLConfigChooser
}
}
+
private int getPixelFormat(EGLConfig conf, EGLDisplay display, EGL10 egl)
{
int[] value = new int[1];
- int result = PixelFormat.RGB_565;
+ int result = PixelFormat.RGB_565;
egl.eglGetConfigAttrib(display, conf, EGL10.EGL_RED_SIZE, value);
if (value[0] == 8)
@@ -129,7 +147,8 @@ public class AndroidConfigChooser implements EGLConfigChooser
logger.info("Using PixelFormat " + result);
}
- return result;
+ //return result; TODO Test pixelformat
+ return PixelFormat.TRANSPARENT;
}
private int getOpenGLVersion(EGLConfig conf, EGLDisplay display, EGL10 egl)
@@ -181,30 +200,6 @@ public class AndroidConfigChooser implements EGLConfigChooser
egl.eglGetConfigAttrib(display, conf, EGL10.EGL_SURFACE_TYPE, value);
logger.info(String.format("EGL_SURFACE_TYPE = %d", value[0] ) );
}
-
-
-
-
- // Getter - Setter
-
- public EGLConfig getBestConfig()
- {
- return bestConfig;
- }
-
- public void setBestConfig(EGLConfig bestConfig)
- {
- this.bestConfig = bestConfig;
- }
- public EGLConfig getFastestConfig()
- {
- return fastestConfig;
- }
-
- public void setFastestConfig(EGLConfig fastestConfig)
- {
- this.fastestConfig = fastestConfig;
- }
public int getClientOpenGLESVersion()
{
@@ -225,8 +220,11 @@ public class AndroidConfigChooser implements EGLConfigChooser
private abstract class BaseConfigChooser implements EGLConfigChooser
{
+ private boolean bClientOpenGLESVersionSet;
+
public BaseConfigChooser(int[] configSpec)
{
+ bClientOpenGLESVersionSet = false;
mConfigSpec = filterConfigSpec(configSpec);
}
@@ -240,9 +238,11 @@ public class AndroidConfigChooser implements EGLConfigChooser
int numConfigs = num_config[0];
- if (numConfigs <= 0) {
- throw new IllegalArgumentException(
- "No configs match configSpec");
+ if (numConfigs <= 0)
+ {
+ //throw new IllegalArgumentException("No configs match configSpec");
+
+ return null;
}
EGLConfig[] configs = new EGLConfig[numConfigs];
@@ -251,9 +251,9 @@ public class AndroidConfigChooser implements EGLConfigChooser
throw new IllegalArgumentException("eglChooseConfig#2 failed");
}
EGLConfig config = chooseConfig(egl, display, configs);
- if (config == null) {
- throw new IllegalArgumentException("No config chosen");
- }
+ //if (config == null) {
+ // throw new IllegalArgumentException("No config chosen");
+ //}
return config;
}
@@ -264,7 +264,7 @@ public class AndroidConfigChooser implements EGLConfigChooser
private int[] filterConfigSpec(int[] configSpec)
{
- if (clientOpenGLESVersion != 2) {
+ if (bClientOpenGLESVersionSet == true) {
return configSpec;
}
/* We know none of the subclasses define EGL_RENDERABLE_TYPE.
@@ -276,6 +276,9 @@ public class AndroidConfigChooser implements EGLConfigChooser
newConfigSpec[len-1] = EGL10.EGL_RENDERABLE_TYPE;
newConfigSpec[len] = 4; /* EGL_OPENGL_ES2_BIT */
newConfigSpec[len+1] = EGL10.EGL_NONE;
+
+ bClientOpenGLESVersionSet = true;
+
return newConfigSpec;
}
}
diff --git a/engine/src/android/jme3test/android/AboutActivity.java b/engine/src/android/jme3test/android/AboutActivity.java
deleted file mode 100644
index 5af463fe0..000000000
--- a/engine/src/android/jme3test/android/AboutActivity.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package jme3test.android;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-import android.content.Intent;
-
-import android.view.View;
-import android.view.MenuInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-
-import android.widget.TextView;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.CheckBox;
-import android.widget.TableLayout;
-import android.widget.LinearLayout;
-import android.widget.TableRow;
-
-import android.hardware.SensorManager;
-//import android.hardware.SensorListener;
-
-import jme3test.android.AndroidActivity;
-
-import java.net.URI;
-
-public class AboutActivity extends Activity {
-
- private static final java.util.logging.Logger logger = java.util.logging.Logger.getLogger(AboutActivity.class.getName());
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- logger.info("onCreate(" + savedInstanceState + ")");
-
- super.onCreate(savedInstanceState);
-
- //setContentView(R.layout.about);
- }
-
- @Override
- public void onDestroy() {
- logger.info("onDestroy()");
- super.onDestroy();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- }
-}
diff --git a/engine/src/android/jme3test/android/AndroidActivity.java b/engine/src/android/jme3test/android/AndroidActivity.java
deleted file mode 100644
index b3cecd533..000000000
--- a/engine/src/android/jme3test/android/AndroidActivity.java
+++ /dev/null
@@ -1,149 +0,0 @@
-
-/*
- *
- * Android Activity for OpenGL ES2 based tests
- * requires Android 2.2+
- *
- * created: Mon Nov 8 00:08:07 EST 2010
- */
-package jme3test.android;
-
-import android.app.Activity;
-import android.content.res.Resources;
-import android.opengl.GLSurfaceView;
-import android.os.Bundle;
-import android.view.Window;
-import android.view.WindowManager;
-
-import com.jme3.system.AppSettings;
-import com.jme3.system.JmeSystem;
-import com.jme3.system.android.OGLESContext;
-
-import com.jme3.app.Application;
-import com.jme3.app.SimpleApplication;
-
-public class AndroidActivity extends Activity {
-
- private final static java.util.logging.Logger logger = java.util.logging.Logger.getLogger(AndroidActivity.class.getName());
- private OGLESContext ctx;
- private GLSurfaceView view;
- private boolean useVA = false;
- private boolean verboseLogging = false;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
-
- super.onCreate(savedInstanceState);
-
- JmeSystem.setResources(getResources());
-
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
-
- AppSettings settings = new AppSettings(true);
-
- String testClassName = getIntent().getStringExtra(AndroidActivity.class.getName() + ".TEST_CLASS_NAME");
-
- logger.info("test class name: [" + testClassName + "]");
-
- String appClass = (testClassName != null ? testClassName : "jme3test.android.SimpleTexturedTest");
-
- useVA = getIntent().getBooleanExtra(AndroidActivity.class.getName() + ".USE_VA", false);
-
- logger.info("USE_VA -> [" + useVA + "]");
-
- settings.putBoolean("USE_VA", useVA);
-
- verboseLogging = getIntent().getBooleanExtra(AndroidActivity.class.getName() + ".VERBOSE_LOGGING", false);
-
- settings.putBoolean("VERBOSE_LOGGING", verboseLogging);
-
- Application app = null;
-
- try {
- Class extends Application> clazz = (Class extends Application>) Class.forName(
- appClass);
-
- app = clazz.newInstance();
- /*
- app = (Application) java.lang.reflect.Proxy.newProxyInstance(
- this.getClass().getClassLoader(),
- new Class[] {Class.forName(appClass)},
-
- new java.lang.reflect.InvocationHandler() {
- public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws Throwable {
- if (
- method.getName().equals("loadFPSText") ||
- method.getName().equals("loadStatsView")
- ) {
- logger.info("ignoring method: [" + method + "]");
- return null;
- }
-
- return method.invoke(proxy, args);
- }
- }
- );
- */
-
-
- if (app instanceof SimpleApplication) {
- ((SimpleApplication) app).setShowSettings(false);
- }
-
- logger.info("setting settings ...");
- app.setSettings(settings);
- logger.info("setting settings ... done.");
-
- logger.info("starting app ...");
- app.start();
- logger.info("starting app ... done.");
-
- if (app instanceof SimpleApplication) {
- ((SimpleApplication) app).getGuiNode().detachAllChildren();
- }
-
- logger.info("creating context ...");
- ctx = (OGLESContext) app.getContext();
- logger.info("creating context ... done.");
-
- ctx.setSettings(settings);
-
- logger.info("creating view ...");
- view = ctx.createView(this);
- logger.info("creating view ... done.");
-
- logger.info("setting content view ...");
- setContentView(view);
- logger.info("setting content done ...");
-
- } catch (Throwable exception) {
- logger.warning("exception: " + exception);
- exception.printStackTrace(System.err);
- }
- }
-
- @Override
- protected void onResume() {
- logger.info("onResume ...");
- super.onResume();
- logger.info("view.onResume ...");
-
- view.onResume();
-
- logger.info("view.onResume ... done.");
- logger.info("onResume ... done.");
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- view.onPause();
- }
-// @Override
-// protected void onDestroy(){
-// super.onDestroy();
-// Debug.stopMethodTracing();
-// }
-}
diff --git a/engine/src/android/jme3test/android/AndroidManifest.xml b/engine/src/android/jme3test/android/AndroidManifest.xml
new file mode 100644
index 000000000..a1f8f3fbf
--- /dev/null
+++ b/engine/src/android/jme3test/android/AndroidManifest.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/engine/src/android/jme3test/android/DemoAndroidHarness.java b/engine/src/android/jme3test/android/DemoAndroidHarness.java
new file mode 100644
index 000000000..10b33d388
--- /dev/null
+++ b/engine/src/android/jme3test/android/DemoAndroidHarness.java
@@ -0,0 +1,55 @@
+package jme3test.android;
+
+import android.content.pm.ActivityInfo;
+import android.os.Bundle;
+
+import com.jme3.app.AndroidHarness;
+import com.jme3.system.android.AndroidConfigChooser.ConfigType;
+
+public class DemoAndroidHarness extends AndroidHarness
+{
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ // Set the application class to run
+ // First Extract the bundle from intent
+ Bundle bundle = getIntent().getExtras();
+
+ //Next extract the values using the key as
+ appClass = bundle.getString("APPCLASSNAME");
+
+
+ String eglConfig = bundle.getString("EGLCONFIG");
+ if (eglConfig.equals("Best"))
+ {
+ eglConfigType = ConfigType.BEST;
+ }
+ else if (eglConfig.equals("Legacy"))
+ {
+ eglConfigType = ConfigType.LEGACY;
+ }
+ else
+ {
+ eglConfigType = ConfigType.FASTEST;
+ }
+
+
+ if (bundle.getBoolean("VERBOSE"))
+ {
+ eglConfigVerboseLogging = true;
+ }
+ else
+ {
+ eglConfigVerboseLogging = false;
+ }
+
+
+ exitDialogTitle = "Close Demo?";
+ exitDialogMessage = "Press Yes";
+
+ screenOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
+
+ super.onCreate(savedInstanceState);
+ }
+
+}
diff --git a/engine/src/android/jme3test/android/DemoLaunchAdapter.java b/engine/src/android/jme3test/android/DemoLaunchAdapter.java
new file mode 100644
index 000000000..3c74c8da6
--- /dev/null
+++ b/engine/src/android/jme3test/android/DemoLaunchAdapter.java
@@ -0,0 +1,73 @@
+package jme3test.android;
+
+import java.util.List;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.View.OnClickListener;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+
+/**
+ * The view adapter which gets a list of LaunchEntries and displaqs them
+ * @author larynx
+ *
+ */
+public class DemoLaunchAdapter extends BaseAdapter implements OnClickListener
+{
+
+ private Context context;
+
+ private List listDemos;
+
+ public DemoLaunchAdapter(Context context, List listDemos) {
+ this.context = context;
+ this.listDemos = listDemos;
+ }
+
+ public int getCount() {
+ return listDemos.size();
+ }
+
+ public Object getItem(int position) {
+ return listDemos.get(position);
+ }
+
+ public long getItemId(int position) {
+ return position;
+ }
+
+ public View getView(int position, View convertView, ViewGroup viewGroup) {
+ DemoLaunchEntry entry = listDemos.get(position);
+ if (convertView == null) {
+ LayoutInflater inflater = (LayoutInflater) context
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ convertView = inflater.inflate(R.layout.demo_row, null);
+ }
+ TextView tvDemoName = (TextView) convertView.findViewById(R.id.tvDemoName);
+ tvDemoName.setText(entry.getName());
+
+ TextView tvDescription = (TextView) convertView.findViewById(R.id.tvDescription);
+ tvDescription.setText(entry.getDescription());
+
+ return convertView;
+ }
+
+ @Override
+ public void onClick(View view) {
+ DemoLaunchEntry entry = (DemoLaunchEntry) view.getTag();
+
+
+
+
+ }
+
+ private void showDialog(DemoLaunchEntry entry) {
+ // Create and show your dialog
+ // Depending on the Dialogs button clicks delete it or do nothing
+ }
+
+}
+
diff --git a/engine/src/android/jme3test/android/DemoLaunchEntry.java b/engine/src/android/jme3test/android/DemoLaunchEntry.java
new file mode 100644
index 000000000..e23d5ebe7
--- /dev/null
+++ b/engine/src/android/jme3test/android/DemoLaunchEntry.java
@@ -0,0 +1,38 @@
+package jme3test.android;
+
+/**
+ * Name (=appClass) and Description of one demo launch inside the main apk
+ * @author larynx
+ *
+ */
+public class DemoLaunchEntry
+{
+ private String name;
+ private String description;
+
+ /**
+ * @param name
+ * @param description
+ */
+ public DemoLaunchEntry(String name, String description) {
+ super();
+ this.name = name;
+ this.description = description;
+ }
+
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public String getDescription() {
+ return description;
+ }
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+
+
+}
diff --git a/engine/src/android/jme3test/android/DemoMainActivity.java b/engine/src/android/jme3test/android/DemoMainActivity.java
new file mode 100644
index 000000000..b7433a744
--- /dev/null
+++ b/engine/src/android/jme3test/android/DemoMainActivity.java
@@ -0,0 +1,136 @@
+package jme3test.android;
+import java.util.ArrayList;
+import java.util.List;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+import android.widget.Spinner;
+import android.widget.Toast;
+import android.widget.AdapterView.OnItemClickListener;
+
+public class DemoMainActivity extends Activity {
+
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+
+ final Intent myIntent = new Intent(DemoMainActivity.this, DemoAndroidHarness.class);
+
+ //Next create the bundle and initialize it
+ final Bundle bundle = new Bundle();
+
+
+ final Spinner spinnerConfig = (Spinner) findViewById(R.id.spinnerConfig);
+ ArrayAdapter adapterDropDownConfig = ArrayAdapter.createFromResource(
+ this, R.array.eglconfig_array, android.R.layout.simple_spinner_item);
+ adapterDropDownConfig.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ spinnerConfig.setAdapter(adapterDropDownConfig);
+
+
+ spinnerConfig.setOnItemSelectedListener(new OnItemSelectedListener() {
+
+ @Override
+ public void onItemSelected(AdapterView> parent,
+ View view, int pos, long id) {
+ Toast.makeText(parent.getContext(), "Set EGLConfig " +
+ parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
+ //Add the parameters to bundle as
+ bundle.putString("EGLCONFIG", parent.getItemAtPosition(pos).toString());
+ }
+
+ public void onNothingSelected(AdapterView parent) {
+ // Do nothing.
+ }
+ });
+
+
+ final Spinner spinnerLogging = (Spinner) findViewById(R.id.spinnerLogging);
+ ArrayAdapter adapterDropDownLogging = ArrayAdapter.createFromResource(
+ this, R.array.logging_array, android.R.layout.simple_spinner_item);
+ adapterDropDownLogging.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ spinnerLogging.setAdapter(adapterDropDownLogging);
+
+
+ spinnerLogging.setOnItemSelectedListener(new OnItemSelectedListener() {
+
+ @Override
+ public void onItemSelected(AdapterView> parent,
+ View view, int pos, long id) {
+ Toast.makeText(parent.getContext(), "Set Logging " +
+ parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
+
+ //Add the parameters to bundle as
+ bundle.putBoolean("VERBOSE", parent.getItemAtPosition(pos).toString().equals("Verbose"));
+ }
+
+ public void onNothingSelected(AdapterView parent) {
+ // Do nothing.
+ }
+ });
+
+
+ ListView list = (ListView) findViewById(R.id.ListView01);
+ list.setClickable(true);
+
+ final List listDemos = new ArrayList();
+
+ listDemos.add(new DemoLaunchEntry("jme3test.android.SimpleTexturedTest", "An field of textured boxes rotating"));
+ listDemos.add(new DemoLaunchEntry("jme3test.android.TestSkyLoadingLagoon", "Sky box demonstration with jpg"));
+ listDemos.add(new DemoLaunchEntry("jme3test.android.TestSkyLoadingPrimitives", "Sky box demonstration with png"));
+ listDemos.add(new DemoLaunchEntry("jme3test.android.TestBumpModel", "Shows a bump mapped well with a moving light"));
+ listDemos.add(new DemoLaunchEntry("jme3test.android.TestNormalMapping", "Shows a normal mapped sphere"));
+ listDemos.add(new DemoLaunchEntry("jme3test.android.TestUnshadedModel", "Shows an unshaded model of the sphere"));
+ listDemos.add(new DemoLaunchEntry("jme3test.android.TestMovingParticle", "Demonstrates particle effects"));
+ listDemos.add(new DemoLaunchEntry("jme3test.android.TestAmbient", "Positional sound - You sit in a dark cave under a waterfall"));
+
+ //listDemos.add(new DemoLaunchEntry("jme3test.effect.TestParticleEmitter", ""));
+ //listDemos.add(new DemoLaunchEntry("jme3test.effect.TestPointSprite", ""));
+ //listDemos.add(new DemoLaunchEntry("jme3test.light.TestLightRadius", ""));
+ listDemos.add(new DemoLaunchEntry("jme3test.android.TestMotionPath", "Shows cinematics - see a teapot on its journey - model loading needs a long time - just let it load, looks like freezed"));
+ //listDemos.add(new DemoLaunchEntry("com.jme3.androiddemo.TestSimpleWater", "Post processors - not working correctly due to missing framebuffer support, looks interresting :)"));
+ //listDemos.add(new DemoLaunchEntry("jme3test.model.TestHoverTank", ""));
+ //listDemos.add(new DemoLaunchEntry("jme3test.niftygui.TestNiftyGui", ""));
+ //listDemos.add(new DemoLaunchEntry("com.jme3.androiddemo.TestNiftyGui", ""));
+
+
+ DemoLaunchAdapter adapterList = new DemoLaunchAdapter(this, listDemos);
+
+ list.setOnItemClickListener(new OnItemClickListener() {
+
+ @Override
+ public void onItemClick(AdapterView> arg0, View view, int position, long index) {
+ System.out.println("onItemClick");
+ showToast(listDemos.get(position).getName());
+
+
+ //Add the parameters to bundle as
+ bundle.putString("APPCLASSNAME", listDemos.get(position).getName());
+
+ //Add this bundle to the intent
+ myIntent.putExtras(bundle);
+
+ //Start the JME3 app harness activity
+ DemoMainActivity.this.startActivity(myIntent);
+
+ }
+ });
+
+ list.setAdapter(adapterList);
+ }
+
+ private void showToast(String message) {
+ Toast.makeText(this, message, Toast.LENGTH_LONG).show();
+ }
+}
+
diff --git a/engine/src/android/jme3test/android/R.java b/engine/src/android/jme3test/android/R.java
new file mode 100644
index 000000000..ffb1f3702
--- /dev/null
+++ b/engine/src/android/jme3test/android/R.java
@@ -0,0 +1,46 @@
+/* AUTO-GENERATED FILE. DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found. It
+ * should not be modified by hand.
+ */
+
+package jme3test.android;
+
+public final class R {
+ public static final class array {
+ public static final int eglconfig_array=0x7f060000;
+ public static final int logging_array=0x7f060001;
+ }
+ public static final class attr {
+ }
+ public static final class drawable {
+ public static final int icon=0x7f020000;
+ }
+ public static final class id {
+ public static final int LinearLayout01=0x7f070000;
+ public static final int LinearLayout02=0x7f070002;
+ public static final int ListView01=0x7f070009;
+ public static final int TextView01=0x7f070003;
+ public static final int spinnerConfig=0x7f070006;
+ public static final int spinnerLogging=0x7f070008;
+ public static final int tvConfig=0x7f070005;
+ public static final int tvDemoName=0x7f070001;
+ public static final int tvDescription=0x7f070004;
+ public static final int tvLogging=0x7f070007;
+ }
+ public static final class layout {
+ public static final int demo_row=0x7f030000;
+ public static final int main=0x7f030001;
+ }
+ public static final class raw {
+ public static final int oddbounce=0x7f040000;
+ }
+ public static final class string {
+ public static final int app_name=0x7f050000;
+ public static final int eglconfig_prompt=0x7f050001;
+ public static final int eglconfig_text=0x7f050002;
+ public static final int logging_prompt=0x7f050003;
+ public static final int logging_text=0x7f050004;
+ }
+}
diff --git a/engine/src/android/jme3test/android/SimpleTexturedTest.java b/engine/src/android/jme3test/android/SimpleTexturedTest.java
index fb0c70bbe..82c6596e2 100644
--- a/engine/src/android/jme3test/android/SimpleTexturedTest.java
+++ b/engine/src/android/jme3test/android/SimpleTexturedTest.java
@@ -4,8 +4,10 @@
*
* created: Mon Nov 8 00:08:22 EST 2010
*/
+
package jme3test.android;
+
import java.util.List;
import java.util.ArrayList;
@@ -33,95 +35,130 @@ import com.jme3.util.TangentBinormalGenerator;
import jme3tools.converters.model.ModelConverter;
-public class SimpleTexturedTest extends SimpleApplication {
+import java.awt.font.*;
- private static final java.util.logging.Logger logger = java.util.logging.Logger.getLogger(SimpleTexturedTest.class.getName());
- private Node spheresContainer = new Node("spheres-container");
- private boolean lightingEnabled = true;
- private boolean texturedEnabled = true;
- private boolean spheres = true;
-
- @Override
- public void simpleInitApp() {
-
- /*
- * GUI rendering is broken on Android right now and prevents the main view from rendering.
- * Detaching all children lets the main view to be rendered.
- */
-
- guiNode.detachAllChildren();
-
- Mesh shape = null;
-
- if (spheres) {
- shape = new Sphere(16, 16, .5f);
- } else {
- shape = new Box(Vector3f.ZERO, 0.3f, 0.3f, 0.3f);
- }
-
- // ModelConverter.optimize(geom);
-
- Texture texture = assetManager.loadTexture(new TextureKey("icons/textured.png"));
-
- Material material = null;
-
- if (texturedEnabled) {
- if (lightingEnabled) {
- material = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
- material.setBoolean("VertexLighting", true);
- material.setFloat("Shininess", 127);
- material.setBoolean("LowQuality", true);
- material.setTexture("DiffuseMap", texture);
- } else {
- material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
- material.setTexture("ColorMap", texture);
- }
- } else {
- material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
- material.setColor("Color", ColorRGBA.Red);
- }
-
- TangentBinormalGenerator.generate(shape);
-
- for (int y = -1; y < 2; y++) {
- for (int x = -1; x < 2; x++) {
- // int x = 0;
- // int y = 0;
- Geometry geomClone = new Geometry("geometry-" + y + "-" + x, shape);
- geomClone.setMaterial(material);
- geomClone.setLocalTranslation(x, y, 0);
+public class SimpleTexturedTest extends SimpleApplication {
+
+ private static final java.util.logging.Logger logger = java.util.logging.Logger.getLogger(SimpleTexturedTest.class.getName());
+
+
+ private Node spheresContainer = new Node("spheres-container");
+
+
+ private boolean lightingEnabled = true;
+ private boolean texturedEnabled = true;
+ private boolean spheres = true;
+
+ @Override
+ public void simpleInitApp() {
+
+ //flyCam.setRotationSpeed(0.01f);
+
+
+ Mesh shapeSphere = null;
+ Mesh shapeBox = null;
+
+
+ shapeSphere = new Sphere(16, 16, .5f);
+ shapeBox = new Box(Vector3f.ZERO, 0.3f, 0.3f, 0.3f);
+
+
+ // ModelConverter.optimize(geom);
+
+ Texture texture = assetManager.loadTexture(new TextureKey("Interface/Logo/Monkey.jpg"));
+ Texture textureMonkey = assetManager.loadTexture(new TextureKey("Interface/Logo/Monkey.jpg"));
+
+ Material material = null;
+ Material materialMonkey = null;
+
+ if (texturedEnabled) {
+ if (lightingEnabled) {
+ material = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
+ material.setBoolean("VertexLighting", true);
+ material.setFloat("Shininess", 127);
+ material.setBoolean("LowQuality", true);
+ material.setTexture("DiffuseMap", texture);
+
+ materialMonkey = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
+ materialMonkey.setBoolean("VertexLighting", true);
+ materialMonkey.setFloat("Shininess", 127);
+ materialMonkey.setBoolean("LowQuality", true);
+ materialMonkey.setTexture("DiffuseMap", textureMonkey);
+
+ } else {
+ material = new Material(assetManager, "Common/MatDefs/Misc/SimpleTextured.j3md");
+ material.setTexture("ColorMap", texture);
+
+ materialMonkey = new Material(assetManager, "Common/MatDefs/Misc/SimpleTextured.j3md");
+ materialMonkey.setTexture("ColorMap", textureMonkey);
+ }
+ } else {
+ material = new Material(assetManager, "Common/MatDefs/Misc/SolidColor.j3md");
+ material.setColor("Color", ColorRGBA.Red);
+ materialMonkey = new Material(assetManager, "Common/MatDefs/Misc/SolidColor.j3md");
+ materialMonkey.setColor("Color", ColorRGBA.Red);
+ }
+
+ TangentBinormalGenerator.generate(shapeSphere);
+ TangentBinormalGenerator.generate(shapeBox);
+
+ int iFlipper = 0;
+ for (int y = -1; y < 2; y++) {
+ for (int x = -1; x < 2; x++){
+ Geometry geomClone = null;
+
+ //iFlipper++;
+ if (iFlipper % 2 == 0)
+ {
+ geomClone = new Geometry("geometry-" + y + "-" + x, shapeBox);
+ }
+ else
+ {
+ geomClone = new Geometry("geometry-" + y + "-" + x, shapeSphere);
+ }
+ if (iFlipper % 3 == 0)
+ {
+ geomClone.setMaterial(materialMonkey);
+ }
+ else
+ {
+ geomClone.setMaterial(material);
+ }
+ geomClone.setLocalTranslation(x, y, 0);
+
// Transform t = geom.getLocalTransform().clone();
// Transform t2 = geomClone.getLocalTransform().clone();
// t.combineWithParent(t2);
// geomClone.setLocalTransform(t);
- spheresContainer.attachChild(geomClone);
- }
- }
+ spheresContainer.attachChild(geomClone);
+ }
+ }
+
+ spheresContainer.setLocalTranslation(new Vector3f(0, 0, -4f));
+ spheresContainer.setLocalScale(2.0f);
- spheresContainer.setLocalTranslation(new Vector3f(0, 0, -4f));
- spheresContainer.setLocalScale(2.0f);
+ rootNode.attachChild(spheresContainer);
- rootNode.attachChild(spheresContainer);
+ PointLight pointLight = new PointLight();
- PointLight pointLight = new PointLight();
+ pointLight.setColor(new ColorRGBA(0.7f, 0.7f, 1.0f, 1.0f));
- pointLight.setColor(new ColorRGBA(0.7f, 0.7f, 1.0f, 1.0f));
+ pointLight.setPosition(new Vector3f(0f, 0f, 0f));
+ pointLight.setRadius(8);
- pointLight.setPosition(new Vector3f(0f, 0f, 0f));
- pointLight.setRadius(8);
+ rootNode.addLight(pointLight);
+ }
- rootNode.addLight(pointLight);
- }
+ @Override
+ public void simpleUpdate(float tpf) {
- @Override
- public void simpleUpdate(float tpf) {
+ if (secondCounter == 0)
+ logger.info("Frames per second: " + timer.getFrameRate());
- if (secondCounter == 0) {
- logger.info("Frames per second: " + timer.getFrameRate());
- }
+ spheresContainer.rotate(0.2f * tpf, 0.4f * tpf, 0.8f * tpf);
+ }
- spheresContainer.rotate(0.2f * tpf, 0.4f * tpf, 0.8f * tpf);
- }
}
+
diff --git a/engine/src/android/jme3test/android/Test.java b/engine/src/android/jme3test/android/Test.java
deleted file mode 100644
index 95ca78c87..000000000
--- a/engine/src/android/jme3test/android/Test.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package jme3test.android;
-
-import com.jme3.app.SimpleApplication;
-import com.jme3.asset.TextureKey;
-import com.jme3.material.Material;
-import com.jme3.math.Transform;
-import com.jme3.scene.Geometry;
-import com.jme3.scene.shape.Sphere;
-import com.jme3.texture.Texture;
-import jme3tools.converters.model.ModelConverter;
-
-public class Test extends SimpleApplication {
-
- @Override
- public void simpleInitApp() {
- Sphere s = new Sphere(8, 8, .5f);
- Geometry geom = new Geometry("sphere", s);
- // ModelConverter.optimize(geom);
-
- Material mat = new Material(assetManager, "plain_texture.j3md");
- Texture tex = assetManager.loadTexture(new TextureKey("monkey.j3i"));
- mat.setTexture("ColorMap", tex);
-// geom.setMaterial(mat);
-
- for (int y = -1; y < 2; y++) {
- for (int x = -1; x < 2; x++) {
- Geometry geomClone = new Geometry("geom", s);
- geomClone.setMaterial(mat);
- geomClone.setLocalTranslation(x, y, 0);
-
- Transform t = geom.getLocalTransform().clone();
- Transform t2 = geomClone.getLocalTransform().clone();
- t.combineWithParent(t2);
- geomClone.setLocalTransform(t);
-
- rootNode.attachChild(geomClone);
- }
- }
- }
-}
diff --git a/engine/src/android/jme3test/android/TestAmbient.java b/engine/src/android/jme3test/android/TestAmbient.java
new file mode 100644
index 000000000..0b8f0ea98
--- /dev/null
+++ b/engine/src/android/jme3test/android/TestAmbient.java
@@ -0,0 +1,106 @@
+/*
+ * 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 jme3test.android;
+
+import android.app.Activity;
+import android.media.AudioManager;
+import android.media.SoundPool;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.asset.DesktopAssetManager;
+import com.jme3.audio.AudioNode;
+import com.jme3.audio.Listener;
+//import com.jme3.audio.PointAudioSource;
+import com.jme3.math.FastMath;
+import com.jme3.math.Vector3f;
+import com.jme3.system.AppSettings;
+import com.jme3.system.JmeSystem;
+
+public class TestAmbient extends SimpleApplication {
+
+ private AudioNode footsteps, beep;
+ private AudioNode nature, waves;
+
+ SoundPool soundPool;
+
+// private PointAudioSource waves;
+ private float time = 0;
+ private float nextTime = 1;
+
+ public static void main(String[] args){
+ TestAmbient test = new TestAmbient();
+ test.start();
+ }
+
+
+ @Override
+ public void simpleInitApp()
+ {
+ /*
+ footsteps = new AudioNode(audioRenderer, assetManager, "Sound/Effects/Foot steps.ogg", true);
+
+ footsteps.setPositional(true);
+ footsteps.setLocalTranslation(new Vector3f(4, -1, 30));
+ footsteps.setMaxDistance(5);
+ footsteps.setRefDistance(1);
+ footsteps.setLooping(true);
+
+ beep = new AudioNode(audioRenderer, assetManager, "Sound/Effects/Beep.ogg", true);
+ beep.setVolume(3);
+ beep.setLooping(true);
+
+ audioRenderer.playSourceInstance(footsteps);
+ audioRenderer.playSource(beep);
+ */
+
+ waves = new AudioNode(audioRenderer, assetManager, "Sound/Environment/Ocean Waves.ogg", true);
+ waves.setPositional(true);
+
+ nature = new AudioNode(audioRenderer, assetManager, "Sound/Environment/Nature.ogg", true);
+
+ waves.setLocalTranslation(new Vector3f(4, -1, 30));
+ waves.setMaxDistance(5);
+ waves.setRefDistance(1);
+
+ nature.setVolume(3);
+ audioRenderer.playSourceInstance(waves);
+ audioRenderer.playSource(nature);
+ }
+
+ @Override
+ public void simpleUpdate(float tpf)
+ {
+
+ }
+
+}
diff --git a/engine/src/android/jme3test/android/TestBumpModel.java b/engine/src/android/jme3test/android/TestBumpModel.java
new file mode 100644
index 000000000..ec9506517
--- /dev/null
+++ b/engine/src/android/jme3test/android/TestBumpModel.java
@@ -0,0 +1,96 @@
+/*
+ * 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 jme3test.android;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.asset.AssetKey;
+import com.jme3.light.AmbientLight;
+import com.jme3.light.DirectionalLight;
+import com.jme3.light.PointLight;
+import com.jme3.material.Material;
+import com.jme3.math.ColorRGBA;
+import com.jme3.math.FastMath;
+import com.jme3.math.Vector3f;
+import com.jme3.scene.Geometry;
+import com.jme3.scene.Spatial;
+import com.jme3.scene.plugins.ogre.OgreMeshKey;
+import com.jme3.scene.shape.Sphere;
+import com.jme3.util.TangentBinormalGenerator;
+
+public class TestBumpModel extends SimpleApplication {
+
+ float angle;
+ PointLight pl;
+ Spatial lightMdl;
+
+ public static void main(String[] args){
+ TestBumpModel app = new TestBumpModel();
+ app.start();
+ }
+
+ @Override
+ public void simpleInitApp() {
+ Spatial signpost = (Spatial) assetManager.loadAsset(new OgreMeshKey("Models/Sign Post/Sign Post.mesh.xml"));
+ signpost.setMaterial( (Material) assetManager.loadMaterial("Models/Sign Post/Sign Post.j3m"));
+ TangentBinormalGenerator.generate(signpost);
+ rootNode.attachChild(signpost);
+
+ lightMdl = new Geometry("Light", new Sphere(10, 10, 0.1f));
+ lightMdl.setMaterial( (Material) assetManager.loadMaterial("Common/Materials/RedColor.j3m"));
+ rootNode.attachChild(lightMdl);
+
+ // flourescent main light
+ pl = new PointLight();
+ pl.setColor(new ColorRGBA(0.88f, 0.92f, 0.95f, 1.0f));
+ rootNode.addLight(pl);
+
+ AmbientLight al = new AmbientLight();
+ al.setColor(new ColorRGBA(0.44f, 0.40f, 0.20f, 1.0f));
+ rootNode.addLight(al);
+
+ DirectionalLight dl = new DirectionalLight();
+ dl.setDirection(new Vector3f(1,-1,-1).normalizeLocal());
+ dl.setColor(new ColorRGBA(0.92f, 0.85f, 0.8f, 1.0f));
+ rootNode.addLight(dl);
+ }
+
+ @Override
+ public void simpleUpdate(float tpf){
+ angle += tpf * 0.25f;
+ angle %= FastMath.TWO_PI;
+
+ pl.setPosition(new Vector3f(FastMath.cos(angle) * 6f, 3f, FastMath.sin(angle) * 6f));
+ lightMdl.setLocalTranslation(pl.getPosition());
+ }
+
+}
diff --git a/engine/src/android/jme3test/android/TestMovingParticle.java b/engine/src/android/jme3test/android/TestMovingParticle.java
new file mode 100644
index 000000000..c34c3994e
--- /dev/null
+++ b/engine/src/android/jme3test/android/TestMovingParticle.java
@@ -0,0 +1,104 @@
+/*
+ * 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 jme3test.android;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.effect.ParticleEmitter;
+import com.jme3.effect.ParticleMesh.Type;
+import com.jme3.effect.shapes.EmitterSphereShape;
+import com.jme3.input.KeyInput;
+import com.jme3.input.controls.ActionListener;
+import com.jme3.input.controls.InputListener;
+import com.jme3.input.controls.KeyTrigger;
+import com.jme3.light.AmbientLight;
+import com.jme3.material.Material;
+import com.jme3.math.ColorRGBA;
+import com.jme3.math.FastMath;
+import com.jme3.math.Vector3f;
+
+/**
+ * Particle that moves in a circle.
+ *
+ * @author Kirill Vainer
+ */
+public class TestMovingParticle extends SimpleApplication {
+
+ private ParticleEmitter emit;
+ private float angle = 0;
+
+ public static void main(String[] args) {
+ TestMovingParticle app = new TestMovingParticle();
+ app.start();
+ }
+
+ @Override
+ public void simpleInitApp() {
+ emit = new ParticleEmitter("Emitter", Type.Triangle, 300);
+ emit.setGravity(0, 0, 0);
+ emit.setVelocityVariation(1);
+ emit.setLowLife(1);
+ emit.setHighLife(1);
+ emit.setInitialVelocity(new Vector3f(0, .5f, 0));
+ emit.setImagesX(15);
+ Material mat = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md");
+ mat.setTexture("Texture", assetManager.loadTexture("Effects/Smoke/Smoke.png"));
+ emit.setMaterial(mat);
+
+ rootNode.attachChild(emit);
+
+ AmbientLight al = new AmbientLight();
+ al.setColor(new ColorRGBA(0.84f, 0.80f, 0.80f, 1.0f));
+ rootNode.addLight(al);
+
+
+
+ inputManager.addListener(new ActionListener() {
+
+ public void onAction(String name, boolean isPressed, float tpf) {
+ if ("setNum".equals(name) && isPressed) {
+ emit.setNumParticles(1000);
+ }
+ }
+ }, "setNum");
+
+ inputManager.addMapping("setNum", new KeyTrigger(KeyInput.KEY_SPACE));
+ }
+
+ @Override
+ public void simpleUpdate(float tpf) {
+ angle += tpf;
+ angle %= FastMath.TWO_PI;
+ float x = FastMath.cos(angle) * 2;
+ float y = FastMath.sin(angle) * 2;
+ emit.setLocalTranslation(x, 0, y);
+ }
+}
diff --git a/engine/src/android/jme3test/android/TestNormalMapping.java b/engine/src/android/jme3test/android/TestNormalMapping.java
new file mode 100644
index 000000000..2dde1a486
--- /dev/null
+++ b/engine/src/android/jme3test/android/TestNormalMapping.java
@@ -0,0 +1,99 @@
+/*
+ * 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 jme3test.android;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.light.AmbientLight;
+import com.jme3.light.DirectionalLight;
+import com.jme3.light.PointLight;
+import com.jme3.material.Material;
+import com.jme3.math.ColorRGBA;
+import com.jme3.math.FastMath;
+import com.jme3.math.Vector3f;
+import com.jme3.scene.Geometry;
+import com.jme3.scene.Spatial;
+import com.jme3.scene.shape.Sphere;
+import com.jme3.util.TangentBinormalGenerator;
+
+public class TestNormalMapping extends SimpleApplication {
+
+ float angle;
+ PointLight pl;
+ Spatial lightMdl;
+
+ public static void main(String[] args){
+ TestNormalMapping app = new TestNormalMapping();
+ app.start();
+ }
+
+ @Override
+ public void simpleInitApp() {
+ Sphere sphMesh = new Sphere(32, 32, 1);
+ sphMesh.setTextureMode(Sphere.TextureMode.Projected);
+ sphMesh.updateGeometry(32, 32, 1, false, false);
+ TangentBinormalGenerator.generate(sphMesh);
+
+ Geometry sphere = new Geometry("Rock Ball", sphMesh);
+ Material mat = assetManager.loadMaterial("Textures/Terrain/Pond/Pond.j3m");
+ sphere.setMaterial(mat);
+ rootNode.attachChild(sphere);
+
+ lightMdl = new Geometry("Light", new Sphere(10, 10, 0.1f));
+ lightMdl.setMaterial(assetManager.loadMaterial("Common/Materials/RedColor.j3m"));
+ rootNode.attachChild(lightMdl);
+
+ pl = new PointLight();
+ pl.setColor(ColorRGBA.White);
+ pl.setPosition(new Vector3f(0f, 0f, 4f));
+ rootNode.addLight(pl);
+
+ AmbientLight al = new AmbientLight();
+ al.setColor(new ColorRGBA(0.44f, 0.40f, 0.20f, 1.0f));
+ rootNode.addLight(al);
+
+ DirectionalLight dl = new DirectionalLight();
+ dl.setDirection(new Vector3f(1,-1,-1).normalizeLocal());
+ dl.setColor(new ColorRGBA(0.92f, 0.85f, 0.8f, 1.0f));
+ rootNode.addLight(dl);
+ }
+
+ @Override
+ public void simpleUpdate(float tpf){
+ angle += tpf * 0.25f;
+ angle %= FastMath.TWO_PI;
+
+ pl.setPosition(new Vector3f(FastMath.cos(angle) * 4f, 0.5f, FastMath.sin(angle) * 4f));
+ lightMdl.setLocalTranslation(pl.getPosition());
+ }
+
+}
diff --git a/engine/src/android/jme3test/android/TestSceneLoading.java b/engine/src/android/jme3test/android/TestSceneLoading.java
deleted file mode 100644
index 73d8fb26c..000000000
--- a/engine/src/android/jme3test/android/TestSceneLoading.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package jme3test.android;
-
-import com.jme3.app.SimpleApplication;
-import com.jme3.math.Quaternion;
-import com.jme3.math.Vector3f;
-import com.jme3.scene.Node;
-import com.jme3.scene.Spatial;
-import com.jme3.scene.Spatial.CullHint;
-
-public class TestSceneLoading extends SimpleApplication {
-
- private void setState(Spatial s) {
- s.setCullHint(CullHint.Never);
- if (s instanceof Node) {
- Node n = (Node) s;
- for (int i = 0; i < n.getQuantity(); i++) {
- Spatial s2 = n.getChild(i);
- setState(s2);
- }
- }
- }
-
- public void simpleInitApp() {
- /* XXX: does not compile */
-
- /* Spatial scene = inputManager.loadModel("FINAL_LEVEL2.j3o");
- // setState(scene);
- rootNode.attachChild(scene);
-
- cam.setLocation(new Vector3f(-18.059685f, 34.64228f, 4.5048084f));
- cam.setRotation(new Quaternion(0.22396432f, 0.5235024f, -0.1448922f, 0.8091919f));
- cam.update();
- */
- }
-}
diff --git a/engine/src/android/jme3test/android/TestSkyLoadingLagoon.java b/engine/src/android/jme3test/android/TestSkyLoadingLagoon.java
new file mode 100644
index 000000000..506d0fa02
--- /dev/null
+++ b/engine/src/android/jme3test/android/TestSkyLoadingLagoon.java
@@ -0,0 +1,71 @@
+/*
+ * 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 jme3test.android;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.scene.Spatial;
+import com.jme3.texture.Texture;
+import com.jme3.util.SkyFactory;
+import com.jme3.util.android.AndroidSkyFactory;
+
+public class TestSkyLoadingLagoon extends SimpleApplication {
+
+ public static void main(String[] args){
+ TestSkyLoadingLagoon app = new TestSkyLoadingLagoon();
+ app.start();
+ }
+
+ public void simpleInitApp() {
+
+ Texture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg");
+ Texture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg");
+ Texture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg");
+ Texture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg");
+ Texture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg");
+ Texture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg");
+
+
+ /*
+ Texture west = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_x.png");
+ Texture east = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_x.png");
+ Texture north = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_z.png");
+ Texture south = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_z.png");
+ Texture up = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_y.png");
+ Texture down = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_y.png");
+ */
+
+ Spatial sky = AndroidSkyFactory.createSky(assetManager, west, east, north, south, up, down);
+ rootNode.attachChild(sky);
+ }
+
+}
diff --git a/engine/src/android/jme3test/android/TestSkyLoadingPrimitives.java b/engine/src/android/jme3test/android/TestSkyLoadingPrimitives.java
new file mode 100644
index 000000000..78add3c1d
--- /dev/null
+++ b/engine/src/android/jme3test/android/TestSkyLoadingPrimitives.java
@@ -0,0 +1,69 @@
+/*
+ * 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 jme3test.android;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.scene.Spatial;
+import com.jme3.texture.Texture;
+import com.jme3.util.SkyFactory;
+import com.jme3.util.android.AndroidSkyFactory;
+
+public class TestSkyLoadingPrimitives extends SimpleApplication {
+
+ public static void main(String[] args){
+ TestSkyLoadingPrimitives app = new TestSkyLoadingPrimitives();
+ app.start();
+ }
+
+ public void simpleInitApp() {
+ /*
+ Texture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg");
+ Texture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg");
+ Texture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg");
+ Texture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg");
+ Texture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg");
+ Texture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg");
+ */
+
+ Texture west = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_x.png");
+ Texture east = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_x.png");
+ Texture north = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_z.png");
+ Texture south = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_z.png");
+ Texture up = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_y.png");
+ Texture down = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_y.png");
+
+ Spatial sky = AndroidSkyFactory.createSky(assetManager, west, east, north, south, up, down);
+ rootNode.attachChild(sky);
+ }
+
+}
diff --git a/engine/src/android/jme3test/android/TestUnshadedModel.java b/engine/src/android/jme3test/android/TestUnshadedModel.java
new file mode 100644
index 000000000..4e4ff8c09
--- /dev/null
+++ b/engine/src/android/jme3test/android/TestUnshadedModel.java
@@ -0,0 +1,44 @@
+package jme3test.android;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.light.AmbientLight;
+import com.jme3.light.PointLight;
+import com.jme3.material.Material;
+import com.jme3.math.ColorRGBA;
+import com.jme3.math.Vector3f;
+import com.jme3.scene.Geometry;
+import com.jme3.scene.shape.Sphere;
+import com.jme3.util.TangentBinormalGenerator;
+
+public class TestUnshadedModel extends SimpleApplication {
+
+ public static void main(String[] args){
+ TestUnshadedModel app = new TestUnshadedModel();
+ app.start();
+ }
+
+ @Override
+ public void simpleInitApp() {
+ Sphere sphMesh = new Sphere(32, 32, 1);
+ sphMesh.setTextureMode(Sphere.TextureMode.Projected);
+ sphMesh.updateGeometry(32, 32, 1, false, false);
+ TangentBinormalGenerator.generate(sphMesh);
+
+ Geometry sphere = new Geometry("Rock Ball", sphMesh);
+ Material mat = assetManager.loadMaterial("Textures/Terrain/Pond/Pond.j3m");
+ mat.setColor("Ambient", ColorRGBA.DarkGray);
+ mat.setColor("Diffuse", ColorRGBA.White);
+ mat.setBoolean("UseMaterialColors", true);
+ sphere.setMaterial(mat);
+ rootNode.attachChild(sphere);
+
+ PointLight pl = new PointLight();
+ pl.setColor(ColorRGBA.White);
+ pl.setPosition(new Vector3f(4f, 0f, 0f));
+ rootNode.addLight(pl);
+
+ AmbientLight al = new AmbientLight();
+ al.setColor(ColorRGBA.White);
+ rootNode.addLight(al);
+ }
+}
diff --git a/engine/src/android/jme3test/android/TestsActivity.java b/engine/src/android/jme3test/android/TestsActivity.java
deleted file mode 100644
index d94b074e8..000000000
--- a/engine/src/android/jme3test/android/TestsActivity.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package jme3test.android;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-import android.content.Intent;
-
-import android.view.View;
-import android.view.MenuInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-
-import android.widget.TextView;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.CheckBox;
-import android.widget.TableLayout;
-import android.widget.LinearLayout;
-import android.widget.TableRow;
-
-import android.hardware.SensorManager;
-//import android.hardware.SensorListener;
-
-import jme3test.android.AndroidActivity;
-
-import java.net.URI;
-
-public class TestsActivity extends Activity {
-
- private static final java.util.logging.Logger logger = java.util.logging.Logger.getLogger(TestsActivity.class.getName());
-
- public static class Test {
-
- private String name = null;
- private String className = null;
-
- public Test(String name, String className) {
- this.name = name;
- this.className = className;
- }
-
- public String getName() {
- return name;
- }
-
- public String getClassName() {
- return className;
- }
- }
- private final static Test[] tests = {
- new Test("SimpleTextured", "jme3test.android.SimpleTexturedTest"),
- new Test("light.TestLightRadius", "jme3test.light.TestLightRadius"),
- new Test("bullet.TestSimplePhysics", "jme3test.bullet.TestSimplePhysics"),
- new Test("helloworld.HelloJME3", "jme3test.helloworld.HelloJME3"),
- new Test("helloworld.HelloLoop", "jme3test.helloworld.HelloLoop"),
- new Test("helloworld.HelloNode", "jme3test.helloworld.HelloNode"),
- new Test("helloworld.HelloEffects", "jme3test.helloworld.HelloEffects"),
- new Test("helloworld.HelloTerrain", "jme3test.helloworld.HelloTerrain")
- };
- private boolean useVA;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- logger.info("onCreate(" + savedInstanceState + ")");
-
- super.onCreate(savedInstanceState);
-
- //setContentView(R.layout.tests);
-
- try {
-
- useVA = true;
-
- //LinearLayout buttonsContainer = (LinearLayout) findViewById(R.id.buttonsContainer);
-
-
- for (Test test : tests) {
- final Button button = new Button(this);
- final String finalName = test.getName();
- final String finalClassName = test.getClassName();
-
- button.setText(test.getName());
-// button.setTextSize(10.0f);
-// button.setTextColor(Color.rgb(100, 200, 200));
- //buttonsContainer.addView(button);
-
- button.setOnClickListener(
- new View.OnClickListener() {
-
- @Override
- public void onClick(View view) {
- Intent intent = new Intent(view.getContext(), AndroidActivity.class);
- intent.putExtra(AndroidActivity.class.getName() + ".TEST_CLASS_NAME", finalClassName);
- intent.putExtra(AndroidActivity.class.getName() + ".USE_VA", useVA);
- startActivityForResult(intent, 0);
- }
- });
- }
- } catch (Exception exception) {
- logger.warning("exception: " + exception);
- exception.printStackTrace(System.err);
- }
- }
-
- @Override
- public void onDestroy() {
- logger.info("onDestroy()");
- super.onDestroy();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- MenuInflater inflater = getMenuInflater();
- //inflater.inflate(R.menu.options, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- /*
- switch (item.getItemId()) {
- case R.id.about_button:
- about();
- return true;
- case R.id.quit_button:
- quit();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- */
- return false;
- }
-
- private void quit() {
- finish();
- }
-
- private void about() {
- // Intent intent = new Intent(getView().getContext(), AboutActivity.class);
- try {
- Intent intent = new Intent();
- intent.setClassName(
- "jme3test.android",
- "jme3test.android.AboutActivity");
- startActivity(intent);
- } catch (Exception exception) {
- logger.warning("exception: " + exception);
- exception.printStackTrace(System.err);
- }
- }
-}