Mercurial > sdl-ios-xcode
view android/testproject/jni/app-android.c @ 4709:6dc26b9d8368
Tweaks to the libsdl side
author | Paul Hunkin <paul@bieh.net> |
---|---|
date | Fri, 18 Jun 2010 01:29:14 +1200 |
parents | f3f65cb6a382 |
children | aeac51289991 |
line wrap: on
line source
/******************************************************************************* Headers *******************************************************************************/ #include <jni.h> #include <sys/time.h> #include <time.h> #include <android/log.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <pthread.h> #include "importgl.h" #include "egl.h" /******************************************************************************* Globals *******************************************************************************/ int gAppAlive = 1; static int sWindowWidth = 320; static int sWindowHeight = 480; static int sDemoStopped = 0; static long _getTime(void){ struct timeval now; gettimeofday(&now, NULL); return (long)(now.tv_sec*1000 + now.tv_usec/1000); } /******************************************************************************* Things used by libsdl *******************************************************************************/ pthread_mutex_t mSDLRenderMutex; pthread_cond_t mSDLRenderCondition; EGLContext mContext; EGLDisplay mDisplay; EGLSurface mRead; EGLSurface mDraw; /******************************************************************************* SDL thread *******************************************************************************/ pthread_t mSDLThread = 0; void* sdlThreadProc(void* args){ __android_log_print(ANDROID_LOG_INFO, "SDL", "Thread Entry"); if(!eglMakeCurrent(mDisplay, mDraw, mRead, mContext)){ __android_log_print(ANDROID_LOG_INFO, "SDL", "Couldn't make current: 0x%x", eglGetError()); return NULL; } return (void *)SDL_main(); } /******************************************************************************* Initialize the graphics state *******************************************************************************/ void Java_org_libsdl_android_TestRenderer_nativeInit( JNIEnv* env ) { importGLInit(); gAppAlive = 1; sDemoStopped = 0; __android_log_print(ANDROID_LOG_INFO, "SDL", "Entry point"); pthread_mutex_init(&mSDLRenderMutex, NULL); pthread_cond_init (&mSDLRenderCondition, NULL); //Get some egl stuff we need mContext = eglGetCurrentContext(); mDisplay = eglGetCurrentDisplay(); mRead = eglGetCurrentSurface(EGL_READ); mDraw = eglGetCurrentSurface(EGL_DRAW); //We need to abandon our context so SDL can have it if(!eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)){ __android_log_print(ANDROID_LOG_INFO, "SDL", "Couldn't abandon context: 0x%x", eglGetError()); return NULL; } //Spin up the SDL thread int r = pthread_create(&mSDLThread, NULL, sdlThreadProc, NULL); if(r != 0){ __android_log_print(ANDROID_LOG_INFO, "SDL", "Couldn't spawn thread: %d", r); }else{ __android_log_print(ANDROID_LOG_INFO, "SDL", "Started SDL thread"); } } /******************************************************************************* Resize *******************************************************************************/ void Java_org_libsdl_android_TestRenderer_nativeResize( JNIEnv* env, jobject thiz, jint w, jint h ) { sWindowWidth = w; sWindowHeight = h; __android_log_print(ANDROID_LOG_INFO, "SDL", "resize w=%d h=%d", w, h); } /******************************************************************************* Finalize (ie: shutdown) *******************************************************************************/ void Java_org_libsdl_android_TestRenderer_nativeDone( JNIEnv* env ) { //shut down the app importGLDeinit(); __android_log_print(ANDROID_LOG_INFO, "SDL", "Finalize"); } /******************************************************************************* Pause (ie: stop as soon as possible) *******************************************************************************/ void Java_org_libsdl_android_TestGLSurfaceView_nativePause( JNIEnv* env ) { sDemoStopped = !sDemoStopped; if (sDemoStopped) { //we paused __android_log_print(ANDROID_LOG_INFO, "SDL", "Pause"); } else { //we resumed __android_log_print(ANDROID_LOG_INFO, "SDL", "Resume"); } } /******************************************************************************* Render the next frame *******************************************************************************/ void Java_org_libsdl_android_TestRenderer_nativeRender( JNIEnv* env ) { //TODO: Render here pthread_mutex_lock(&mSDLRenderMutex); pthread_cond_signal(&mSDLRenderCondition); //wake up the SDL thread pthread_mutex_unlock(&mSDLRenderMutex); //__android_log_print(ANDROID_LOG_INFO, "SDL", "Unlocked"); }