- Added SDL, libjpeg and libpng

- Added Android project and Java files
This commit is contained in:
Xawotihs
2011-04-23 19:25:48 +00:00
parent d48176e390
commit 4ed7f10def
571 changed files with 216345 additions and 0 deletions
+15
View File
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.libsdl.app"
android:versionCode="1"
android:versionName="1.0">
<application android:label="@string/app_name" android:icon="@drawable/icon">
<activity android:name="SDLActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
+17
View File
@@ -0,0 +1,17 @@
# This file is used to override default values used by the Ant build system.
#
# This file must be checked in Version Control Systems, as it is
# integral to the build system of your project.
# This file is only used by the Ant script.
# You can use this to override default values such as
# 'source.dir' for the location of your java source folder and
# 'out.dir' for the location of your output folder.
# You can also use it define how the release builds are signed by declaring
# the following properties:
# 'key.store' for the location of your keystore and
# 'key.alias' for the name of the key to use.
# The password will be asked during the build when you use the 'release' target.
+67
View File
@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="Wagic" default="help">
<!-- The local.properties file is created and updated by the 'android' tool.
It contains the path to the SDK. It should *NOT* be checked in in Version
Control Systems. -->
<property file="local.properties" />
<!-- The build.properties file can be created by you and is never touched
by the 'android' tool. This is the place to change some of the default property values
used by the Ant rules.
Here are some properties you may want to change/update:
application.package
the name of your application package as defined in the manifest. Used by the
'uninstall' rule.
source.dir
the name of the source directory. Default is 'src'.
out.dir
the name of the output directory. Default is 'bin'.
Properties related to the SDK location or the project target should be updated
using the 'android' tool with the 'update' action.
This file is an integral part of the build system for your application and
should be checked in in Version Control Systems.
-->
<property file="build.properties" />
<!-- The default.properties file is created and updated by the 'android' tool, as well
as ADT.
This file is an integral part of the build system for your application and
should be checked in in Version Control Systems. -->
<property file="default.properties" />
<!-- Custom Android task to deal with the project target, and import the proper rules.
This requires ant 1.6.0 or above. -->
<path id="android.antlibs">
<pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
<pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
<pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
<pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
<pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
</path>
<taskdef name="setup"
classname="com.android.ant.SetupTask"
classpathref="android.antlibs" />
<!-- Execute the Android Setup task that will setup some properties specific to the target,
and import the build rules files.
The rules file is imported from
<SDK>/platforms/<target_platform>/templates/android_rules.xml
To customize some build steps for your project:
- copy the content of the main node <project> from android_rules.xml
- paste it in this build.xml below the <setup /> task.
- disable the import by changing the setup task below to <setup import="false" />
This will ensure that the properties are setup correctly but that your customized
build steps are used.
-->
<setup />
</project>
+11
View File
@@ -0,0 +1,11 @@
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "build.properties", and override values to adapt the script to your
# project structure.
# Project target.
target=Samsung Electronics Co., Ltd.:GALAXY Tab Addon:8
+185
View File
@@ -0,0 +1,185 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
MY_LOCAL_PATH := $(LOCAL_PATH)
LOCAL_MODULE := main
MY_WAGIC_ROOT := ../../../..
JGE_PATH := $(MY_WAGIC_ROOT)/JGE
MTG_PATH := $(MY_WAGIC_ROOT)/projects/mtg/
SDL_PATH := $(JGE_PATH)/Dependencies/SDL
BOOST_PATH := $(MY_WAGIC_ROOT)/Boost
JPEG_PATH := $(JGE_PATH)/Dependencies/libjpeg
PNG_PATH := $(JGE_PATH)/Dependencies/libpng
LOCAL_CFLAGS += -DLINUX -DANDROID -DSDL_CONFIG -D_DEBUG
LOCAL_CFLAGS += -D_STLP_USE_SIMPLE_NODE_ALLOC
LOCAL_CFLAGS += -D__arm__ -D_REENTRANT -D_GLIBCXX__PTHREADS
LOCAL_STATIC_LIBRARIES := libpng libjpeg
LOCAL_SHARED_LIBRARIES := SDL
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/$(SDL_PATH)/include \
$(LOCAL_PATH)/$(MTG_PATH)/include \
$(LOCAL_PATH)/$(JGE_PATH)/include \
$(LOCAL_PATH)/$(BOOST_PATH) \
$(LOCAL_PATH)/$(JPEG_PATH) \
$(LOCAL_PATH)/$(PNG_PATH) \
LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.cpp \
$(MTG_PATH)/src/ActionElement.cpp \
$(MTG_PATH)/src/ActionLayer.cpp \
$(MTG_PATH)/src/ActionStack.cpp \
$(MTG_PATH)/src/AIMomirPlayer.cpp \
$(MTG_PATH)/src/AIPlayer.cpp \
$(MTG_PATH)/src/AIStats.cpp \
$(MTG_PATH)/src/AllAbilities.cpp \
$(MTG_PATH)/src/CardDescriptor.cpp \
$(MTG_PATH)/src/CardDisplay.cpp \
$(MTG_PATH)/src/CardEffect.cpp \
$(MTG_PATH)/src/CardGui.cpp \
$(MTG_PATH)/src/CardPrimitive.cpp \
$(MTG_PATH)/src/CardSelector.cpp \
$(MTG_PATH)/src/CardSelectorSingleton.cpp \
$(MTG_PATH)/src/Counters.cpp \
$(MTG_PATH)/src/Credits.cpp \
$(MTG_PATH)/src/Damage.cpp \
$(MTG_PATH)/src/DamagerDamaged.cpp \
$(MTG_PATH)/src/DeckDataWrapper.cpp \
$(MTG_PATH)/src/DeckEditorMenu.cpp \
$(MTG_PATH)/src/DeckManager.cpp \
$(MTG_PATH)/src/DeckMenu.cpp \
$(MTG_PATH)/src/DeckMenuItem.cpp \
$(MTG_PATH)/src/DeckMetaData.cpp \
$(MTG_PATH)/src/DeckStats.cpp \
$(MTG_PATH)/src/DuelLayers.cpp \
$(MTG_PATH)/src/Effects.cpp \
$(MTG_PATH)/src/ExtraCost.cpp \
$(MTG_PATH)/src/GameApp.cpp \
$(MTG_PATH)/src/GameLauncher.cpp \
$(MTG_PATH)/src/GameObserver.cpp \
$(MTG_PATH)/src/GameOptions.cpp \
$(MTG_PATH)/src/GameStateAwards.cpp \
$(MTG_PATH)/src/GameState.cpp \
$(MTG_PATH)/src/GameStateDeckViewer.cpp \
$(MTG_PATH)/src/GameStateDuel.cpp \
$(MTG_PATH)/src/GameStateMenu.cpp \
$(MTG_PATH)/src/GameStateOptions.cpp \
$(MTG_PATH)/src/GameStateShop.cpp \
$(MTG_PATH)/src/GameStateStory.cpp \
$(MTG_PATH)/src/GameStateTransitions.cpp \
$(MTG_PATH)/src/GuiAvatars.cpp \
$(MTG_PATH)/src/GuiBackground.cpp \
$(MTG_PATH)/src/GuiCardsController.cpp \
$(MTG_PATH)/src/GuiCombat.cpp \
$(MTG_PATH)/src/GuiFrame.cpp \
$(MTG_PATH)/src/GuiHand.cpp \
$(MTG_PATH)/src/GuiLayers.cpp \
$(MTG_PATH)/src/GuiMana.cpp \
$(MTG_PATH)/src/GuiPhaseBar.cpp \
$(MTG_PATH)/src/GuiPlay.cpp \
$(MTG_PATH)/src/GuiStatic.cpp \
$(MTG_PATH)/src/ManaCost.cpp \
$(MTG_PATH)/src/ManaCostHybrid.cpp \
$(MTG_PATH)/src/MenuItem.cpp \
$(MTG_PATH)/src/MTGAbility.cpp \
$(MTG_PATH)/src/MTGCard.cpp \
$(MTG_PATH)/src/MTGCardInstance.cpp \
$(MTG_PATH)/src/MTGDeck.cpp \
$(MTG_PATH)/src/MTGDefinitions.cpp \
$(MTG_PATH)/src/MTGGamePhase.cpp \
$(MTG_PATH)/src/MTGGameZones.cpp \
$(MTG_PATH)/src/MTGPack.cpp \
$(MTG_PATH)/src/MTGRules.cpp \
$(MTG_PATH)/src/ObjectAnalytics.cpp \
$(MTG_PATH)/src/OptionItem.cpp \
$(MTG_PATH)/src/PhaseRing.cpp \
$(MTG_PATH)/src/Player.cpp \
$(MTG_PATH)/src/PlayerData.cpp \
$(MTG_PATH)/src/PlayGuiObject.cpp \
$(MTG_PATH)/src/PlayGuiObjectController.cpp \
$(MTG_PATH)/src/PlayRestrictions.cpp \
$(MTG_PATH)/src/Pos.cpp \
$(MTG_PATH)/src/PriceList.cpp \
$(MTG_PATH)/src/ReplacementEffects.cpp \
$(MTG_PATH)/src/Rules.cpp \
$(MTG_PATH)/src/SimpleMenu.cpp \
$(MTG_PATH)/src/SimpleMenuItem.cpp \
$(MTG_PATH)/src/SimplePad.cpp \
$(MTG_PATH)/src/SimplePopup.cpp \
$(MTG_PATH)/src/StoryFlow.cpp \
$(MTG_PATH)/src/Subtypes.cpp \
$(MTG_PATH)/src/StyleManager.cpp \
$(MTG_PATH)/src/TargetChooser.cpp \
$(MTG_PATH)/src/TargetsList.cpp \
$(MTG_PATH)/src/Tasks.cpp \
$(MTG_PATH)/src/TestSuiteAI.cpp \
$(MTG_PATH)/src/TextScroller.cpp \
$(MTG_PATH)/src/ThisDescriptor.cpp \
$(MTG_PATH)/src/Token.cpp \
$(MTG_PATH)/src/Translate.cpp \
$(MTG_PATH)/src/TranslateKeys.cpp \
$(MTG_PATH)/src/Trash.cpp \
$(MTG_PATH)/src/utils.cpp \
$(MTG_PATH)/src/WCachedResource.cpp \
$(MTG_PATH)/src/WDataSrc.cpp \
$(MTG_PATH)/src/WEvent.cpp \
$(MTG_PATH)/src/WFilter.cpp \
$(MTG_PATH)/src/WFont.cpp \
$(MTG_PATH)/src/WGui.cpp \
$(MTG_PATH)/src/WResourceManager.cpp \
$(MTG_PATH)/src/NetworkPlayer.cpp \
$(JGE_PATH)/src/SDLmain.cpp \
$(JGE_PATH)/src/Encoding.cpp \
$(JGE_PATH)/src/JAnimator.cpp \
$(JGE_PATH)/src/JApp.cpp \
$(JGE_PATH)/src/JDistortionMesh.cpp \
$(JGE_PATH)/src/JFileSystem.cpp \
$(JGE_PATH)/src/JGameObject.cpp \
$(JGE_PATH)/src/JGE.cpp \
$(JGE_PATH)/src/JGui.cpp \
$(JGE_PATH)/src/JLogger.cpp \
$(JGE_PATH)/src/JLBFont.cpp \
$(JGE_PATH)/src/JMD2Model.cpp \
$(JGE_PATH)/src/JOBJModel.cpp \
$(JGE_PATH)/src/JParticle.cpp \
$(JGE_PATH)/src/JParticleEffect.cpp \
$(JGE_PATH)/src/JParticleEmitter.cpp \
$(JGE_PATH)/src/JParticleSystem.cpp \
$(JGE_PATH)/src/JResourceManager.cpp \
$(JGE_PATH)/src/JSpline.cpp \
$(JGE_PATH)/src/JSprite.cpp \
$(JGE_PATH)/src/Vector2D.cpp \
$(JGE_PATH)/src/tinyxml/tinystr.cpp \
$(JGE_PATH)/src/tinyxml/tinyxml.cpp \
$(JGE_PATH)/src/tinyxml/tinyxmlerror.cpp \
$(JGE_PATH)/src/tinyxml/tinyxmlparser.cpp \
$(JGE_PATH)/src/hge/hgecolor.cpp \
$(JGE_PATH)/src/hge/hgedistort.cpp \
$(JGE_PATH)/src/hge/hgefont.cpp \
$(JGE_PATH)/src/hge/hgeparticle.cpp \
$(JGE_PATH)/src/hge/hgerect.cpp \
$(JGE_PATH)/src/hge/hgevector.cpp \
$(JGE_PATH)/src/unzip/ioapi.c \
$(JGE_PATH)/src/unzip/mztools.c \
$(JGE_PATH)/src/unzip/unzip.c \
$(JGE_PATH)/src/pc/JSfx.cpp \
$(JGE_PATH)/src/pc/JGfx.cpp \
$(JGE_PATH)/src/JNetwork.cpp \
$(JGE_PATH)/src/pc/JSocket.cpp
LOCAL_LDLIBS := -lGLESv1_CM -llog -lz
include $(BUILD_SHARED_LIBRARY)
# PNG static lib
include $(MY_LOCAL_PATH)/$(PNG_PATH)/Android.mk
include $(CLEAR_VARS)
# JPEG static lib
include $(MY_LOCAL_PATH)/$(JPEG_PATH)/Android.mk
include $(CLEAR_VARS)
# SDL dynamic lib
include $(MY_LOCAL_PATH)/$(SDL_PATH)/Android.mk
include $(CLEAR_VARS)
+5
View File
@@ -0,0 +1,5 @@
APP_PROJECT_PATH := $(call my-dir)/..
APP_CPPFLAGS += -frtti -fexceptions
APP_ABI := armeabi armeabi-v7a
APP_STL := gnustl_static
APP_MODULES := libpng libjpeg main SDL
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, Wagic"
/>
</LinearLayout>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Wagic</string>
</resources>
@@ -0,0 +1,495 @@
package org.libsdl.app;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import javax.microedition.khronos.egl.*;
import android.app.*;
import android.content.*;
import android.view.*;
import android.os.*;
import android.util.Log;
import android.graphics.*;
import android.text.method.*;
import android.text.*;
import android.media.*;
import android.hardware.*;
import android.content.*;
import java.lang.*;
/**
SDL Activity
*/
public class SDLActivity extends Activity {
// Main components
private static SDLActivity mSingleton;
private static SDLSurface mSurface;
// Audio
private static Thread mAudioThread;
private static AudioTrack mAudioTrack;
// Load the .so
static {
System.loadLibrary("SDL");
//System.loadLibrary("SDL_image");
//System.loadLibrary("SDL_mixer");
//System.loadLibrary("SDL_ttf");
System.loadLibrary("main");
}
// Setup
protected void onCreate(Bundle savedInstanceState) {
//Log.v("SDL", "onCreate()");
super.onCreate(savedInstanceState);
// So we can call stuff from static callbacks
mSingleton = this;
// Set up the surface
mSurface = new SDLSurface(getApplication());
setContentView(mSurface);
SurfaceHolder holder = mSurface.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
}
// Events
protected void onPause() {
//Log.v("SDL", "onPause()");
super.onPause();
}
protected void onResume() {
//Log.v("SDL", "onResume()");
super.onResume();
}
// Messages from the SDLMain thread
static int COMMAND_CHANGE_TITLE = 1;
// Handler for the messages
Handler commandHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.arg1 == COMMAND_CHANGE_TITLE) {
setTitle((String)msg.obj);
}
}
};
// Send a message from the SDLMain thread
void sendCommand(int command, Object data) {
Message msg = commandHandler.obtainMessage();
msg.arg1 = command;
msg.obj = data;
commandHandler.sendMessage(msg);
}
// C functions we call
public static native void nativeInit();
public static native void nativeQuit();
public static native void onNativeResize(int x, int y, int format);
public static native void onNativeKeyDown(int keycode);
public static native void onNativeKeyUp(int keycode);
public static native void onNativeTouch(int action, float x,
float y, float p);
public static native void onNativeAccel(float x, float y, float z);
public static native void nativeRunAudioThread();
// Java functions called from C
public static boolean createGLContext(int majorVersion, int minorVersion) {
return mSurface.initEGL(majorVersion, minorVersion);
}
public static void flipBuffers() {
mSurface.flipEGL();
}
public static void setActivityTitle(String title) {
// Called from SDLMain() thread and can't directly affect the view
mSingleton.sendCommand(COMMAND_CHANGE_TITLE, title);
}
// Audio
private static Object buf;
public static Object audioInit(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) {
int channelConfig = isStereo ? AudioFormat.CHANNEL_CONFIGURATION_STEREO : AudioFormat.CHANNEL_CONFIGURATION_MONO;
int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT;
int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1);
Log.v("SDL", "SDL audio: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + ((float)sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer");
// Let the user pick a larger buffer if they really want -- but ye
// gods they probably shouldn't, the minimums are horrifyingly high
// latency already
desiredFrames = Math.max(desiredFrames, (AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize);
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate,
channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM);
audioStartThread();
Log.v("SDL", "SDL audio: got " + ((mAudioTrack.getChannelCount() >= 2) ? "stereo" : "mono") + " " + ((mAudioTrack.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + ((float)mAudioTrack.getSampleRate() / 1000f) + "kHz, " + desiredFrames + " frames buffer");
if (is16Bit) {
buf = new short[desiredFrames * (isStereo ? 2 : 1)];
} else {
buf = new byte[desiredFrames * (isStereo ? 2 : 1)];
}
return buf;
}
public static void audioStartThread() {
mAudioThread = new Thread(new Runnable() {
public void run() {
mAudioTrack.play();
nativeRunAudioThread();
}
});
// I'd take REALTIME if I could get it!
mAudioThread.setPriority(Thread.MAX_PRIORITY);
mAudioThread.start();
}
public static void audioWriteShortBuffer(short[] buffer) {
for (int i = 0; i < buffer.length; ) {
int result = mAudioTrack.write(buffer, i, buffer.length - i);
if (result > 0) {
i += result;
} else if (result == 0) {
try {
Thread.sleep(1);
} catch(InterruptedException e) {
// Nom nom
}
} else {
Log.w("SDL", "SDL audio: error return from write(short)");
return;
}
}
}
public static void audioWriteByteBuffer(byte[] buffer) {
for (int i = 0; i < buffer.length; ) {
int result = mAudioTrack.write(buffer, i, buffer.length - i);
if (result > 0) {
i += result;
} else if (result == 0) {
try {
Thread.sleep(1);
} catch(InterruptedException e) {
// Nom nom
}
} else {
Log.w("SDL", "SDL audio: error return from write(short)");
return;
}
}
}
public static void audioQuit() {
if (mAudioThread != null) {
try {
mAudioThread.join();
} catch(Exception e) {
Log.v("SDL", "Problem stopping audio thread: " + e);
}
mAudioThread = null;
//Log.v("SDL", "Finished waiting for audio thread");
}
if (mAudioTrack != null) {
mAudioTrack.stop();
mAudioTrack = null;
}
}
}
/**
Simple nativeInit() runnable
*/
class SDLMain implements Runnable {
public void run() {
// Runs SDL_main()
SDLActivity.nativeInit();
//Log.v("SDL", "SDL thread terminated");
}
}
/**
SDLSurface. This is what we draw on, so we need to know when it's created
in order to do anything useful.
Because of this, that's where we set up the SDL thread
*/
class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
View.OnKeyListener, View.OnTouchListener, SensorEventListener {
// This is what SDL runs in. It invokes SDL_main(), eventually
private Thread mSDLThread;
// EGL private objects
private EGLContext mEGLContext;
private EGLSurface mEGLSurface;
private EGLDisplay mEGLDisplay;
// Sensors
private static SensorManager mSensorManager;
// Startup
public SDLSurface(Context context) {
super(context);
getHolder().addCallback(this);
setFocusable(true);
setFocusableInTouchMode(true);
requestFocus();
setOnKeyListener(this);
setOnTouchListener(this);
mSensorManager = (SensorManager)context.getSystemService("sensor");
}
// Called when we have a valid drawing surface
public void surfaceCreated(SurfaceHolder holder) {
//Log.v("SDL", "surfaceCreated()");
enableSensor(Sensor.TYPE_ACCELEROMETER, true);
}
// Called when we lose the surface
public void surfaceDestroyed(SurfaceHolder holder) {
//Log.v("SDL", "surfaceDestroyed()");
// Send a quit message to the application
SDLActivity.nativeQuit();
// Now wait for the SDL thread to quit
if (mSDLThread != null) {
try {
mSDLThread.join();
} catch(Exception e) {
Log.v("SDL", "Problem stopping thread: " + e);
}
mSDLThread = null;
//Log.v("SDL", "Finished waiting for SDL thread");
}
enableSensor(Sensor.TYPE_ACCELEROMETER, false);
}
// Called when the surface is resized
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
//Log.v("SDL", "surfaceChanged()");
int sdlFormat = 0x85151002; // SDL_PIXELFORMAT_RGB565 by default
switch (format) {
case PixelFormat.A_8:
Log.v("SDL", "pixel format A_8");
break;
case PixelFormat.LA_88:
Log.v("SDL", "pixel format LA_88");
break;
case PixelFormat.L_8:
Log.v("SDL", "pixel format L_8");
break;
case PixelFormat.RGBA_4444:
Log.v("SDL", "pixel format RGBA_4444");
sdlFormat = 0x85421002; // SDL_PIXELFORMAT_RGBA4444
break;
case PixelFormat.RGBA_5551:
Log.v("SDL", "pixel format RGBA_5551");
sdlFormat = 0x85441002; // SDL_PIXELFORMAT_RGBA5551
break;
case PixelFormat.RGBA_8888:
Log.v("SDL", "pixel format RGBA_8888");
sdlFormat = 0x86462004; // SDL_PIXELFORMAT_RGBA8888
break;
case PixelFormat.RGBX_8888:
Log.v("SDL", "pixel format RGBX_8888");
sdlFormat = 0x86262004; // SDL_PIXELFORMAT_RGBX8888
break;
case PixelFormat.RGB_332:
Log.v("SDL", "pixel format RGB_332");
sdlFormat = 0x84110801; // SDL_PIXELFORMAT_RGB332
break;
case PixelFormat.RGB_565:
Log.v("SDL", "pixel format RGB_565");
sdlFormat = 0x85151002; // SDL_PIXELFORMAT_RGB565
break;
case PixelFormat.RGB_888:
Log.v("SDL", "pixel format RGB_888");
// Not sure this is right, maybe SDL_PIXELFORMAT_RGB24 instead?
sdlFormat = 0x86161804; // SDL_PIXELFORMAT_RGB888
break;
default:
Log.v("SDL", "pixel format unknown " + format);
break;
}
SDLActivity.onNativeResize(width, height, sdlFormat);
// Now start up the C app thread
if (mSDLThread == null) {
mSDLThread = new Thread(new SDLMain(), "SDLThread");
mSDLThread.start();
}
}
// unused
public void onDraw(Canvas canvas) {}
// EGL functions
public boolean initEGL(int majorVersion, int minorVersion) {
Log.v("SDL", "Starting up OpenGL ES " + majorVersion + "." + minorVersion);
try {
EGL10 egl = (EGL10)EGLContext.getEGL();
EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
int[] version = new int[2];
egl.eglInitialize(dpy, version);
int EGL_OPENGL_ES_BIT = 1;
int EGL_OPENGL_ES2_BIT = 4;
int renderableType = 0;
if (majorVersion == 2) {
renderableType = EGL_OPENGL_ES2_BIT;
} else if (majorVersion == 1) {
renderableType = EGL_OPENGL_ES_BIT;
}
int[] configSpec = {
//EGL10.EGL_DEPTH_SIZE, 16,
EGL10.EGL_RENDERABLE_TYPE, renderableType,
EGL10.EGL_NONE
};
EGLConfig[] configs = new EGLConfig[1];
int[] num_config = new int[1];
if (!egl.eglChooseConfig(dpy, configSpec, configs, 1, num_config) || num_config[0] == 0) {
Log.e("SDL", "No EGL config available");
return false;
}
EGLConfig config = configs[0];
EGLContext ctx = egl.eglCreateContext(dpy, config, EGL10.EGL_NO_CONTEXT, null);
if (ctx == EGL10.EGL_NO_CONTEXT) {
Log.e("SDL", "Couldn't create context");
return false;
}
EGLSurface surface = egl.eglCreateWindowSurface(dpy, config, this, null);
if (surface == EGL10.EGL_NO_SURFACE) {
Log.e("SDL", "Couldn't create surface");
return false;
}
if (!egl.eglMakeCurrent(dpy, surface, surface, ctx)) {
Log.e("SDL", "Couldn't make context current");
return false;
}
mEGLContext = ctx;
mEGLDisplay = dpy;
mEGLSurface = surface;
} catch(Exception e) {
Log.v("SDL", e + "");
for (StackTraceElement s : e.getStackTrace()) {
Log.v("SDL", s.toString());
}
}
return true;
}
// EGL buffer flip
public void flipEGL() {
try {
EGL10 egl = (EGL10)EGLContext.getEGL();
egl.eglWaitNative(EGL10.EGL_NATIVE_RENDERABLE, null);
// drawing here
egl.eglWaitGL();
egl.eglSwapBuffers(mEGLDisplay, mEGLSurface);
} catch(Exception e) {
Log.v("SDL", "flipEGL(): " + e);
for (StackTraceElement s : e.getStackTrace()) {
Log.v("SDL", s.toString());
}
}
}
// Key events
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
//Log.v("SDL", "key down: " + keyCode);
SDLActivity.onNativeKeyDown(keyCode);
return true;
}
else if (event.getAction() == KeyEvent.ACTION_UP) {
//Log.v("SDL", "key up: " + keyCode);
SDLActivity.onNativeKeyUp(keyCode);
return true;
}
return false;
}
// Touch events
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
float x = event.getX();
float y = event.getY();
float p = event.getPressure();
// TODO: Anything else we need to pass?
SDLActivity.onNativeTouch(action, x, y, p);
return true;
}
// Sensor events
public void enableSensor(int sensortype, boolean enabled) {
// TODO: This uses getDefaultSensor - what if we have >1 accels?
if (enabled) {
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(sensortype),
SensorManager.SENSOR_DELAY_GAME, null);
} else {
mSensorManager.unregisterListener(this,
mSensorManager.getDefaultSensor(sensortype));
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO
}
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
SDLActivity.onNativeAccel(event.values[0],
event.values[1],
event.values[2]);
}
}
}