Added a way to get the native Android window and EGL context

This commit is contained in:
Sam Lantinga 2014-06-02 09:01:26 -07:00
parent 3905b910f3
commit 32665131f6
4 changed files with 36 additions and 2 deletions

View File

@ -98,6 +98,11 @@ typedef struct _UIViewController UIViewController;
#endif #endif
#endif #endif
#if defined(SDL_VIDEO_DRIVER_ANDROID)
typedef struct ANativeWindow ANativeWindow;
typedef void *EGLSurface;
#endif
/** /**
* These are the various supported windowing subsystems * These are the various supported windowing subsystems
*/ */
@ -111,7 +116,8 @@ typedef enum
SDL_SYSWM_UIKIT, SDL_SYSWM_UIKIT,
SDL_SYSWM_WAYLAND, SDL_SYSWM_WAYLAND,
SDL_SYSWM_MIR, SDL_SYSWM_MIR,
SDL_SYSWM_WINRT SDL_SYSWM_WINRT,
SDL_SYSWM_ANDROID
} SDL_SYSWM_TYPE; } SDL_SYSWM_TYPE;
/** /**
@ -225,6 +231,14 @@ struct SDL_SysWMinfo
} mir; } mir;
#endif #endif
#if defined(SDL_VIDEO_DRIVER_ANDROID)
struct
{
ANativeWindow *window;
EGLSurface surface;
} android;
#endif
/* Can't have an empty union */ /* Can't have an empty union */
int dummy; int dummy;
} info; } info;

View File

@ -111,6 +111,7 @@ Android_CreateDevice(int devindex)
device->CreateWindow = Android_CreateWindow; device->CreateWindow = Android_CreateWindow;
device->SetWindowTitle = Android_SetWindowTitle; device->SetWindowTitle = Android_SetWindowTitle;
device->DestroyWindow = Android_DestroyWindow; device->DestroyWindow = Android_DestroyWindow;
device->GetWindowWMInfo = Android_GetWindowWMInfo;
device->free = Android_DeleteDevice; device->free = Android_DeleteDevice;

View File

@ -106,7 +106,7 @@ Android_DestroyWindow(_THIS, SDL_Window * window)
if (data->egl_surface != EGL_NO_SURFACE) { if (data->egl_surface != EGL_NO_SURFACE) {
SDL_EGL_DestroySurface(_this, data->egl_surface); SDL_EGL_DestroySurface(_this, data->egl_surface);
} }
if(data->native_window) { if (data->native_window) {
ANativeWindow_release(data->native_window); ANativeWindow_release(data->native_window);
} }
SDL_free(window->driverdata); SDL_free(window->driverdata);
@ -115,6 +115,24 @@ Android_DestroyWindow(_THIS, SDL_Window * window)
} }
} }
SDL_bool
Android_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info)
{
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
if (info->version.major == SDL_MAJOR_VERSION &&
info->version.minor == SDL_MINOR_VERSION) {
info->subsystem = SDL_SYSWM_ANDROID;
info->info.android.window = data->native_window;
info->info.android.surface = data->egl_surface;
return SDL_TRUE;
} else {
SDL_SetError("Application not compiled with SDL %d.%d\n",
SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
return SDL_FALSE;
}
}
#endif /* SDL_VIDEO_DRIVER_ANDROID */ #endif /* SDL_VIDEO_DRIVER_ANDROID */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -29,6 +29,7 @@
extern int Android_CreateWindow(_THIS, SDL_Window * window); extern int Android_CreateWindow(_THIS, SDL_Window * window);
extern void Android_SetWindowTitle(_THIS, SDL_Window * window); extern void Android_SetWindowTitle(_THIS, SDL_Window * window);
extern void Android_DestroyWindow(_THIS, SDL_Window * window); extern void Android_DestroyWindow(_THIS, SDL_Window * window);
extern SDL_bool Android_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info);
typedef struct typedef struct
{ {