Created
July 26, 2013 15:00
-
-
Save jrgleason/6089568 to your computer and use it in GitHub Desktop.
Simple Native Android App that fails when back button pressed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <jni.h> | |
#include <errno.h> | |
#include <EGL/egl.h> | |
#include <GLES/gl.h> | |
#include <android/sensor.h> | |
#include <android/log.h> | |
#include <android_native_app_glue.h> | |
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__)) | |
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__)) | |
struct android_app* app; | |
static int init_display(){ | |
const EGLint attribs[] = { | |
EGL_SURFACE_TYPE, EGL_WINDOW_BIT, | |
EGL_BLUE_SIZE, 8, | |
EGL_GREEN_SIZE, 8, | |
EGL_RED_SIZE, 8, | |
EGL_NONE | |
}; | |
EGLint w, h, dummy, format; | |
EGLint numConfigs; | |
EGLConfig config; | |
EGLSurface surface; | |
EGLContext context; | |
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); | |
eglInitialize(display, 0, 0); | |
eglChooseConfig(display, attribs, &config, 1, &numConfigs); | |
eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format); | |
ANativeWindow_setBuffersGeometry(app->window, 0, 0, format); | |
surface = eglCreateWindowSurface(display, config, app->window, NULL); | |
context = eglCreateContext(display, config, NULL, NULL); | |
if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) { | |
LOGW("Unable to eglMakeCurrent"); | |
return -1; | |
} | |
eglQuerySurface(display, surface, EGL_WIDTH, &w); | |
eglQuerySurface(display, surface, EGL_HEIGHT, &h); | |
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); | |
glEnable(GL_CULL_FACE); | |
glShadeModel(GL_SMOOTH); | |
glDisable(GL_DEPTH_TEST); | |
return 0; | |
} | |
static int32_t engine_handle_input(struct android_app* app, AInputEvent* event) { | |
return 1; | |
} | |
static void engine_handle_cmd(struct android_app* app, int32_t cmd) { | |
switch (cmd) { | |
case APP_CMD_SAVE_STATE: | |
break; | |
case APP_CMD_INIT_WINDOW: | |
if (app->window != NULL) { | |
init_display(); | |
} | |
break; | |
case APP_CMD_TERM_WINDOW: | |
break; | |
case APP_CMD_GAINED_FOCUS: | |
break; | |
case APP_CMD_LOST_FOCUS: | |
break; | |
} | |
} | |
void android_main(struct android_app* state) { | |
LOGI("Working"); | |
app_dummy(); | |
state->onAppCmd = engine_handle_cmd; | |
state->onInputEvent = engine_handle_input; | |
app = state; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment