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

Latest commit

 

History

History
177 lines (127 loc) · 5.28 KB

app-android.cpp

File metadata and controls

177 lines (127 loc) · 5.28 KB
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*******************************************************************************
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
*******************************************************************************/
static long _getTime(void){
struct timeval now;
gettimeofday(&now, NULL);
return (long)(now.tv_sec*1000 + now.tv_usec/1000);
}
JNIEnv* mEnv = NULL;
JavaVM* mVM = NULL;
//Main activity
jclass mActivityInstance;
//method signatures
jmethodID midCreateGLContext;
jmethodID midFlipBuffers;
extern "C" int SDL_main();
Jul 6, 2010
Jul 6, 2010
39
40
extern "C" int Android_OnKeyDown(int keycode);
extern "C" int Android_OnKeyUp(int keycode);
Jul 27, 2010
Jul 27, 2010
41
42
extern "C" void Android_SetScreenResolution(int width, int height);
extern "C" void Android_OnResize(int width, int height, int format);
Jul 27, 2010
Jul 27, 2010
43
44
45
46
extern "C" int SDL_SendQuit();
//If we're not the active app, don't try to render
bool bRenderingEnabled = false;
47
48
49
50
51
/*******************************************************************************
Functions called by JNI
*******************************************************************************/
Jul 27, 2010
Jul 27, 2010
52
//Library init
Jul 27, 2010
Jul 27, 2010
53
54
extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved){
55
56
57
58
59
60
61
62
63
64
65
JNIEnv* env = NULL;
jint result = -1;
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
return result;
}
mEnv = env;
__android_log_print(ANDROID_LOG_INFO, "SDL", "JNI: OnLoad");
Jun 28, 2010
Jun 28, 2010
66
jclass cls = mEnv->FindClass ("org/libsdl/android/SDLActivity");
67
68
69
70
71
72
73
74
75
76
77
78
79
mActivityInstance = cls;
midCreateGLContext = mEnv->GetStaticMethodID(cls,"createGLContext","()V");
midFlipBuffers = mEnv->GetStaticMethodID(cls,"flipBuffers","()V");
if(!midCreateGLContext || !midFlipBuffers){
__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Bad mids\n");
}else{
__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Good mids\n");
}
return JNI_VERSION_1_4;
}
Jul 27, 2010
Jul 27, 2010
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//Start up the SDL app
extern "C" void Java_org_libsdl_android_SDLActivity_nativeInit( JNIEnv* env,
jobject obj ){
__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Native Init");
mEnv = env;
bRenderingEnabled = true;
SDL_main();
}
//Keydown
extern "C" void Java_org_libsdl_android_SDLActivity_onNativeKeyDown(JNIEnv* env,
Jul 6, 2010
Jul 6, 2010
95
96
97
jobject obj, jint keycode){
int r = Android_OnKeyDown(keycode);
Jul 27, 2010
Jul 27, 2010
98
99
__android_log_print(ANDROID_LOG_INFO, "SDL",
"SDL: native key down %d, %d\n", keycode, r);
Jul 27, 2010
Jul 27, 2010
100
Jul 6, 2010
Jul 6, 2010
101
102
}
Jul 27, 2010
Jul 27, 2010
103
104
//Keyup
extern "C" void Java_org_libsdl_android_SDLActivity_onNativeKeyUp(JNIEnv* env,
Jul 6, 2010
Jul 6, 2010
105
106
107
jobject obj, jint keycode){
int r = Android_OnKeyUp(keycode);
Jul 27, 2010
Jul 27, 2010
108
109
__android_log_print(ANDROID_LOG_INFO, "SDL",
"SDL: native key up %d, %d\n", keycode, r);
Jul 27, 2010
Jul 27, 2010
110
Jul 27, 2010
Jul 27, 2010
111
112
}
Jul 27, 2010
Jul 27, 2010
113
114
//Touch
extern "C" void Java_org_libsdl_android_SDLActivity_onNativeTouch(JNIEnv* env,
Jul 27, 2010
Jul 27, 2010
115
jobject obj, jint action, jfloat x, jfloat y, jfloat p){
Jul 27, 2010
Jul 27, 2010
116
Jul 27, 2010
Jul 27, 2010
117
118
119
__android_log_print(ANDROID_LOG_INFO, "SDL",
"SDL: native touch event %d @ %f/%f, pressure %f\n",
action, x, y, p);
Jul 27, 2010
Jul 27, 2010
120
121
//TODO: Pass this off to the SDL multitouch stuff
Jul 27, 2010
Jul 27, 2010
122
123
124
}
Jul 27, 2010
Jul 27, 2010
125
//Quit
Jul 27, 2010
Jul 27, 2010
126
127
128
129
130
131
132
133
134
135
extern "C" void Java_org_libsdl_android_SDLActivity_nativeQuit( JNIEnv* env,
jobject obj ){
//Stop rendering as we're no longer in the foreground
bRenderingEnabled = false;
//Inject a SDL_QUIT event
int r = SDL_SendQuit();
__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Native quit %d", r);
Jul 6, 2010
Jul 6, 2010
136
137
}
Jul 27, 2010
Jul 27, 2010
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
//Screen size
extern "C" void Java_org_libsdl_android_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_android_SDLActivity_onNativeResize(
JNIEnv* env, jobject obj, jint width,
jint height, jint format){
Android_OnResize(width, height, format);
}
155
156
157
158
159
160
161
162
/*******************************************************************************
Functions called by SDL
*******************************************************************************/
extern "C" void sdl_create_context(){
__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: sdl_create_context()\n");
Jul 27, 2010
Jul 27, 2010
163
bRenderingEnabled = true;
Jul 27, 2010
Jul 27, 2010
165
mEnv->CallStaticVoidMethod(mActivityInstance, midCreateGLContext );
166
167
168
169
}
extern "C" void sdl_render(){
Jul 27, 2010
Jul 27, 2010
170
171
172
173
174
if(!bRenderingEnabled){
return;
}
//When we get here, we've accumulated a full frame
175
176
mEnv->CallStaticVoidMethod(mActivityInstance, midFlipBuffers );
}