Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Fill in the video mode with the correct screen format
Browse files Browse the repository at this point in the history
  • Loading branch information
slouken committed Jan 12, 2011
1 parent 40229d4 commit fa851fd
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 104 deletions.
183 changes: 102 additions & 81 deletions android-project/src/org/libsdl/app/SDLActivity.java
Expand Up @@ -89,7 +89,7 @@ public static boolean closeAccel(){
}


//Events
// Events
protected void onPause() {
super.onPause();
}
Expand All @@ -98,14 +98,10 @@ protected void onResume() {
super.onResume();
}





//C functions we call
// C functions we call
public static native void nativeInit();
public static native void nativeQuit();
public static native void nativeSetScreenSize(int width, int height);
public static native void onNativeKeyDown(int keycode);
public static native void onNativeKeyUp(int keycode);
public static native void onNativeTouch(int action, float x,
Expand All @@ -114,17 +110,16 @@ public static native void onNativeTouch(int action, float x,
public static native void onNativeAccel(float x, float y, float z);



//Java functions called from C
private static void createGLContext(){
private static void createGLContext() {
mSurface.initEGL();
}

public static void flipBuffers(){
public static void flipBuffers() {
mSurface.flipEGL();
}

public static void updateAudio(byte [] buf){
public static void updateAudio(byte [] buf) {

if(mAudioTrack == null){
return;
Expand All @@ -136,7 +131,7 @@ public static void updateAudio(byte [] buf){
Log.v("SDL","Played some audio");
}

public static void enableFeature(int featureid, int enabled){
public static void enableFeature(int featureid, int enabled) {
Log.v("SDL","Feature " + featureid + " = " + enabled);

//Yuck. This is all horribly inelegent. If it gets to more than a few
Expand Down Expand Up @@ -164,11 +159,9 @@ else if(featureid == FEATURE_ACCEL){
/**
Simple nativeInit() runnable
*/
class SDLRunner implements Runnable{
public void run(){
//SDLActivity.initAudio();

//Runs SDL_main()
class SDLMain implements Runnable {
public void run() {
// Runs SDL_main()
SDLActivity.nativeInit();

Log.v("SDL","SDL thread terminated");
Expand All @@ -185,18 +178,18 @@ public void run(){
class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
View.OnKeyListener, View.OnTouchListener, SensorEventListener {

//This is what SDL runs in. It invokes SDL_main(), eventually
// This is what SDL runs in. It invokes SDL_main(), eventually
private Thread mSDLThread;

//EGL private objects
// EGL private objects
private EGLContext mEGLContext;
private EGLSurface mEGLSurface;
private EGLDisplay mEGLDisplay;

//Sensors
// Sensors
private static SensorManager mSensorManager;

//Startup
// Startup
public SDLSurface(Context context) {
super(context);
getHolder().addCallback(this);
Expand All @@ -206,57 +199,94 @@ public SDLSurface(Context context) {
requestFocus();
setOnKeyListener(this);
setOnTouchListener(this);

mSensorManager = (SensorManager)context.getSystemService("sensor");
}

//Called when we have a valid drawing surface
// Called when we have a valid drawing surface
public void surfaceCreated(SurfaceHolder holder) {
Log.v("SDL","Surface created");

int width = getWidth();
int height = getHeight();

//Set the width and height variables in C before we start SDL so we have
//it available on init
SDLActivity.nativeSetScreenSize(width, height);

//Now start up the C app thread
mSDLThread = new Thread(new SDLRunner(), "SDLThread");
mSDLThread.start();
}

//Called when we lose the surface
// Called when we lose the surface
public void surfaceDestroyed(SurfaceHolder holder) {
Log.v("SDL","Surface destroyed");


// Send a quit message to the application
SDLActivity.nativeQuit();

//Now wait for the SDL thread to quit
try{
mSDLThread.wait();
}catch(Exception e){
Log.v("SDL","Problem stopping thread: " + e);
// Now wait for the SDL thread to quit
if (mSDLThread != null) {
try {
mSDLThread.wait();
} catch(Exception e) {
Log.v("SDL","Problem stopping thread: " + e);
}
}
}

//Called when the surface is resized
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");


int sdlFormat = 0;
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; // Doesn't have an SDL constant...
break;
case PixelFormat.RGBA_5551:
Log.v("SDL","pixel format RGBA_5551");
sdlFormat = 0x85441002; // Doesn't have an SDL constant...
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;
}
SDLActivity.onNativeResize(width, height, format);

// 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(){
Log.v("SDL","Starting up");

try{
// EGL functions
public boolean initEGL() {
Log.v("SDL", "Starting up");

try {

EGL10 egl = (EGL10)EGLContext.getEGL();

Expand All @@ -283,23 +313,20 @@ public boolean initEGL(){
mEGLContext = ctx;
mEGLDisplay = dpy;
mEGLSurface = surface;


}catch(Exception e){

} catch(Exception e) {
Log.v("SDL", e + "");
for(StackTraceElement s : e.getStackTrace()){
Log.v("SDL", s.toString());
}
}
Log.v("SDL","Done making!");

return true;
}

//EGL buffer flip
public void flipEGL(){
try{

// EGL buffer flip
public void flipEGL() {
try {
EGL10 egl = (EGL10)EGLContext.getEGL();
GL10 gl = (GL10)mEGLContext.getGL();

Expand All @@ -312,35 +339,31 @@ public void flipEGL(){
egl.eglSwapBuffers(mEGLDisplay, mEGLSurface);


}catch(Exception e){
} catch(Exception e) {
Log.v("SDL", "flipEGL(): " + e);

for(StackTraceElement s : e.getStackTrace()){
Log.v("SDL", s.toString());
}
}
}



//Key events
// Key events
public boolean onKey(View v, int keyCode, KeyEvent event){

if(event.getAction() == KeyEvent.ACTION_DOWN){
if (event.getAction() == KeyEvent.ACTION_DOWN) {
SDLActivity.onNativeKeyDown(keyCode);
return true;
}

else if(event.getAction() == KeyEvent.ACTION_UP){
else if (event.getAction() == KeyEvent.ACTION_UP) {
SDLActivity.onNativeKeyUp(keyCode);
return true;
}

return false;
}

//Touch events
public boolean onTouch(View v, MotionEvent event){
// Touch events
public boolean onTouch(View v, MotionEvent event) {

int action = event.getAction();
float x = event.getX();
Expand All @@ -352,32 +375,30 @@ public boolean onTouch(View v, MotionEvent event){
return true;
}

//Sensor events
public void enableSensor(int sensortype, boolean enabled){
// Sensor events
public void enableSensor(int sensortype, boolean enabled) {
//TODO: This uses getDefaultSensor - what if we have >1 accels?
if(enabled){
if (enabled) {
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(sensortype),
SensorManager.SENSOR_DELAY_GAME, null);
}else{
} else {
mSensorManager.unregisterListener(this,
mSensorManager.getDefaultSensor(sensortype));
}
}

public void onAccuracyChanged(Sensor sensor, int accuracy){
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] );
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
SDLActivity.onNativeAccel(event.values[0],
event.values[1],
event.values[2]);
}
}


}


17 changes: 4 additions & 13 deletions src/SDL_android.cpp
Expand Up @@ -24,6 +24,7 @@
extern "C" {
#include "events/SDL_events_c.h"
#include "video/android/SDL_androidkeyboard.h"
#include "video/android/SDL_androidvideo.h"
}

/*******************************************************************************
Expand All @@ -49,9 +50,6 @@ jmethodID midFlipBuffers;
jmethodID midEnableFeature;
jmethodID midUpdateAudio;

extern "C" void Android_SetScreenResolution(int width, int height);
extern "C" int SDL_SendQuit();

//If we're not the active app, don't try to render
bool bRenderingEnabled = false;

Expand Down Expand Up @@ -145,21 +143,12 @@ extern "C" void Java_org_libsdl_app_SDLActivity_nativeQuit( JNIEnv* env,
SDL_SendQuit();
}

// Screen size
extern "C" void Java_org_libsdl_app_SDLActivity_nativeSetScreenSize(
JNIEnv* env, jobject obj, jint width, jint height)
{
__android_log_print(ANDROID_LOG_INFO, "SDL",
"SDL: Set screen size on init: %d/%d\n", width, height);
Android_SetScreenResolution(width, height);
}

// Resize
extern "C" void Java_org_libsdl_app_SDLActivity_onNativeResize(
JNIEnv* env, jobject obj, jint width,
jint height, jint format)
{
/* FIXME: What is the relationship between this and the window? */
Android_SetScreenResolution(width, height, format);
}

extern "C" void Java_org_libsdl_app_SDLActivity_onNativeAccel(
Expand Down Expand Up @@ -229,3 +218,5 @@ extern "C" void Android_UpdateAudioBuffer(unsigned char *buf, int len)
__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: invoked\n");

}

/* vi: set ts=4 sw=4 expandtab: */

0 comments on commit fa851fd

Please sign in to comment.