From ba5c1f674511aff458dae69927a1c61d60e66aa1 Mon Sep 17 00:00:00 2001 From: Jesse Hall Date: Tue, 8 May 2012 15:44:35 -0700 Subject: Remove init-time GLES per-frame callback The GLES renderer interface now allows the per-frame callback to be registered after initialization. This change updates the emulator to use the new interface. Since reading back completed frames is slow (due to pipeline flush/stall), a future change will enable the callback only while multitouch emulation is actually in use. Change-Id: I7ad23b4bebe1bd3077863da4d50333cc0578519e --- android/opengles.c | 13 +++++++++++-- android/opengles.h | 12 ++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) (limited to 'android') diff --git a/android/opengles.c b/android/opengles.c index 70e3f8c..6f0556f 100644 --- a/android/opengles.c +++ b/android/opengles.c @@ -47,6 +47,7 @@ int android_gles_fast_pipes = 1; DYNLINK_FUNC(initLibrary) \ DYNLINK_FUNC(setStreamMode) \ DYNLINK_FUNC(initOpenGLRenderer) \ + DYNLINK_FUNC(setPostCallback) \ DYNLINK_FUNC(getHardwareStrings) \ DYNLINK_FUNC(createOpenGLSubwindow) \ DYNLINK_FUNC(destroyOpenGLSubwindow) \ @@ -139,20 +140,28 @@ BAD_EXIT: } int -android_startOpenglesRenderer(int width, int height, OnPostFunc onPost, void* onPostContext) +android_startOpenglesRenderer(int width, int height) { if (!rendererLib) { D("Can't start OpenGLES renderer without support libraries"); return -1; } - if (!initOpenGLRenderer(width, height, ANDROID_OPENGLES_BASE_PORT, onPost, onPostContext)) { + if (!initOpenGLRenderer(width, height, ANDROID_OPENGLES_BASE_PORT)) { D("Can't start OpenGLES renderer?"); return -1; } return 0; } +void +android_setPostCallback(OnPostFunc onPost, void* onPostContext) +{ + if (rendererLib) { + setPostCallback(onPost, onPostContext); + } +} + static void strncpy_safe(char* dst, const char* src, size_t n) { strncpy(dst, src, n); diff --git a/android/opengles.h b/android/opengles.h index 4e83c02..aac6249 100644 --- a/android/opengles.h +++ b/android/opengles.h @@ -16,10 +16,6 @@ #define ANDROID_OPENGLES_BASE_PORT 22468 -/* See the description in render_api.h. */ -typedef void (*OnPostFunc)(void* context, int width, int height, int ydir, - int format, int type, unsigned char* pixels); - /* Call this function to initialize the hardware opengles emulation. * This function will abort if we can't find the corresponding host * libraries through dlopen() or equivalent. @@ -30,8 +26,12 @@ int android_initOpenglesEmulation(void); * At the moment, this must be done before the VM starts. The onPost callback * may be NULL. */ -int android_startOpenglesRenderer(int width, int height, - OnPostFunc onPost, void* onPostContext); +int android_startOpenglesRenderer(int width, int height); + +/* See the description in render_api.h. */ +typedef void (*OnPostFunc)(void* context, int width, int height, int ydir, + int format, int type, unsigned char* pixels); +void android_setPostCallback(OnPostFunc onPost, void* onPostContext); /* Retrieve the Vendor/Renderer/Version strings describing the underlying GL * implementation. The call only works while the renderer is started. -- cgit v1.1