diff --git a/cogl/cogl-sdl.h b/cogl/cogl-sdl.h index 05da03668..0508649d2 100644 --- a/cogl/cogl-sdl.h +++ b/cogl/cogl-sdl.h @@ -29,6 +29,7 @@ #define __COGL_SDL_H__ #include +#include #include #ifdef _MSC_VER @@ -202,6 +203,22 @@ cogl_sdl_handle_event (CoglContext *context, SDL_Event *event); void cogl_sdl_idle (CoglContext *context); +#if SDL_MAJOR_VERSION >= 2 + +/** + * cogl_sdl_onscreen_get_window: + * @onscreen: A #CoglOnscreen + * + * Returns the underlying SDL_Window associated with an onscreen framebuffer. + * + * Since: 2.0 + * Stability: unstable + */ +SDL_Window * +cogl_sdl_onscreen_get_window (CoglOnscreen *onscreen); + +#endif /* SDL_MAJOR_VERSION */ + G_END_DECLS #endif /* __COGL_SDL_H__ */ diff --git a/cogl/winsys/cogl-winsys-sdl2.c b/cogl/winsys/cogl-winsys-sdl2.c index 1c0fc3167..8c0c256ed 100644 --- a/cogl/winsys/cogl-winsys-sdl2.c +++ b/cogl/winsys/cogl-winsys-sdl2.c @@ -38,6 +38,7 @@ #include "cogl-onscreen-private.h" #include "cogl-winsys-sdl-private.h" #include "cogl-error-private.h" +#include "cogl-sdl.h" typedef struct _CoglContextSdl2 { @@ -510,6 +511,21 @@ _cogl_winsys_poll_dispatch (CoglContext *context, } } +SDL_Window * +cogl_sdl_onscreen_get_window (CoglOnscreen *onscreen) +{ + CoglOnscreenSdl2 *sdl_onscreen; + + _COGL_RETURN_VAL_IF_FAIL (cogl_is_onscreen (onscreen), NULL); + + if (!cogl_framebuffer_allocate (COGL_FRAMEBUFFER (onscreen), NULL)) + return NULL; + + sdl_onscreen = onscreen->winsys; + + return sdl_onscreen->window; +} + const CoglWinsysVtable * _cogl_winsys_sdl_get_vtable (void) { diff --git a/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt b/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt index 194495185..5ccab9e60 100644 --- a/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt +++ b/doc/reference/cogl-2.0-experimental/cogl-2.0-experimental-sections.txt @@ -822,4 +822,5 @@ cogl_sdl_renderer_set_event_type cogl_sdl_renderer_get_event_type cogl_sdl_handle_event cogl_sdl_idle +cogl_sdl_onscreen_get_window