Code cleanup
This commit is contained in:
parent
482a87c499
commit
26a7c00433
4 changed files with 87 additions and 82 deletions
|
@ -4,7 +4,7 @@
|
||||||
android:versionCode="1"
|
android:versionCode="1"
|
||||||
android:versionName="1.0">
|
android:versionName="1.0">
|
||||||
<application android:label="@string/app_name" android:icon="@drawable/icon">
|
<application android:label="@string/app_name" android:icon="@drawable/icon">
|
||||||
<activity android:name="TestActivity"
|
<activity android:name="SDLActivity"
|
||||||
android:label="@string/app_name">
|
android:label="@string/app_name">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
|
@ -2,7 +2,7 @@ LOCAL_PATH := $(call my-dir)
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
LOCAL_MODULE := sanangeles
|
LOCAL_MODULE := sdltest
|
||||||
|
|
||||||
SDL := /home/paul/Projects/gsoc/SDL-gsoc2010_android/
|
SDL := /home/paul/Projects/gsoc/SDL-gsoc2010_android/
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ extern "C" int SDL_main();
|
||||||
Functions called by JNI
|
Functions called by JNI
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
extern "C" void Java_org_libsdl_android_TestActivity_nativeInit( JNIEnv* env, jobject obj )
|
extern "C" void Java_org_libsdl_android_SDLActivity_nativeInit( JNIEnv* env, jobject obj )
|
||||||
{
|
{
|
||||||
__android_log_print(ANDROID_LOG_INFO, "SDL", "JNI: NativeInit");
|
__android_log_print(ANDROID_LOG_INFO, "SDL", "JNI: NativeInit");
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
|
||||||
|
|
||||||
__android_log_print(ANDROID_LOG_INFO, "SDL", "JNI: OnLoad");
|
__android_log_print(ANDROID_LOG_INFO, "SDL", "JNI: OnLoad");
|
||||||
|
|
||||||
jclass cls = mEnv->FindClass ("org/libsdl/android/TestActivity");
|
jclass cls = mEnv->FindClass ("org/libsdl/android/SDLActivity");
|
||||||
mActivityInstance = cls;
|
mActivityInstance = cls;
|
||||||
midCreateGLContext = mEnv->GetStaticMethodID(cls,"createGLContext","()V");
|
midCreateGLContext = mEnv->GetStaticMethodID(cls,"createGLContext","()V");
|
||||||
midFlipBuffers = mEnv->GetStaticMethodID(cls,"flipBuffers","()V");
|
midFlipBuffers = mEnv->GetStaticMethodID(cls,"flipBuffers","()V");
|
||||||
|
|
|
@ -16,105 +16,146 @@ import android.graphics.*;
|
||||||
import java.lang.*;
|
import java.lang.*;
|
||||||
|
|
||||||
|
|
||||||
//http://www.mail-archive.com/android-beginners@googlegroups.com/msg01830.html
|
/**
|
||||||
|
SDL Activity
|
||||||
/*
|
|
||||||
In TestActivity::onResume() call SDL_Init
|
|
||||||
SDL_GL_CreateContext call SDLSurface::createSDLGLContext()
|
|
||||||
SDL_GL_FlipBuffers calls SDLSurface::flip()
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
public class SDLActivity extends Activity {
|
||||||
|
|
||||||
|
//Main components
|
||||||
|
private static SDLActivity mSingleton;
|
||||||
|
private static SDLSurface mSurface;
|
||||||
|
|
||||||
|
//Load the .so
|
||||||
|
static {
|
||||||
|
System.loadLibrary("sdltest");
|
||||||
|
}
|
||||||
|
|
||||||
public class TestActivity extends Activity {
|
//Setup
|
||||||
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
//So we can call stuff from static callbacks
|
||||||
|
mSingleton = this;
|
||||||
|
|
||||||
|
//Set up the surface
|
||||||
mSurface = new SDLSurface(getApplication());
|
mSurface = new SDLSurface(getApplication());
|
||||||
setContentView(mSurface);
|
setContentView(mSurface);
|
||||||
SurfaceHolder holder = mSurface.getHolder();
|
SurfaceHolder holder = mSurface.getHolder();
|
||||||
holder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
|
holder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Events
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
//All set up. Start up SDL
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SDLSurface mSurface;
|
|
||||||
|
|
||||||
static {
|
|
||||||
System.loadLibrary("sanangeles");
|
|
||||||
}
|
|
||||||
|
|
||||||
//C functions we call
|
//C functions we call
|
||||||
public static native void nativeInit();
|
public static native void nativeInit();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Java functions called from C
|
//Java functions called from C
|
||||||
private static void createGLContext(){
|
private static void createGLContext(){
|
||||||
mSurface.initEGL();
|
mSurface.initEGL();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void flipBuffers(){
|
public static void flipBuffers(){
|
||||||
mSurface.flipBuffers();
|
mSurface.flipEGL();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//EGL context creation
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class SDLThread implements Runnable{
|
/**
|
||||||
|
Simple nativeInit() runnable
|
||||||
|
*/
|
||||||
|
class SDLRunner implements Runnable{
|
||||||
public void run(){
|
public void run(){
|
||||||
TestActivity.nativeInit();
|
//Runs SDL_main()
|
||||||
|
SDLActivity.nativeInit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
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{
|
class SDLSurface extends SurfaceView implements SurfaceHolder.Callback{
|
||||||
|
|
||||||
|
//This is what SDL runs in. It invokes SDL_main(), eventually
|
||||||
|
private Thread mSDLThread;
|
||||||
|
|
||||||
|
//EGL private objects
|
||||||
private EGLContext mEGLContext;
|
private EGLContext mEGLContext;
|
||||||
private EGLSurface mEGLSurface;
|
private EGLSurface mEGLSurface;
|
||||||
private EGLDisplay mEGLDisplay;
|
private EGLDisplay mEGLDisplay;
|
||||||
|
|
||||||
|
//Startup
|
||||||
|
public SDLSurface(Context context) {
|
||||||
|
super(context);
|
||||||
|
getHolder().addCallback(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Called when we have a valid drawing surface
|
||||||
public void surfaceCreated(SurfaceHolder holder) {
|
public void surfaceCreated(SurfaceHolder holder) {
|
||||||
Log.v("SDL","Surface created");
|
Log.v("SDL","Surface created");
|
||||||
|
|
||||||
Thread runner = new Thread(new SDLThread(), "SDLThread"); // (1) Create a new thread.
|
mSDLThread = new Thread(new SDLRunner(), "SDLThread");
|
||||||
runner.start(); // (2) Start the thread
|
mSDLThread.start();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Called when we lose the surface
|
||||||
public void surfaceDestroyed(SurfaceHolder holder) {
|
public void surfaceDestroyed(SurfaceHolder holder) {
|
||||||
Log.v("SDL","Surface destroyed");
|
Log.v("SDL","Surface destroyed");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
|
//Called when the surface is resized
|
||||||
|
public void surfaceChanged(SurfaceHolder holder, int format,
|
||||||
|
int width, int height) {
|
||||||
|
Log.v("SDL","Surface resized");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//unused
|
||||||
|
public void onDraw(Canvas canvas) {}
|
||||||
|
|
||||||
boolean initEGL(){
|
|
||||||
|
//EGL functions
|
||||||
|
public boolean initEGL(){
|
||||||
Log.v("SDL","Starting up");
|
Log.v("SDL","Starting up");
|
||||||
|
|
||||||
try{
|
try{
|
||||||
|
|
||||||
// Get an EGL instance
|
|
||||||
EGL10 egl = (EGL10)EGLContext.getEGL();
|
EGL10 egl = (EGL10)EGLContext.getEGL();
|
||||||
|
|
||||||
// Get to the default display.
|
|
||||||
EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
|
EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
|
||||||
|
|
||||||
// We can now initialize EGL for that display
|
|
||||||
int[] version = new int[2];
|
int[] version = new int[2];
|
||||||
egl.eglInitialize(dpy, version);
|
egl.eglInitialize(dpy, version);
|
||||||
|
|
||||||
// Specify a configuration for our opengl session
|
|
||||||
// and grab the first configuration that matches is
|
|
||||||
int[] configSpec = {
|
int[] configSpec = {
|
||||||
//EGL10.EGL_DEPTH_SIZE, 16,
|
//EGL10.EGL_DEPTH_SIZE, 16,
|
||||||
EGL10.EGL_NONE
|
EGL10.EGL_NONE
|
||||||
|
@ -124,21 +165,21 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback{
|
||||||
egl.eglChooseConfig(dpy, configSpec, configs, 1, num_config);
|
egl.eglChooseConfig(dpy, configSpec, configs, 1, num_config);
|
||||||
EGLConfig config = configs[0];
|
EGLConfig config = configs[0];
|
||||||
|
|
||||||
// Create an OpenGL ES context. This must be done only once
|
|
||||||
EGLContext ctx = egl.eglCreateContext(dpy, config, EGL10.EGL_NO_CONTEXT, null);
|
EGLContext ctx = egl.eglCreateContext(dpy, config, EGL10.EGL_NO_CONTEXT, null);
|
||||||
|
|
||||||
// Create an EGL surface we can render into.
|
|
||||||
EGLSurface surface = egl.eglCreateWindowSurface(dpy, config, this, null);
|
EGLSurface surface = egl.eglCreateWindowSurface(dpy, config, this, null);
|
||||||
|
|
||||||
// Before we can issue GL commands, we need to make sure
|
|
||||||
// the context is current and bound to a surface.
|
|
||||||
egl.eglMakeCurrent(dpy, surface, surface, ctx);
|
egl.eglMakeCurrent(dpy, surface, surface, ctx);
|
||||||
|
|
||||||
mEGLContext = ctx;
|
mEGLContext = ctx;
|
||||||
mEGLDisplay = dpy;
|
mEGLDisplay = dpy;
|
||||||
mEGLSurface = surface;
|
mEGLSurface = surface;
|
||||||
|
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
Log.v("SDL", e + "");
|
Log.v("SDL", e + "");
|
||||||
|
for(StackTraceElement s : e.getStackTrace()){
|
||||||
|
Log.v("SDL", s.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.v("SDL","Done making!");
|
Log.v("SDL","Done making!");
|
||||||
|
@ -146,22 +187,8 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SDLSurface(Context context) {
|
//EGL buffer flip
|
||||||
super(context);
|
public void flipEGL(){
|
||||||
|
|
||||||
getHolder().addCallback(this);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onDraw(Canvas canvas) {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void flipBuffers(){
|
|
||||||
//Log.v("test","Draw!");
|
|
||||||
|
|
||||||
try{
|
try{
|
||||||
|
|
||||||
EGL10 egl = (EGL10)EGLContext.getEGL();
|
EGL10 egl = (EGL10)EGLContext.getEGL();
|
||||||
|
@ -177,35 +204,13 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback{
|
||||||
|
|
||||||
|
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
Log.v("SDL", e + "");
|
Log.v("SDL", "flipEGL(): " + e);
|
||||||
}
|
|
||||||
|
|
||||||
|
for(StackTraceElement s : e.getStackTrace()){
|
||||||
|
Log.v("SDL", s.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
class TestRenderer implements GLSurfaceView.Renderer {
|
|
||||||
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
|
|
||||||
nativeInit();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void onSurfaceChanged(GL10 gl, int w, int h) {
|
|
||||||
//gl.glViewport(0, 0, w, h);
|
|
||||||
nativeResize(w, h);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onDrawFrame(GL10 gl) {
|
|
||||||
nativeRender();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static native void nativeInit();
|
|
||||||
private static native void nativeResize(int w, int h);
|
|
||||||
private static native void nativeRender();
|
|
||||||
private static native void nativeDone();
|
|
||||||
|
|
||||||
}
|
|
||||||
*/
|
|
Loading…
Add table
Add a link
Reference in a new issue