diff --git a/build/win32/vs10/cogl-sdl2-hello.vcxproj b/build/win32/vs10/cogl-sdl2-hello.vcxproj
deleted file mode 100644
index 874d43d64..000000000
--- a/build/win32/vs10/cogl-sdl2-hello.vcxproj
+++ /dev/null
@@ -1,173 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- {0B5D144D-1872-42CD-8437-FFDCDD08C03E}
- coglsdl2hello
- Win32Proj
-
-
-
- Application
- MultiByte
- true
- v100
-
-
- Application
- MultiByte
- v100
-
-
- Application
- MultiByte
- true
- v100
-
-
- Application
- MultiByte
- v100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <_ProjectFileVersion>10.0.40219.1
- true
- true
- false
- false
-
-
-
- Disabled
- _DEBUG;COGL_ENABLE_EXPERIMENTAL_2_0_API;$(BaseBuildDefines);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- EditAndContinue
-
-
- SDL2.lib;SDL2main.lib;%(AdditionalDependencies)
- true
- Console
- MachineX86
-
-
-
-
- Disabled
- _DEBUG;COGL_ENABLE_EXPERIMENTAL_2_0_API;$(BaseBuildDefines);%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebugDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- SDL2.lib;SDL2main.lib;%(AdditionalDependencies)
- true
- Console
- false
-
-
- MachineX64
-
-
-
-
- MaxSpeed
- true
- COGL_ENABLE_EXPERIMENTAL_2_0_API;$(BaseBuildDefines);%(PreprocessorDefinitions)
- MultiThreadedDLL
- true
-
-
- Level3
- ProgramDatabase
-
-
- SDL2.lib;SDL2main.lib;%(AdditionalDependencies)
- true
- Console
- true
- true
- MachineX86
-
-
-
-
- COGL_ENABLE_EXPERIMENTAL_2_0_API;$(BaseBuildDefines);%(PreprocessorDefinitions)
- MultiThreadedDLL
-
-
- Level3
- ProgramDatabase
- CompileAsC
-
-
- SDL2.lib;SDL2main.lib;%(AdditionalDependencies)
- true
- Console
- true
- true
- false
-
-
- MachineX64
-
-
-
-
-
-
-
- {f3a80987-5411-43db-a23b-06f2076e1206}
- false
-
-
-
-
-
-
diff --git a/build/win32/vs10/cogl-sdl2-hello.vcxproj.filters b/build/win32/vs10/cogl-sdl2-hello.vcxproj.filters
deleted file mode 100644
index 967dc658e..000000000
--- a/build/win32/vs10/cogl-sdl2-hello.vcxproj.filters
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
- cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
-
-
-
-
- Sources
-
-
-
\ No newline at end of file
diff --git a/build/win32/vs9/cogl-sdl2-hello.vcproj b/build/win32/vs9/cogl-sdl2-hello.vcproj
deleted file mode 100644
index 822ce1861..000000000
--- a/build/win32/vs9/cogl-sdl2-hello.vcproj
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/cogl/Makefile.am b/cogl/Makefile.am
index ebd062e5b..53407f01c 100644
--- a/cogl/Makefile.am
+++ b/cogl/Makefile.am
@@ -503,20 +503,6 @@ cogl_sources_c += \
winsys/cogl-winsys-egl-feature-functions.h \
winsys/cogl-winsys-egl-private.h
endif
-if SUPPORT_SDL
-cogl_experimental_h += $(srcdir)/cogl-sdl.h
-cogl_sources_c += \
- winsys/cogl-winsys-sdl-private.h \
- winsys/cogl-winsys-sdl.c \
- cogl-sdl.c
-endif
-if SUPPORT_SDL2
-cogl_experimental_h += $(srcdir)/cogl-sdl.h
-cogl_sources_c += \
- winsys/cogl-winsys-sdl-private.h \
- winsys/cogl-winsys-sdl2.c \
- cogl-sdl.c
-endif
EXTRA_DIST += stb_image.c
@@ -643,8 +629,6 @@ cogl.vsenums_c:
EXTRA_DIST += \
cogl-defines.h.win32.in \
cogl-defines.h.win32 \
- cogl-defines.h.win32_SDL.in \
- cogl-defines.h.win32_SDL \
cogl-gl-header.h.win32 \
cogl.symbols \
cogl.rc.in \
diff --git a/cogl/cogl-defines.h.win32_SDL.in b/cogl/cogl-defines.h.win32_SDL.in
deleted file mode 100644
index acd246b26..000000000
--- a/cogl/cogl-defines.h.win32_SDL.in
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Cogl
- *
- * A Low Level GPU Graphics and Utilities API
- *
- * Copyright (C) 2007,2008,2009,2010 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- *
- */
-
-#if !defined(__COGL_H_INSIDE__) && !defined(COGL_COMPILATION)
-#error "Only can be included directly."
-#endif
-
-#ifndef __COGL_DEFINES_H__
-#define __COGL_DEFINES_H__
-
-#include
-
-G_BEGIN_DECLS
-
-#define COGL_HAS_GLIB_SUPPORT 1
-#define COGL_HAS_GTYPE_SUPPORT 1
-#define COGL_HAS_WGL_SUPPORT 1
-#define COGL_HAS_WIN32_SUPPORT 1
-#define COGL_HAS_SDL_SUPPORT 1
-#define COGL_HAS_COGL_PATH_SUPPORT 1
-#define COGL_HAS_GL 1
-#define CLUTTER_COGL_HAS_GL 1
-
-#ifdef COGL_HAS_EGL_SUPPORT
-#ifdef COGL_HAS_GLES1
-#include
-#include
-#else
-#include
-#endif
-#endif
-
-#ifndef GL_OES_EGL_image
-#define GLeglImageOES void *
-#endif
-
-#define COGL_SYSDEF_POLLIN 1
-#define COGL_SYSDEF_POLLPRI 2
-#define COGL_SYSDEF_POLLOUT 4
-#define COGL_SYSDEF_POLLERR 8
-#define COGL_SYSDEF_POLLHUP 16
-#define COGL_SYSDEF_POLLNVAL 32
-
-#define COGL_VERSION_MAJOR_INTERNAL @COGL_MAJOR_VERSION@
-#define COGL_VERSION_MINOR_INTERNAL @COGL_MINOR_VERSION@
-#define COGL_VERSION_MICRO_INTERNAL @COGL_MICRO_VERSION@
-#define COGL_VERSION_STRING_INTERNAL "@COGL_VERSION@"
-
-G_END_DECLS
-
-#endif
diff --git a/cogl/cogl-renderer-private.h b/cogl/cogl-renderer-private.h
index 0f309e653..7ca7030d7 100644
--- a/cogl/cogl-renderer-private.h
+++ b/cogl/cogl-renderer-private.h
@@ -100,11 +100,6 @@ struct _CoglRenderer
int kms_fd;
#endif
-#ifdef COGL_HAS_SDL_SUPPORT
- CoglBool sdl_event_type_set;
- uint32_t sdl_event_type;
-#endif
-
/* List of callback functions that will be given every native event */
GSList *event_filters;
void *winsys;
diff --git a/cogl/cogl-renderer.c b/cogl/cogl-renderer.c
index bae3a014c..a6d941efe 100644
--- a/cogl/cogl-renderer.c
+++ b/cogl/cogl-renderer.c
@@ -72,9 +72,6 @@
#ifdef COGL_HAS_WGL_SUPPORT
#include "cogl-winsys-wgl-private.h"
#endif
-#ifdef COGL_HAS_SDL_SUPPORT
-#include "cogl-winsys-sdl-private.h"
-#endif
#ifdef COGL_HAS_XLIB_SUPPORT
#include "cogl-xlib-renderer.h"
@@ -163,21 +160,6 @@ static CoglDriverDescription _cogl_drivers[] =
&_cogl_texture_driver_gles,
COGL_GLES1_LIBNAME,
},
-#endif
-#ifdef USING_EMSCRIPTEN
- {
- COGL_DRIVER_WEBGL,
- "webgl",
- 0,
- { COGL_PRIVATE_FEATURE_ANY_GL,
- COGL_PRIVATE_FEATURE_GL_EMBEDDED,
- COGL_PRIVATE_FEATURE_GL_PROGRAMMABLE,
- COGL_PRIVATE_FEATURE_GL_WEB,
- -1 },
- &_cogl_driver_gles,
- &_cogl_texture_driver_gles,
- NULL,
- },
#endif
{
COGL_DRIVER_NOP,
@@ -212,9 +194,6 @@ static CoglWinsysVtableGetter _cogl_winsys_vtable_getters[] =
#endif
#ifdef COGL_HAS_WGL_SUPPORT
_cogl_winsys_wgl_get_vtable,
-#endif
-#ifdef COGL_HAS_SDL_SUPPORT
- _cogl_winsys_sdl_get_vtable,
#endif
_cogl_winsys_stub_get_vtable,
};
diff --git a/cogl/cogl-renderer.h b/cogl/cogl-renderer.h
index 3c3cc260f..d4e289a3a 100644
--- a/cogl/cogl-renderer.h
+++ b/cogl/cogl-renderer.h
@@ -168,7 +168,6 @@ cogl_renderer_new (void);
* @COGL_WINSYS_ID_EGL_ANDROID: Use EGL with the Android platform
* @COGL_WINSYS_ID_EGL_MIR: Use EGL with the Mir server
* @COGL_WINSYS_ID_WGL: Use the Microsoft Windows WGL binding API
- * @COGL_WINSYS_ID_SDL: Use the SDL window system
*
* Identifies specific window system backends that Cogl supports.
*
@@ -186,7 +185,6 @@ typedef enum
COGL_WINSYS_ID_EGL_ANDROID,
COGL_WINSYS_ID_EGL_MIR,
COGL_WINSYS_ID_WGL,
- COGL_WINSYS_ID_SDL
} CoglWinsysID;
/**
diff --git a/cogl/cogl-sdl.c b/cogl/cogl-sdl.c
deleted file mode 100644
index 1eb2eb639..000000000
--- a/cogl/cogl-sdl.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Cogl
- *
- * A Low Level GPU Graphics and Utilities API
- *
- * Copyright (C) 2012, 2013 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "cogl-sdl.h"
-#include "cogl-context-private.h"
-#include "cogl-renderer-private.h"
-
-void
-cogl_sdl_renderer_set_event_type (CoglRenderer *renderer, int type)
-{
- renderer->sdl_event_type_set = TRUE;
- renderer->sdl_event_type = type;
-}
-
-int
-cogl_sdl_renderer_get_event_type (CoglRenderer *renderer)
-{
- _COGL_RETURN_VAL_IF_FAIL (renderer->sdl_event_type_set, SDL_USEREVENT);
-
- return renderer->sdl_event_type;
-}
-
-CoglContext *
-cogl_sdl_context_new (int type, CoglError **error)
-{
- CoglRenderer *renderer = cogl_renderer_new ();
- CoglDisplay *display;
-
- cogl_renderer_set_winsys_id (renderer, COGL_WINSYS_ID_SDL);
-
- cogl_sdl_renderer_set_event_type (renderer, type);
-
- if (!cogl_renderer_connect (renderer, error))
- return NULL;
-
- display = cogl_display_new (renderer, NULL);
- if (!cogl_display_setup (display, error))
- return NULL;
-
- return cogl_context_new (display, error);
-}
-
-void
-cogl_sdl_handle_event (CoglContext *context, SDL_Event *event)
-{
- CoglRenderer *renderer;
-
- _COGL_RETURN_IF_FAIL (cogl_is_context (context));
-
- renderer = context->display->renderer;
-
- _cogl_renderer_handle_native_event (renderer, event);
-}
-
-static void
-_cogl_sdl_push_wakeup_event (CoglContext *context)
-{
- SDL_Event wakeup_event;
-
- wakeup_event.type = context->display->renderer->sdl_event_type;
-
- SDL_PushEvent (&wakeup_event);
-}
-
-void
-cogl_sdl_idle (CoglContext *context)
-{
- CoglRenderer *renderer = context->display->renderer;
-
- cogl_poll_renderer_dispatch (renderer, NULL, 0);
-
- /* It is expected that this will be called from the application
- * immediately before blocking in SDL_WaitEvent. However,
- * dispatching cause more work to be queued. If that happens we need
- * to make sure the blocking returns immediately. We'll post our
- * dummy event to make sure that happens
- */
- if (!_cogl_list_empty (&renderer->idle_closures))
- _cogl_sdl_push_wakeup_event (context);
-}
diff --git a/cogl/cogl-sdl.h b/cogl/cogl-sdl.h
deleted file mode 100644
index 44d308db9..000000000
--- a/cogl/cogl-sdl.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Cogl
- *
- * A Low Level GPU Graphics and Utilities API
- *
- * Copyright (C) 2012 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- *
- */
-
-#ifndef __COGL_SDL_H__
-#define __COGL_SDL_H__
-
-/* NB: this is a top-level header that can be included directly but we
- * want to be careful not to define __COGL_H_INSIDE__ when this is
- * included internally while building Cogl itself since
- * __COGL_H_INSIDE__ is used in headers to guard public vs private api
- * definitions
- */
-#ifndef COGL_COMPILATION
-
-/* Note: When building Cogl .gir we explicitly define
- * __COGL_H_INSIDE__ */
-#ifndef __COGL_H_INSIDE__
-#define __COGL_H_INSIDE__
-#define __COGL_SDL_H_MUST_UNDEF_COGL_H_INSIDE__
-#endif
-
-#endif /* COGL_COMPILATION */
-
-#include
-#include
-#include
-
-COGL_BEGIN_DECLS
-
-/**
- * SECTION:cogl-sdl
- * @short_description: Integration api for the Simple DirectMedia
- * Layer library.
- *
- * Cogl is a portable graphics api that can either be used standalone
- * or alternatively integrated with certain existing frameworks. This
- * api enables Cogl to be used in conjunction with the Simple
- * DirectMedia Layer library.
- *
- * Using this API a typical SDL application would look something like
- * this:
- * |[
- * MyAppData data;
- * CoglError *error = NULL;
- *
- * data.ctx = cogl_sdl_context_new (SDL_USEREVENT, &error);
- * if (!data.ctx)
- * {
- * fprintf (stderr, "Failed to create context: %s\n",
- * error->message);
- * return 1;
- * }
- *
- * my_application_setup (&data);
- *
- * data.redraw_queued = TRUE;
- * while (!data.quit)
- * {
- * while (!data.quit)
- * {
- * if (!SDL_PollEvent (&event))
- * {
- * if (data.redraw_queued)
- * break;
- *
- * cogl_sdl_idle (ctx);
- * if (!SDL_WaitEvent (&event))
- * {
- * fprintf (stderr, "Error waiting for SDL events");
- * return 1;
- * }
- * }
- *
- * handle_event (&data, &event);
- * cogl_sdl_handle_event (ctx, &event);
- * }
- *
- * data.redraw_queued = redraw (&data);
- * }
- * ]|
- */
-
-/**
- * cogl_sdl_context_new:
- * @type: An SDL user event type between SDL_USEREVENT and
- * SDL_NUMEVENTS - 1
- * @error: A CoglError return location.
- *
- * This is a convenience function for creating a new #CoglContext for
- * use with SDL and specifying what SDL user event type Cogl can use
- * as a way to interrupt SDL_WaitEvent().
- *
- * This function is equivalent to the following code:
- * |[
- * CoglRenderer *renderer = cogl_renderer_new ();
- * CoglDisplay *display;
- *
- * cogl_renderer_set_winsys_id (renderer, COGL_WINSYS_ID_SDL);
- *
- * cogl_sdl_renderer_set_event_type (renderer, type);
- *
- * if (!cogl_renderer_connect (renderer, error))
- * return NULL;
- *
- * display = cogl_display_new (renderer, NULL);
- * if (!cogl_display_setup (display, error))
- * return NULL;
- *
- * return cogl_context_new (display, error);
- * ]|
- *
- * SDL applications are required to either use this API or
- * to manually create a #CoglRenderer and call
- * cogl_sdl_renderer_set_event_type().
- *
- * Since: 2.0
- * Stability: unstable
- */
-CoglContext *
-cogl_sdl_context_new (int type, CoglError **error);
-
-/**
- * cogl_sdl_renderer_set_event_type:
- * @renderer: A #CoglRenderer
- * @type: An SDL user event type between SDL_USEREVENT and
- * SDL_NUMEVENTS - 1
- *
- * Tells Cogl what SDL user event type it can use as a way to
- * interrupt SDL_WaitEvent() to ensure that cogl_sdl_handle_event()
- * will be called in a finite amount of time.
- *
- * This should only be called on an un-connected
- * @renderer.
- *
- * For convenience most simple applications can use
- * cogl_sdl_context_new() if they don't want to manually create
- * #CoglRenderer and #CoglDisplay objects during
- * initialization.
- *
- * Since: 2.0
- * Stability: unstable
- */
-void
-cogl_sdl_renderer_set_event_type (CoglRenderer *renderer, int type);
-
-/**
- * cogl_sdl_renderer_get_event_type:
- * @renderer: A #CoglRenderer
- *
- * Queries what SDL user event type Cogl is using as a way to
- * interrupt SDL_WaitEvent(). This is set either using
- * cogl_sdl_context_new or by using
- * cogl_sdl_renderer_set_event_type().
- *
- * Since: 2.0
- * Stability: unstable
- */
-int
-cogl_sdl_renderer_get_event_type (CoglRenderer *renderer);
-
-/**
- * cogl_sdl_handle_event:
- * @context: A #CoglContext
- * @event: An SDL event
- *
- * Passes control to Cogl so that it may dispatch any internal event
- * callbacks in response to the given SDL @event. This function must
- * be called for every SDL event.
- *
- * Since: 2.0
- * Stability: unstable
- */
-void
-cogl_sdl_handle_event (CoglContext *context, SDL_Event *event);
-
-/**
- * cogl_sdl_idle:
- * @context: A #CoglContext
- *
- * Notifies Cogl that the application is idle and about to call
- * SDL_WaitEvent(). Cogl may use this to run low priority book keeping
- * tasks.
- *
- * Since: 2.0
- * Stability: unstable
- */
-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 */
-
-COGL_END_DECLS
-
-/* The gobject introspection scanner seems to parse public headers in
- * isolation which means we need to be extra careful about how we
- * define and undefine __COGL_H_INSIDE__ used to detect when internal
- * headers are incorrectly included by developers. In the gobject
- * introspection case we have to manually define __COGL_H_INSIDE__ as
- * a commandline argument for the scanner which means we must be
- * careful not to undefine it in a header...
- */
-#ifdef __COGL_SDL_H_MUST_UNDEF_COGL_H_INSIDE__
-#undef __COGL_H_INSIDE__
-#undef __COGL_SDL_H_MUST_UNDEF_COGL_H_INSIDE__
-#endif
-
-#endif /* __COGL_SDL_H__ */
diff --git a/cogl/winsys/cogl-winsys-sdl-private.h b/cogl/winsys/cogl-winsys-sdl-private.h
deleted file mode 100644
index 4fffa6d27..000000000
--- a/cogl/winsys/cogl-winsys-sdl-private.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Cogl
- *
- * A Low Level GPU Graphics and Utilities API
- *
- * Copyright (C) 2012 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- *
- */
-
-#ifndef __COGL_WINSYS_SDL_PRIVATE_H
-#define __COGL_WINSYS_SDL_PRIVATE_H
-
-const CoglWinsysVtable *
-_cogl_winsys_sdl_get_vtable (void);
-
-#endif /* __COGL_WINSYS_SDL_PRIVATE_H */
diff --git a/cogl/winsys/cogl-winsys-sdl.c b/cogl/winsys/cogl-winsys-sdl.c
deleted file mode 100644
index 322ca1bf5..000000000
--- a/cogl/winsys/cogl-winsys-sdl.c
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * Cogl
- *
- * A Low Level GPU Graphics and Utilities API
- *
- * Copyright (C) 2011,2013 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- *
- * Authors:
- * Neil Roberts
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include
-
-#include "cogl-renderer-private.h"
-#include "cogl-display-private.h"
-#include "cogl-framebuffer-private.h"
-#include "cogl-swap-chain-private.h"
-#include "cogl-onscreen-template-private.h"
-#include "cogl-context-private.h"
-#include "cogl-onscreen-private.h"
-#include "cogl-winsys-sdl-private.h"
-#include "cogl-error-private.h"
-#include "cogl-poll-private.h"
-
-typedef struct _CoglRendererSdl
-{
- CoglClosure *resize_notify_idle;
-} CoglRendererSdl;
-
-typedef struct _CoglDisplaySdl
-{
- SDL_Surface *surface;
- CoglOnscreen *onscreen;
- Uint32 video_mode_flags;
-} CoglDisplaySdl;
-
-static CoglFuncPtr
-_cogl_winsys_renderer_get_proc_address (CoglRenderer *renderer,
- const char *name,
- CoglBool in_core)
-{
- CoglFuncPtr ptr;
-
- /* XXX: It's not totally clear whether it's safe to call this for
- * core functions. From the code it looks like the implementations
- * will fall back to using some form of dlsym if the winsys
- * GetProcAddress function returns NULL. Presumably this will work
- * in most cases apart from EGL platforms that return invalid
- * pointers for core functions. It's awkward for this code to get a
- * handle to the GL module that SDL has chosen to load so just
- * calling SDL_GL_GetProcAddress is probably the best we can do
- * here. */
-
-#ifdef COGL_HAS_SDL_GLES_SUPPORT
- if (renderer->driver != COGL_DRIVER_GL)
- return SDL_GLES_GetProcAddress (name);
-#endif
-
- return SDL_GL_GetProcAddress (name);
-}
-
-static void
-_cogl_winsys_renderer_disconnect (CoglRenderer *renderer)
-{
- SDL_Quit ();
-
- g_slice_free (CoglRendererSdl, renderer->winsys);
-}
-
-static CoglBool
-_cogl_winsys_renderer_connect (CoglRenderer *renderer,
- CoglError **error)
-{
-#ifdef USING_EMSCRIPTEN
- if (renderer->driver != COGL_DRIVER_GLES2)
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "The SDL winsys with emscripten only supports "
- "the GLES2 driver");
- return FALSE;
- }
-#elif !defined (COGL_HAS_SDL_GLES_SUPPORT)
- if (renderer->driver != COGL_DRIVER_GL)
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "The SDL winsys only supports the GL driver");
- return FALSE;
- }
-#endif
-
- if (SDL_Init (SDL_INIT_VIDEO) == -1)
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "SDL_Init failed: %s",
- SDL_GetError ());
- return FALSE;
- }
-
- renderer->winsys = g_slice_new0 (CoglRendererSdl);
-
- return TRUE;
-}
-
-static void
-_cogl_winsys_display_destroy (CoglDisplay *display)
-{
- CoglDisplaySdl *sdl_display = display->winsys;
-
- _COGL_RETURN_IF_FAIL (sdl_display != NULL);
-
- /* No need to destroy the surface - it is freed by SDL_Quit */
-
- g_slice_free (CoglDisplaySdl, display->winsys);
- display->winsys = NULL;
-}
-
-static void
-set_gl_attribs_from_framebuffer_config (CoglFramebufferConfig *config)
-{
- SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 1);
- SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 1);
- SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 1);
- SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 1);
-
- SDL_GL_SetAttribute (SDL_GL_STENCIL_SIZE,
- config->need_stencil ? 1 : 0);
-
- if (config->swap_chain->length >= 0)
- SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER,
- config->swap_chain->length > 1 ? 1 : 0);
-
- SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE,
- config->swap_chain->has_alpha ? 1 : 0);
-}
-
-static CoglBool
-_cogl_winsys_display_setup (CoglDisplay *display,
- CoglError **error)
-{
- CoglDisplaySdl *sdl_display;
-
- _COGL_RETURN_VAL_IF_FAIL (display->winsys == NULL, FALSE);
-
- sdl_display = g_slice_new0 (CoglDisplaySdl);
- display->winsys = sdl_display;
-
- set_gl_attribs_from_framebuffer_config (&display->onscreen_template->config);
-
- switch (display->renderer->driver)
- {
- case COGL_DRIVER_GL:
- sdl_display->video_mode_flags = SDL_OPENGL;
- break;
-
- case COGL_DRIVER_GL3:
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "The SDL winsys does not support GL 3");
- goto error;
-
-#ifdef COGL_HAS_SDL_GLES_SUPPORT
- case COGL_DRIVER_GLES2:
- sdl_display->video_mode_flags = SDL_OPENGLES;
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 2);
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_MINOR_VERSION, 0);
- break;
-
- case COGL_DRIVER_GLES1:
- sdl_display->video_mode_flags = SDL_OPENGLES;
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 1);
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_MINOR_VERSION, 1);
- break;
-
-#elif defined (USING_EMSCRIPTEN)
- case COGL_DRIVER_GLES2:
- sdl_display->video_mode_flags = SDL_OPENGL;
- break;
-#endif
-
- default:
- g_assert_not_reached ();
- }
-
- /* There's no way to know what size the application will need until
- it creates the first onscreen but we need to set the video mode
- now so that we can get a GL context. We'll have to just guess at
- a size an resize it later */
- sdl_display->surface = SDL_SetVideoMode (640, 480, /* width/height */
- 0, /* bitsperpixel */
- sdl_display->video_mode_flags);
-
- if (sdl_display->surface == NULL)
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "SDL_SetVideoMode failed: %s",
- SDL_GetError ());
- goto error;
- }
-
- return TRUE;
-
-error:
- _cogl_winsys_display_destroy (display);
- return FALSE;
-}
-
-static void
-flush_pending_resize_notification_idle (void *user_data)
-{
- CoglContext *context = user_data;
- CoglRenderer *renderer = context->display->renderer;
- CoglRendererSdl *sdl_renderer = renderer->winsys;
- CoglDisplaySdl *sdl_display = context->display->winsys;
- CoglOnscreen *onscreen = sdl_display->onscreen;
-
- /* This needs to be disconnected before invoking the callbacks in
- * case the callbacks cause it to be queued again */
- _cogl_closure_disconnect (sdl_renderer->resize_notify_idle);
- sdl_renderer->resize_notify_idle = NULL;
-
- _cogl_onscreen_notify_resize (onscreen);
-}
-
-static CoglFilterReturn
-sdl_event_filter_cb (SDL_Event *event, void *data)
-{
- CoglContext *context = data;
- CoglDisplay *display = context->display;
- CoglDisplaySdl *sdl_display = display->winsys;
- CoglFramebuffer *framebuffer;
-
- if (!sdl_display->onscreen)
- return COGL_FILTER_CONTINUE;
-
- framebuffer = COGL_FRAMEBUFFER (sdl_display->onscreen);
-
- if (event->type == SDL_VIDEORESIZE)
- {
- CoglRenderer *renderer = display->renderer;
- CoglRendererSdl *sdl_renderer = renderer->winsys;
- float width = event->resize.w;
- float height = event->resize.h;
-
- sdl_display->surface = SDL_SetVideoMode (width, height,
- 0, /* bitsperpixel */
- sdl_display->video_mode_flags);
-
- _cogl_framebuffer_winsys_update_size (framebuffer, width, height);
-
- /* We only want to notify that a resize happened when the
- * application calls cogl_context_dispatch so instead of
- * immediately notifying we queue an idle callback */
- if (!sdl_renderer->resize_notify_idle)
- {
- sdl_renderer->resize_notify_idle =
- _cogl_poll_renderer_add_idle (renderer,
- flush_pending_resize_notification_idle,
- context,
- NULL);
- }
-
- return COGL_FILTER_CONTINUE;
- }
- else if (event->type == SDL_VIDEOEXPOSE)
- {
- CoglOnscreenDirtyInfo info;
-
- /* Sadly SDL doesn't seem to report the rectangle of the expose
- * event so we'll just queue the whole window */
- info.x = 0;
- info.y = 0;
- info.width = framebuffer->width;
- info.height = framebuffer->height;
-
- _cogl_onscreen_queue_dirty (COGL_ONSCREEN (framebuffer), &info);
- }
-
- return COGL_FILTER_CONTINUE;
-}
-
-static CoglBool
-_cogl_winsys_context_init (CoglContext *context, CoglError **error)
-{
- CoglRenderer *renderer = context->display->renderer;
-
- if (G_UNLIKELY (renderer->sdl_event_type_set == FALSE))
- g_error ("cogl_sdl_renderer_set_event_type() or cogl_sdl_context_new() "
- "must be called during initialization");
-
- _cogl_renderer_add_native_filter (renderer,
- (CoglNativeFilterFunc)sdl_event_filter_cb,
- context);
-
- /* We'll manually handle queueing dirty events in response to
- * SDL_VIDEOEXPOSE events */
- COGL_FLAGS_SET (context->private_features,
- COGL_PRIVATE_FEATURE_DIRTY_EVENTS,
- TRUE);
-
- return _cogl_context_update_features (context, error);
-}
-
-static void
-_cogl_winsys_context_deinit (CoglContext *context)
-{
-}
-
-static void
-_cogl_winsys_onscreen_bind (CoglOnscreen *onscreen)
-{
-}
-
-static void
-_cogl_winsys_onscreen_deinit (CoglOnscreen *onscreen)
-{
- CoglContext *context = COGL_FRAMEBUFFER (onscreen)->context;
- CoglDisplay *display = context->display;
- CoglDisplaySdl *sdl_display = display->winsys;
-
- sdl_display->onscreen = NULL;
-}
-
-static CoglBool
-_cogl_winsys_onscreen_init (CoglOnscreen *onscreen,
- CoglError **error)
-{
- CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
- CoglContext *context = framebuffer->context;
- CoglDisplay *display = context->display;
- CoglDisplaySdl *sdl_display = display->winsys;
- CoglBool flags_changed = FALSE;
- int width, height;
-
- if (sdl_display->onscreen)
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_CREATE_ONSCREEN,
- "SDL winsys only supports a single onscreen window");
- return FALSE;
- }
-
- width = cogl_framebuffer_get_width (framebuffer);
- height = cogl_framebuffer_get_height (framebuffer);
-
- if (cogl_onscreen_get_resizable (onscreen))
- {
- sdl_display->video_mode_flags |= SDL_RESIZABLE;
- flags_changed = TRUE;
- }
-
- /* Try to update the video size using the onscreen size */
- if (width != sdl_display->surface->w ||
- height != sdl_display->surface->h ||
- flags_changed)
- {
- sdl_display->surface = SDL_SetVideoMode (width, height,
- 0, /* bitsperpixel */
- sdl_display->video_mode_flags);
-
- if (sdl_display->surface == NULL)
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_CREATE_ONSCREEN,
- "SDL_SetVideoMode failed: %s",
- SDL_GetError ());
- return FALSE;
- }
- }
-
- _cogl_framebuffer_winsys_update_size (framebuffer,
- sdl_display->surface->w,
- sdl_display->surface->h);
-
- sdl_display->onscreen = onscreen;
-
- return TRUE;
-}
-
-static void
-_cogl_winsys_onscreen_swap_buffers_with_damage (CoglOnscreen *onscreen,
- const int *rectangles,
- int n_rectangles)
-{
- SDL_GL_SwapBuffers ();
-}
-
-static void
-_cogl_winsys_onscreen_update_swap_throttled (CoglOnscreen *onscreen)
-{
- /* SDL doesn't appear to provide a way to set this */
-}
-
-static void
-_cogl_winsys_onscreen_set_visibility (CoglOnscreen *onscreen,
- CoglBool visibility)
-{
- /* SDL doesn't appear to provide a way to set this */
-}
-
-static void
-_cogl_winsys_onscreen_set_resizable (CoglOnscreen *onscreen,
- CoglBool resizable)
-{
- CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
- CoglContext *context = framebuffer->context;
- CoglDisplay *display = context->display;
- CoglDisplaySdl *sdl_display = display->winsys;
- int width, height;
-
- width = cogl_framebuffer_get_width (framebuffer);
- height = cogl_framebuffer_get_height (framebuffer);
-
- if (resizable)
- sdl_display->video_mode_flags |= SDL_RESIZABLE;
- else
- sdl_display->video_mode_flags &= ~SDL_RESIZABLE;
-
- sdl_display->surface = SDL_SetVideoMode (width, height,
- 0, /* bitsperpixel */
- sdl_display->video_mode_flags);
-}
-
-const CoglWinsysVtable *
-_cogl_winsys_sdl_get_vtable (void)
-{
- static CoglBool vtable_inited = FALSE;
- static CoglWinsysVtable vtable;
-
- /* It would be nice if we could use C99 struct initializers here
- like the GLX backend does. However this code is more likely to be
- compiled using Visual Studio which (still!) doesn't support them
- so we initialize it in code instead */
-
- if (!vtable_inited)
- {
- memset (&vtable, 0, sizeof (vtable));
-
- vtable.id = COGL_WINSYS_ID_SDL;
- vtable.name = "SDL";
- vtable.renderer_get_proc_address = _cogl_winsys_renderer_get_proc_address;
- vtable.renderer_connect = _cogl_winsys_renderer_connect;
- vtable.renderer_disconnect = _cogl_winsys_renderer_disconnect;
- vtable.display_setup = _cogl_winsys_display_setup;
- vtable.display_destroy = _cogl_winsys_display_destroy;
- vtable.context_init = _cogl_winsys_context_init;
- vtable.context_deinit = _cogl_winsys_context_deinit;
- vtable.onscreen_init = _cogl_winsys_onscreen_init;
- vtable.onscreen_deinit = _cogl_winsys_onscreen_deinit;
- vtable.onscreen_bind = _cogl_winsys_onscreen_bind;
- vtable.onscreen_swap_buffers_with_damage =
- _cogl_winsys_onscreen_swap_buffers_with_damage;
- vtable.onscreen_update_swap_throttled =
- _cogl_winsys_onscreen_update_swap_throttled;
- vtable.onscreen_set_visibility = _cogl_winsys_onscreen_set_visibility;
- vtable.onscreen_set_resizable = _cogl_winsys_onscreen_set_resizable;
-
- vtable_inited = TRUE;
- }
-
- return &vtable;
-}
diff --git a/cogl/winsys/cogl-winsys-sdl2.c b/cogl/winsys/cogl-winsys-sdl2.c
deleted file mode 100644
index c6661d930..000000000
--- a/cogl/winsys/cogl-winsys-sdl2.c
+++ /dev/null
@@ -1,638 +0,0 @@
-/*
- * Cogl
- *
- * A Low Level GPU Graphics and Utilities API
- *
- * Copyright (C) 2011, 2012, 2013 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use, copy,
- * modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- *
- * Authors:
- * Neil Roberts
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include
-
-#include "cogl-renderer-private.h"
-#include "cogl-display-private.h"
-#include "cogl-framebuffer-private.h"
-#include "cogl-swap-chain-private.h"
-#include "cogl-onscreen-template-private.h"
-#include "cogl-context-private.h"
-#include "cogl-onscreen-private.h"
-#include "cogl-winsys-sdl-private.h"
-#include "cogl-error-private.h"
-#include "cogl-poll-private.h"
-#include "cogl-sdl.h"
-
-typedef struct _CoglContextSdl2
-{
- SDL_Window *current_window;
-} CoglContextSdl2;
-
-typedef struct _CoglRendererSdl2
-{
- CoglClosure *resize_notify_idle;
-} CoglRendererSdl2;
-
-typedef struct _CoglDisplaySdl2
-{
- SDL_Window *dummy_window;
- SDL_GLContext *context;
-} CoglDisplaySdl2;
-
-typedef struct _CoglOnscreenSdl2
-{
- SDL_Window *window;
- CoglBool pending_resize_notify;
-} CoglOnscreenSdl2;
-
-/* The key used to store a pointer to the CoglOnscreen in an
- * SDL_Window */
-#define COGL_SDL_WINDOW_DATA_KEY "cogl-onscreen"
-
-static CoglFuncPtr
-_cogl_winsys_renderer_get_proc_address (CoglRenderer *renderer,
- const char *name,
- CoglBool in_core)
-{
- /* XXX: It's not totally clear whether it's safe to call this for
- * core functions. From the code it looks like the implementations
- * will fall back to using some form of dlsym if the winsys
- * GetProcAddress function returns NULL. Presumably this will work
- * in most cases apart from EGL platforms that return invalid
- * pointers for core functions. It's awkward for this code to get a
- * handle to the GL module that SDL has chosen to load so just
- * calling SDL_GL_GetProcAddress is probably the best we can do
- * here. */
- return SDL_GL_GetProcAddress (name);
-}
-
-static void
-_cogl_winsys_renderer_disconnect (CoglRenderer *renderer)
-{
- SDL_VideoQuit ();
-
- g_slice_free (CoglRendererSdl2, renderer->winsys);
-}
-
-static CoglBool
-_cogl_winsys_renderer_connect (CoglRenderer *renderer,
- CoglError **error)
-{
- if (SDL_VideoInit (NULL) < 0)
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "SDL_Init failed: %s",
- SDL_GetError ());
- return FALSE;
- }
-
- renderer->winsys = g_slice_new0 (CoglRendererSdl2);
-
- return TRUE;
-}
-
-static void
-_cogl_winsys_display_destroy (CoglDisplay *display)
-{
- CoglDisplaySdl2 *sdl_display = display->winsys;
-
- _COGL_RETURN_IF_FAIL (sdl_display != NULL);
-
- if (sdl_display->context)
- SDL_GL_DeleteContext (sdl_display->context);
-
- if (sdl_display->dummy_window)
- SDL_DestroyWindow (sdl_display->dummy_window);
-
- g_slice_free (CoglDisplaySdl2, display->winsys);
- display->winsys = NULL;
-}
-
-static void
-set_gl_attribs_from_framebuffer_config (CoglFramebufferConfig *config)
-{
- SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 1);
- SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 1);
- SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 1);
- SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 1);
-
- SDL_GL_SetAttribute (SDL_GL_STENCIL_SIZE,
- config->need_stencil ? 1 : 0);
-
- if (config->swap_chain->length >= 0)
- SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER,
- config->swap_chain->length > 1 ? 1 : 0);
-
- SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE,
- config->swap_chain->has_alpha ? 1 : 0);
-}
-
-static CoglBool
-_cogl_winsys_display_setup (CoglDisplay *display,
- CoglError **error)
-{
- CoglDisplaySdl2 *sdl_display;
- const char * (* get_string_func) (GLenum name);
- const char *gl_version;
-
- _COGL_RETURN_VAL_IF_FAIL (display->winsys == NULL, FALSE);
-
- sdl_display = g_slice_new0 (CoglDisplaySdl2);
- display->winsys = sdl_display;
-
- set_gl_attribs_from_framebuffer_config (&display->onscreen_template->config);
-
- if (display->renderer->driver == COGL_DRIVER_GLES1)
- {
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_PROFILE_MASK,
- SDL_GL_CONTEXT_PROFILE_ES);
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 1);
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_MINOR_VERSION, 1);
- }
- else if (display->renderer->driver == COGL_DRIVER_GLES2)
- {
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_PROFILE_MASK,
- SDL_GL_CONTEXT_PROFILE_ES);
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 2);
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_MINOR_VERSION, 0);
- }
- else if (display->renderer->driver == COGL_DRIVER_GL3)
- {
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_MAJOR_VERSION, 3);
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_MINOR_VERSION, 1);
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_PROFILE_MASK,
- SDL_GL_CONTEXT_PROFILE_CORE);
- SDL_GL_SetAttribute (SDL_GL_CONTEXT_FLAGS,
- SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
- }
-
- /* Create a dummy 1x1 window that never gets display so that we can
- * create a GL context */
- sdl_display->dummy_window = SDL_CreateWindow ("",
- 0, 0, /* x/y */
- 1, 1, /* w/h */
- SDL_WINDOW_OPENGL |
- SDL_WINDOW_HIDDEN);
- if (sdl_display->dummy_window == NULL)
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "SDL_CreateWindow failed: %s",
- SDL_GetError ());
- goto error;
- }
-
- sdl_display->context = SDL_GL_CreateContext (sdl_display->dummy_window);
-
- if (sdl_display->context == NULL)
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "SDL_GL_CreateContext failed: %s",
- SDL_GetError ());
- goto error;
- }
-
- /* SDL doesn't seem to provide a way to select between GL and GLES
- * and instead it will just pick one itself. We can at least try to
- * verify that it picked the one we were expecting by looking at the
- * GL version string */
- get_string_func = SDL_GL_GetProcAddress ("glGetString");
- gl_version = get_string_func (GL_VERSION);
-
- switch (display->renderer->driver)
- {
- case COGL_DRIVER_GL:
- case COGL_DRIVER_GL3:
- /* The first character of the version string will be a digit if
- * it's normal GL */
- if (!g_ascii_isdigit (gl_version[0]))
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "The GL driver was requested but SDL is using GLES");
- goto error;
- }
-
- if (display->renderer->driver == COGL_DRIVER_GL3 &&
- gl_version[0] < '3')
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "The GL3 driver was requested but SDL is using "
- "GL %c", gl_version[0]);
- goto error;
- }
- break;
-
- case COGL_DRIVER_GLES2:
- if (!g_str_has_prefix (gl_version, "OpenGL ES 2") &&
- !g_str_has_prefix (gl_version, "OpenGL ES 3"))
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "The GLES2 driver was requested but SDL is "
- "not using GLES2 or GLES3");
- goto error;
- }
- break;
-
- case COGL_DRIVER_GLES1:
- if (!g_str_has_prefix (gl_version, "OpenGL ES 1"))
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_INIT,
- "The GLES1 driver was requested but SDL is "
- "not using GLES1");
- goto error;
- }
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- return TRUE;
-
-error:
- _cogl_winsys_display_destroy (display);
- return FALSE;
-}
-
-static void
-flush_pending_notifications_cb (void *data,
- void *user_data)
-{
- CoglFramebuffer *framebuffer = data;
-
- if (framebuffer->type == COGL_FRAMEBUFFER_TYPE_ONSCREEN)
- {
- CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer);
- CoglOnscreenSdl2 *sdl_onscreen = onscreen->winsys;
-
- if (sdl_onscreen->pending_resize_notify)
- {
- _cogl_onscreen_notify_resize (onscreen);
- sdl_onscreen->pending_resize_notify = FALSE;
- }
- }
-}
-
-static void
-flush_pending_resize_notifications_idle (void *user_data)
-{
- CoglContext *context = user_data;
- CoglRenderer *renderer = context->display->renderer;
- CoglRendererSdl2 *sdl_renderer = renderer->winsys;
-
- /* This needs to be disconnected before invoking the callbacks in
- * case the callbacks cause it to be queued again */
- _cogl_closure_disconnect (sdl_renderer->resize_notify_idle);
- sdl_renderer->resize_notify_idle = NULL;
-
- g_list_foreach (context->framebuffers,
- flush_pending_notifications_cb,
- NULL);
-}
-
-static CoglFilterReturn
-sdl_window_event_filter (SDL_WindowEvent *event,
- CoglContext *context)
-{
- SDL_Window *window;
- CoglFramebuffer *framebuffer;
-
- window = SDL_GetWindowFromID (event->windowID);
-
- if (window == NULL)
- return COGL_FILTER_CONTINUE;
-
- framebuffer = SDL_GetWindowData (window, COGL_SDL_WINDOW_DATA_KEY);
-
- if (framebuffer == NULL || framebuffer->context != context)
- return COGL_FILTER_CONTINUE;
-
- if (event->event == SDL_WINDOWEVENT_SIZE_CHANGED)
- {
- CoglDisplay *display = context->display;
- CoglRenderer *renderer = display->renderer;
- CoglRendererSdl2 *sdl_renderer = renderer->winsys;
- float width = event->data1;
- float height = event->data2;
- CoglOnscreenSdl2 *sdl_onscreen;
-
- _cogl_framebuffer_winsys_update_size (framebuffer, width, height);
-
- /* We only want to notify that a resize happened when the
- * application calls cogl_context_dispatch so instead of
- * immediately notifying we queue an idle callback */
- if (!sdl_renderer->resize_notify_idle)
- {
- sdl_renderer->resize_notify_idle =
- _cogl_poll_renderer_add_idle (renderer,
- flush_pending_resize_notifications_idle,
- context,
- NULL);
- }
-
- sdl_onscreen = COGL_ONSCREEN (framebuffer)->winsys;
- sdl_onscreen->pending_resize_notify = TRUE;
- }
- else if (event->event == SDL_WINDOWEVENT_EXPOSED)
- {
- CoglOnscreenDirtyInfo info;
-
- /* Sadly SDL doesn't seem to report the rectangle of the expose
- * event so we'll just queue the whole window */
- info.x = 0;
- info.y = 0;
- info.width = framebuffer->width;
- info.height = framebuffer->height;
-
- _cogl_onscreen_queue_dirty (COGL_ONSCREEN (framebuffer), &info);
- }
-
- return COGL_FILTER_CONTINUE;
-}
-
-static CoglFilterReturn
-sdl_event_filter_cb (SDL_Event *event, void *data)
-{
- CoglContext *context = data;
-
- switch (event->type)
- {
- case SDL_WINDOWEVENT:
- return sdl_window_event_filter (&event->window, context);
-
- default:
- return COGL_FILTER_CONTINUE;
- }
-}
-
-static CoglBool
-_cogl_winsys_context_init (CoglContext *context, CoglError **error)
-{
- CoglRenderer *renderer = context->display->renderer;
-
- context->winsys = g_new0 (CoglContextSdl2, 1);
-
- if (G_UNLIKELY (renderer->sdl_event_type_set == FALSE))
- g_error ("cogl_sdl_renderer_set_event_type() or cogl_sdl_context_new() "
- "must be called during initialization");
-
- if (!_cogl_context_update_features (context, error))
- return FALSE;
-
- if (SDL_GL_GetSwapInterval () != -1)
- COGL_FLAGS_SET (context->winsys_features,
- COGL_WINSYS_FEATURE_SWAP_REGION_THROTTLE,
- TRUE);
-
- /* We'll manually handle queueing dirty events in response to
- * SDL_WINDOWEVENT_EXPOSED events */
- COGL_FLAGS_SET (context->private_features,
- COGL_PRIVATE_FEATURE_DIRTY_EVENTS,
- TRUE);
-
- _cogl_renderer_add_native_filter (renderer,
- (CoglNativeFilterFunc) sdl_event_filter_cb,
- context);
-
- return TRUE;
-}
-
-static void
-_cogl_winsys_context_deinit (CoglContext *context)
-{
- CoglRenderer *renderer = context->display->renderer;
-
- _cogl_renderer_remove_native_filter (renderer,
- (CoglNativeFilterFunc)
- sdl_event_filter_cb,
- context);
-
- g_free (context->winsys);
-}
-
-static void
-_cogl_winsys_onscreen_bind (CoglOnscreen *onscreen)
-{
- CoglFramebuffer *fb = COGL_FRAMEBUFFER (onscreen);
- CoglContext *context = fb->context;
- CoglContextSdl2 *sdl_context = context->winsys;
- CoglDisplaySdl2 *sdl_display = context->display->winsys;
- CoglOnscreenSdl2 *sdl_onscreen = onscreen->winsys;
-
- if (sdl_context->current_window == sdl_onscreen->window)
- return;
-
- SDL_GL_MakeCurrent (sdl_onscreen->window, sdl_display->context);
-
- sdl_context->current_window = sdl_onscreen->window;
-
- /* It looks like SDL just directly calls a glXSwapInterval function
- * when this is called. This may be provided by either the EXT
- * extension, the SGI extension or the Mesa extension. The SGI
- * extension is per context so we can't just do this once when the
- * framebuffer is allocated. See the comments in the GLX winsys for
- * more info. */
- if (COGL_FLAGS_GET (context->winsys_features,
- COGL_WINSYS_FEATURE_SWAP_REGION_THROTTLE))
- {
- CoglFramebuffer *fb = COGL_FRAMEBUFFER (onscreen);
-
- SDL_GL_SetSwapInterval (fb->config.swap_throttled ? 1 : 0);
- }
-}
-
-static void
-_cogl_winsys_onscreen_deinit (CoglOnscreen *onscreen)
-{
- CoglOnscreenSdl2 *sdl_onscreen = onscreen->winsys;
-
- if (sdl_onscreen->window != NULL)
- {
- CoglContext *context = COGL_FRAMEBUFFER (onscreen)->context;
- CoglContextSdl2 *sdl_context = context->winsys;
-
- if (sdl_context->current_window == sdl_onscreen->window)
- {
- CoglDisplaySdl2 *sdl_display = context->display->winsys;
-
- /* SDL explicitly unbinds the context when the currently
- * bound window is destroyed. Cogl always needs a context
- * bound so that for example it can create texture resources
- * at any time even without flushing a framebuffer.
- * Therefore we'll bind the dummy window. */
- SDL_GL_MakeCurrent (sdl_display->dummy_window,
- sdl_display->context);
- sdl_context->current_window = sdl_display->dummy_window;
- }
-
- SDL_DestroyWindow (sdl_onscreen->window);
- sdl_onscreen->window = NULL;
- }
-
- g_slice_free (CoglOnscreenSdl2, sdl_onscreen);
- onscreen->winsys = NULL;
-}
-
-static CoglBool
-_cogl_winsys_onscreen_init (CoglOnscreen *onscreen,
- CoglError **error)
-{
- CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen);
- CoglOnscreenSdl2 *sdl_onscreen;
- SDL_Window *window;
- int width, height;
- SDL_WindowFlags flags;
-
- width = cogl_framebuffer_get_width (framebuffer);
- height = cogl_framebuffer_get_height (framebuffer);
-
- flags = SDL_WINDOW_OPENGL | SDL_WINDOW_HIDDEN;
-
- /* The resizable property on SDL window apparently can only be set
- * on creation */
- if (onscreen->resizable)
- flags |= SDL_WINDOW_RESIZABLE;
-
- window = SDL_CreateWindow ("" /* title */,
- 0, 0, /* x/y */
- width, height,
- flags);
-
- if (window == NULL)
- {
- _cogl_set_error (error, COGL_WINSYS_ERROR,
- COGL_WINSYS_ERROR_CREATE_ONSCREEN,
- "SDL_CreateWindow failed: %s",
- SDL_GetError ());
- return FALSE;
- }
-
- SDL_SetWindowData (window, COGL_SDL_WINDOW_DATA_KEY, onscreen);
-
- onscreen->winsys = g_slice_new (CoglOnscreenSdl2);
- sdl_onscreen = onscreen->winsys;
- sdl_onscreen->window = window;
-
- return TRUE;
-}
-
-static void
-_cogl_winsys_onscreen_swap_buffers_with_damage (CoglOnscreen *onscreen,
- const int *rectangles,
- int n_rectangles)
-{
- CoglOnscreenSdl2 *sdl_onscreen = onscreen->winsys;
-
- SDL_GL_SwapWindow (sdl_onscreen->window);
-}
-
-static void
-_cogl_winsys_onscreen_update_swap_throttled (CoglOnscreen *onscreen)
-{
- CoglContext *context = COGL_FRAMEBUFFER (onscreen)->context;
- CoglContextSdl2 *sdl_context = context->winsys;
- CoglOnscreenSdl2 *sdl_onscreen = onscreen->winsys;
-
- if (sdl_context->current_window != sdl_onscreen->window)
- return;
-
- sdl_context->current_window = NULL;
- _cogl_winsys_onscreen_bind (onscreen);
-}
-
-static void
-_cogl_winsys_onscreen_set_visibility (CoglOnscreen *onscreen,
- CoglBool visibility)
-{
- CoglOnscreenSdl2 *sdl_onscreen = onscreen->winsys;
-
- if (visibility)
- SDL_ShowWindow (sdl_onscreen->window);
- else
- SDL_HideWindow (sdl_onscreen->window);
-}
-
-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)
-{
- static CoglBool vtable_inited = FALSE;
- static CoglWinsysVtable vtable;
-
- /* It would be nice if we could use C99 struct initializers here
- like the GLX backend does. However this code is more likely to be
- compiled using Visual Studio which (still!) doesn't support them
- so we initialize it in code instead */
-
- if (!vtable_inited)
- {
- memset (&vtable, 0, sizeof (vtable));
-
- vtable.id = COGL_WINSYS_ID_SDL;
- vtable.name = "SDL";
- vtable.renderer_get_proc_address = _cogl_winsys_renderer_get_proc_address;
- vtable.renderer_connect = _cogl_winsys_renderer_connect;
- vtable.renderer_disconnect = _cogl_winsys_renderer_disconnect;
- vtable.display_setup = _cogl_winsys_display_setup;
- vtable.display_destroy = _cogl_winsys_display_destroy;
- vtable.context_init = _cogl_winsys_context_init;
- vtable.context_deinit = _cogl_winsys_context_deinit;
- vtable.onscreen_init = _cogl_winsys_onscreen_init;
- vtable.onscreen_deinit = _cogl_winsys_onscreen_deinit;
- vtable.onscreen_bind = _cogl_winsys_onscreen_bind;
- vtable.onscreen_swap_buffers_with_damage =
- _cogl_winsys_onscreen_swap_buffers_with_damage;
- vtable.onscreen_update_swap_throttled =
- _cogl_winsys_onscreen_update_swap_throttled;
- vtable.onscreen_set_visibility = _cogl_winsys_onscreen_set_visibility;
-
- vtable_inited = TRUE;
- }
-
- return &vtable;
-}
diff --git a/configure.ac b/configure.ac
index 3e88e3841..233b1f300 100644
--- a/configure.ac
+++ b/configure.ac
@@ -225,29 +225,6 @@ AC_ARG_ENABLE(installed_tests,
AM_CONDITIONAL(ENABLE_INSTALLED_TESTS, test x$enable_installed_tests = xyes)
-dnl ============================================================
-dnl Emscripten support
-dnl ============================================================
-
-AC_ARG_ENABLE(
- [emscripten],
- [AC_HELP_STRING([--enable-emscripten=@<:@no/yes@:>@], [Support building for emscripten])],
- [],
- enable_emscripten=no
-)
-AS_IF([test "x$enable_emscripten" = "xyes"],
- [
- enable_standalone=yes
- enable_sdl=yes
- enable_gles2=yes
- enable_gl=no
- AC_DEFINE([USING_EMSCRIPTEN], 1, [Cogl is being compiled with emscripten])
- COGL_DEFINES_SYMBOLS="$COGL_DEFINES_SYMBOLS COGL_HAS_EMSCRIPTEN_SUPPORT"
- ]
-)
-AM_CONDITIONAL(USING_EMSCRIPTEN, [test "$enable_emscripten" = "yes"])
-
-
dnl ============================================================
dnl Standalone cogl
dnl ============================================================
@@ -732,33 +709,24 @@ AS_IF([test "x$enable_gles2" = "xyes"],
COGL_DEFINES_SYMBOLS="$COGL_DEFINES_SYMBOLS COGL_HAS_GLES2"
HAVE_GLES2=1
- AS_IF([test "x$enable_emscripten" = "xyes"],
- [
- GL_LIBRARY_DIRECTLY_LINKED=yes
- COGL_GLES2_LIBNAME=""
- AC_DEFINE([HAVE_COGL_WEBGL], 1, [Have WebGL for rendering])
- ],
+ PKG_CHECK_EXISTS([glesv2],
+ [COGL_PKG_REQUIRES_GL="$COGL_PKG_REQUIRES_GL glesv2"
+ COGL_GLES2_LIBNAME="libGLESv2.so"
+ ],
+ [
+ # We have to check the two headers independently as GLES2/gl2ext.h
+ # needs to include GLES2/gl2.h to have the GL types defined (eg.
+ # GLenum).
+ AC_CHECK_HEADER([GLES2/gl2.h],
+ [],
+ [AC_MSG_ERROR([Unable to locate GLES2/gl2.h])])
+ AC_CHECK_HEADER([GLES2/gl2ext.h],
+ [],
+ [AC_MSG_ERROR([Unable to locate GLES2/gl2ext.h])],
+ [#include ])
- [
- PKG_CHECK_EXISTS([glesv2],
- [COGL_PKG_REQUIRES_GL="$COGL_PKG_REQUIRES_GL glesv2"
- COGL_GLES2_LIBNAME="libGLESv2.so"
- ],
- [
- # We have to check the two headers independently as GLES2/gl2ext.h
- # needs to include GLES2/gl2.h to have the GL types defined (eg.
- # GLenum).
- AC_CHECK_HEADER([GLES2/gl2.h],
- [],
- [AC_MSG_ERROR([Unable to locate GLES2/gl2.h])])
- AC_CHECK_HEADER([GLES2/gl2ext.h],
- [],
- [AC_MSG_ERROR([Unable to locate GLES2/gl2ext.h])],
- [#include ])
-
- COGL_GLES2_LIBNAME="libGLESv2.so"
- ])
- ])
+ COGL_GLES2_LIBNAME="libGLESv2.so"
+ ])
])
HAVE_GL=0
@@ -919,93 +887,6 @@ AS_IF([test "x$enable_wgl" = "xyes"],
])
AM_CONDITIONAL(SUPPORT_WGL, [test "x$SUPPORT_WGL" = "xyes"])
-AC_ARG_ENABLE(
- [sdl],
- [AC_HELP_STRING([--enable-sdl=@<:@no/yes@:>@], [Enable support SDL @<:@default=no@:>@])],
- [],
- [enable_sdl=no])
-AS_IF([test "x$enable_sdl" = "xyes"],
- [
- AS_IF([test "x$enable_emscripten" = "xno"],
- [
- PKG_CHECK_MODULES([SDL],
- [sdl],
- [
- COGL_PKG_REQUIRES="$COGL_PKG_REQUIRES sdl"
- ],
- [
- AC_CHECK_HEADER([SDL/SDL.h],
- [],
- [AC_MSG_ERROR([SDL support requested but SDL not found])])
- ])
- ])
-
- SUPPORT_SDL=yes
- GL_WINSYS_APIS="$GL_WINSYS_APIS sdl"
-
- COGL_DEFINES_SYMBOLS="$COGL_DEFINES_SYMBOLS COGL_HAS_SDL_SUPPORT"
-
- dnl If we are building with emscripten then that simply implies we are
- dnl using SDL in conjunction with WebGL (GLES2)
- AS_IF([test "x$enable_emscripten" = "xyes"],
- [
- SUPPORTED_SDL_GL_APIS="webgl"
- SUPPORT_SDL_WEBGL=yes
- SUPPORT_SDL_GLES=no
- COGL_DEFINES_SYMBOLS="$COGL_DEFINES_SYMBOLS COGL_HAS_SDL_WEBGL_SUPPORT"
- ],
- [
- dnl WebOS has a specially patched version of SDL to add
- dnl support for creating a GLES1/2 context. This tries to
- dnl detect that patch so we can use it if the GLES2 driver is
- dnl selected.
- cogl_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $SDL_CFLAGS"
- AC_CHECK_DECL([SDL_OPENGLES],
- [SUPPORT_SDL_GLES=yes],
- [SUPPORT_SDL_GLES=no],
- [#include ])
- AC_CHECK_DECL([SDL_GL_CONTEXT_MAJOR_VERSION], [], [SUPPORT_SDL_GLES=no],
- [#include ])
- AC_CHECK_DECL([SDL_GL_CONTEXT_MINOR_VERSION], [], [SUPPORT_SDL_GLES=no],
- [#include ])
- CPPFLAGS="$cogl_save_CPPFLAGS"
-
- AS_IF([test "x$SUPPORT_SDL_GLES" = "xyes"],
- [
- SUPPORTED_SDL_GL_APIS="gles1 gles2"
- COGL_DEFINES_SYMBOLS="$COGL_DEFINES_SYMBOLS COGL_HAS_SDL_GLES_SUPPORT"
- ],
- [ SUPPORTED_SDL_GL_APIS="gl" ])
- ])
- ],
- [SUPPORT_SDL=no])
-AM_CONDITIONAL(SUPPORT_SDL, [test "x$SUPPORT_SDL" = "xyes"])
-
-AC_ARG_ENABLE(
- [sdl2],
- [AC_HELP_STRING([--enable-sdl2=@<:@no/yes@:>@], [Enable SDL2 support @<:@default=no@:>@])],
- [],
- [enable_sdl2=no])
-AS_IF([test "x$enable_sdl2" = "xyes"],
- [
- PKG_CHECK_MODULES([SDL2],
- [sdl2],
- [],
- [AC_MSG_ERROR([SDL2 support requested but SDL2 not found])])
-
- SUPPORT_SDL2=yes
- GL_WINSYS_APIS="$GL_WINSYS_APIS sdl2"
- COGL_PKG_REQUIRES="$COGL_PKG_REQUIRES sdl2"
-
- COGL_DEFINES_SYMBOLS="$COGL_DEFINES_SYMBOLS COGL_HAS_SDL_SUPPORT"
- ],
- [SUPPORT_SDL2=no])
-AM_CONDITIONAL(SUPPORT_SDL2, [test "x$SUPPORT_SDL2" = "xyes"])
-
-AS_IF([test "x$SUPPORT_SDL2" = "xyes" -a "x$SUPPORT_SDL" = "xyes"],
- [AC_MSG_ERROR([The SDL1 and SDL2 winsyses are currently mutually exclusive])])
-
EGL_PLATFORM_COUNT=0
AC_ARG_ENABLE(
@@ -1136,9 +1017,6 @@ AC_ARG_ENABLE(
[],
AS_IF([test "x$enable_gles1" = "xyes" -o \
"x$enable_gles2" = "xyes" && \
- test "x$SUPPORT_SDL_GLES" != "xyes" && \
- test "x$SUPPORT_SDL_WEBGL" != "xyes" && \
- test "x$SUPPORT_SDL2" != "xyes" && \
test $EGL_PLATFORM_COUNT -eq 0],
[enable_xlib_egl_platform=yes], [enable_xlib_egl_platform=no])
)
@@ -1315,11 +1193,7 @@ dnl ================================================================
dnl The 'ffs' function is part of C99 so it isn't always
dnl available. Cogl has a fallback if needed.
-dnl
-dnl XXX: ffs isnt available with the emscripten toolchain currently
-dnl but the check passes so we manually skip the check in this case
-AS_IF([test "x$enable_emscripten" = "xno"],
- [AC_CHECK_FUNCS([ffs])])
+AC_CHECK_FUNCS([ffs])
dnl 'memmem' is a GNU extension but we have a simple fallback
AC_CHECK_FUNCS([memmem])
@@ -1336,31 +1210,24 @@ dnl ================================================================
dnl These are values from system headers that we want to copy into the
dnl public Cogl headers without having to include the system header
-dnl
-dnl XXX: poll(2) can't currently be used with emscripten even though
-dnl poll.h is in the toolchain headers so we manually skip the check
-dnl in this case
have_poll_h=no
-AS_IF([test "x$enable_emscripten" = "xno"],
- [
- AC_CHECK_HEADER(poll.h,
- [
- AC_COMPUTE_INT(COGL_SYSDEF_POLLIN, POLLIN, [#include ],
- AC_MSG_ERROR([Unable to get value of POLLIN]))
- AC_COMPUTE_INT(COGL_SYSDEF_POLLPRI, POLLPRI, [#include ],
- AC_MSG_ERROR([Unable to get value of POLLPRI]))
- AC_COMPUTE_INT(COGL_SYSDEF_POLLOUT, POLLOUT, [#include ],
- AC_MSG_ERROR([Unable to get value of POLLOUT]))
- AC_COMPUTE_INT(COGL_SYSDEF_POLLERR, POLLERR, [#include ],
- AC_MSG_ERROR([Unable to get value of POLLERR]))
- AC_COMPUTE_INT(COGL_SYSDEF_POLLHUP, POLLHUP, [#include ],
- AC_MSG_ERROR([Unable to get value of POLLHUP]))
- AC_COMPUTE_INT(COGL_SYSDEF_POLLNVAL, POLLNVAL, [#include ],
- AC_MSG_ERROR([Unable to get value of POLLNVAL]))
- COGL_DEFINES_SYMBOLS="$COGL_DEFINES_SYMBOLS COGL_HAS_POLL_SUPPORT"
- have_poll_h=yes
- ])
- ])
+AC_CHECK_HEADER(poll.h,
+ [
+ AC_COMPUTE_INT(COGL_SYSDEF_POLLIN, POLLIN, [#include ],
+ AC_MSG_ERROR([Unable to get value of POLLIN]))
+ AC_COMPUTE_INT(COGL_SYSDEF_POLLPRI, POLLPRI, [#include ],
+ AC_MSG_ERROR([Unable to get value of POLLPRI]))
+ AC_COMPUTE_INT(COGL_SYSDEF_POLLOUT, POLLOUT, [#include ],
+ AC_MSG_ERROR([Unable to get value of POLLOUT]))
+ AC_COMPUTE_INT(COGL_SYSDEF_POLLERR, POLLERR, [#include ],
+ AC_MSG_ERROR([Unable to get value of POLLERR]))
+ AC_COMPUTE_INT(COGL_SYSDEF_POLLHUP, POLLHUP, [#include ],
+ AC_MSG_ERROR([Unable to get value of POLLHUP]))
+ AC_COMPUTE_INT(COGL_SYSDEF_POLLNVAL, POLLNVAL, [#include ],
+ AC_MSG_ERROR([Unable to get value of POLLNVAL]))
+ COGL_DEFINES_SYMBOLS="$COGL_DEFINES_SYMBOLS COGL_HAS_POLL_SUPPORT"
+ have_poll_h=yes
+ ])
AS_IF([test "x$have_poll_h" = "xno"],
[
@@ -1441,7 +1308,6 @@ cogl/cogl-1.0.pc
cogl/cogl-2.0-experimental.pc
cogl/cogl-defines.h
cogl/cogl-defines.h.win32
-cogl/cogl-defines.h.win32_SDL
cogl/cogl-gl-header.h
cogl/cogl-egl-defines.h
cogl/cogl.rc
@@ -1505,10 +1371,6 @@ if test "x$SUPPORT_EGL" = "xyes"; then
echo " EGL Platforms:${EGL_PLATFORMS}"
echo " Wayland compositor support: ${enable_wayland_egl_server}"
fi
-if test "x$SUPPORT_SDL" = "xyes"; then
-echo " Supported SDL GL APIs: ${SUPPORTED_SDL_GL_APIS}"
-fi
-echo " Building for emscripten environment: $enable_emscripten"
echo " Build libcogl-gles2 GLES 2.0 frontend api: ${enable_cogl_gles2}"
echo " Image backend: ${COGL_IMAGE_BACKEND}"
echo " Cogl Pango: ${enable_cogl_pango}"
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 01cf003e3..2bbbbb6c8 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -88,39 +88,6 @@ endif
endif #USE_GLIB
-# XXX although emscripten "supports sdl" we can't build cogl-sdl-hello
-# un-modified for emscripten since emscripten doesn't support
-# SDL_WaitEvent() and we need to use some special emscripten apis
-# to create a mainloop....
-if USING_EMSCRIPTEN
-
-programs += cogl-emscripten-hello
-cogl_emscripten_hello_SOURCES = cogl-emscripten-hello.c
-cogl_emscripten_hello_LDADD = $(common_ldadd)
-
-else # USING_EMSCRIPTEN
-
-if SUPPORT_SDL
-programs += cogl-sdl-hello
-cogl_sdl_hello_SOURCES = cogl-sdl-hello.c
-cogl_sdl_hello_LDADD = $(common_ldadd)
-endif
-
-endif # USING_EMSCRIPTEN
-
-if SUPPORT_SDL2
-programs += cogl-sdl2-hello
-cogl_sdl2_hello_SOURCES = cogl-sdl2-hello.c
-cogl_sdl2_hello_LDADD = $(common_ldadd)
-endif
-
-if USING_EMSCRIPTEN
-%.html: %.o $(top_builddir)/cogl/.libs/libcogl2.so $(top_builddir)/deps/glib/.libs/libglib.a
- $(CC) $(AM_CFLAGS) $(CFLAGS) --js-library $(top_srcdir)/examples/emscripten-example-js-library.js -o $@ $^
-
-all-local: $(addsuffix .html, $(programs))
-endif
-
if INSTALL_EXAMPLES
bin_PROGRAMS = $(programs)
else
diff --git a/examples/cogl-info.c b/examples/cogl-info.c
index a039ad9df..665a0cb3e 100644
--- a/examples/cogl-info.c
+++ b/examples/cogl-info.c
@@ -147,8 +147,6 @@ get_winsys_name_for_id (CoglWinsysID winsys_id)
return "EGL + Mir platform";
case COGL_WINSYS_ID_WGL:
return "EGL + Windows WGL platform";
- case COGL_WINSYS_ID_SDL:
- return "EGL + SDL platform";
}
g_return_val_if_reached ("Unknown");
}
diff --git a/examples/cogl-sdl-hello.c b/examples/cogl-sdl-hello.c
deleted file mode 100644
index 157c3e8e2..000000000
--- a/examples/cogl-sdl-hello.c
+++ /dev/null
@@ -1,156 +0,0 @@
-#include
-#include
-#include
-#include
-
-/* This short example is just to demonstrate mixing SDL with Cogl as a
- simple way to get portable support for events */
-
-typedef struct Data
-{
- CoglPrimitive *triangle;
- CoglPipeline *pipeline;
- float center_x, center_y;
- CoglFramebuffer *fb;
- CoglBool quit;
- CoglBool redraw_queued;
- CoglBool ready_to_draw;
-} Data;
-
-static void
-redraw (Data *data)
-{
- CoglFramebuffer *fb = data->fb;
-
- cogl_framebuffer_clear4f (fb, COGL_BUFFER_BIT_COLOR, 0, 0, 0, 1);
-
- cogl_framebuffer_push_matrix (fb);
- cogl_framebuffer_translate (fb, data->center_x, -data->center_y, 0.0f);
-
- cogl_primitive_draw (data->triangle, fb, data->pipeline);
- cogl_framebuffer_pop_matrix (fb);
-
- cogl_onscreen_swap_buffers (COGL_ONSCREEN (fb));
-}
-
-static void
-dirty_cb (CoglOnscreen *onscreen,
- const CoglOnscreenDirtyInfo *info,
- void *user_data)
-{
- Data *data = user_data;
-
- data->redraw_queued = TRUE;
-}
-
-static void
-handle_event (Data *data, SDL_Event *event)
-{
- switch (event->type)
- {
- case SDL_MOUSEMOTION:
- {
- int width =
- cogl_framebuffer_get_width (COGL_FRAMEBUFFER (data->fb));
- int height =
- cogl_framebuffer_get_height (COGL_FRAMEBUFFER (data->fb));
-
- data->center_x = event->motion.x * 2.0f / width - 1.0f;
- data->center_y = event->motion.y * 2.0f / height - 1.0f;
-
- data->redraw_queued = TRUE;
- }
- break;
-
- case SDL_QUIT:
- data->quit = TRUE;
- break;
- }
-}
-
-static void
-frame_cb (CoglOnscreen *onscreen,
- CoglFrameEvent event,
- CoglFrameInfo *info,
- void *user_data)
-{
- Data *data = user_data;
-
- if (event == COGL_FRAME_EVENT_SYNC)
- data->ready_to_draw = TRUE;
-}
-
-int
-main (int argc, char **argv)
-{
- CoglContext *ctx;
- CoglOnscreen *onscreen;
- CoglError *error = NULL;
- CoglVertexP2C4 triangle_vertices[] = {
- {0, 0.7, 0xff, 0x00, 0x00, 0xff},
- {-0.7, -0.7, 0x00, 0xff, 0x00, 0xff},
- {0.7, -0.7, 0x00, 0x00, 0xff, 0xff}
- };
- Data data;
- SDL_Event event;
-
- ctx = cogl_sdl_context_new (SDL_USEREVENT, &error);
- if (!ctx)
- {
- fprintf (stderr, "Failed to create context: %s\n", error->message);
- return 1;
- }
-
- onscreen = cogl_onscreen_new (ctx, 800, 600);
- data.fb = COGL_FRAMEBUFFER (onscreen);
-
- cogl_onscreen_add_frame_callback (onscreen,
- frame_cb,
- &data,
- NULL /* destroy callback */);
- cogl_onscreen_add_dirty_callback (onscreen,
- dirty_cb,
- &data,
- NULL /* destroy callback */);
-
- data.center_x = 0.0f;
- data.center_y = 0.0f;
- data.quit = FALSE;
-
- cogl_onscreen_show (onscreen);
-
- data.triangle = cogl_primitive_new_p2c4 (ctx, COGL_VERTICES_MODE_TRIANGLES,
- 3, triangle_vertices);
- data.pipeline = cogl_pipeline_new (ctx);
-
- data.redraw_queued = FALSE;
- data.ready_to_draw = TRUE;
-
- while (!data.quit)
- {
- if (!SDL_PollEvent (&event))
- {
- if (data.redraw_queued && data.ready_to_draw)
- {
- redraw (&data);
- data.redraw_queued = FALSE;
- data.ready_to_draw = FALSE;
- continue;
- }
-
- cogl_sdl_idle (ctx);
- if (!SDL_WaitEvent (&event))
- {
- fprintf (stderr, "Error waiting for SDL events");
- return 1;
- }
- }
-
- handle_event (&data, &event);
- cogl_sdl_handle_event (ctx, &event);
- }
-
- cogl_object_unref (ctx);
-
- return 0;
-}
diff --git a/examples/cogl-sdl2-hello.c b/examples/cogl-sdl2-hello.c
deleted file mode 100644
index 0e32fdbe4..000000000
--- a/examples/cogl-sdl2-hello.c
+++ /dev/null
@@ -1,169 +0,0 @@
-#include
-#include
-#include
-#include
-
-/* This short example is just to demonstrate mixing SDL with Cogl as a
- simple way to get portable support for events */
-
-typedef struct Data
-{
- CoglPrimitive *triangle;
- CoglPipeline *pipeline;
- float center_x, center_y;
- CoglFramebuffer *fb;
- CoglBool quit;
- CoglBool redraw_queued;
- CoglBool ready_to_draw;
-} Data;
-
-static void
-redraw (Data *data)
-{
- CoglFramebuffer *fb = data->fb;
-
- cogl_framebuffer_clear4f (fb, COGL_BUFFER_BIT_COLOR, 0, 0, 0, 1);
-
- cogl_framebuffer_push_matrix (fb);
- cogl_framebuffer_translate (fb, data->center_x, -data->center_y, 0.0f);
-
- cogl_primitive_draw (data->triangle, fb, data->pipeline);
- cogl_framebuffer_pop_matrix (fb);
-
- cogl_onscreen_swap_buffers (COGL_ONSCREEN (fb));
-}
-
-static void
-dirty_cb (CoglOnscreen *onscreen,
- const CoglOnscreenDirtyInfo *info,
- void *user_data)
-{
- Data *data = user_data;
-
- data->redraw_queued = TRUE;
-}
-
-static void
-handle_event (Data *data, SDL_Event *event)
-{
- switch (event->type)
- {
- case SDL_WINDOWEVENT:
- switch (event->window.event)
- {
- case SDL_WINDOWEVENT_CLOSE:
- data->quit = TRUE;
- break;
- }
- break;
-
- case SDL_MOUSEMOTION:
- {
- int width =
- cogl_framebuffer_get_width (data->fb);
- int height =
- cogl_framebuffer_get_height (data->fb);
-
- data->center_x = event->motion.x * 2.0f / width - 1.0f;
- data->center_y = event->motion.y * 2.0f / height - 1.0f;
-
- data->redraw_queued = TRUE;
- }
- break;
-
- case SDL_QUIT:
- data->quit = TRUE;
- break;
- }
-}
-
-static void
-frame_cb (CoglOnscreen *onscreen,
- CoglFrameEvent event,
- CoglFrameInfo *info,
- void *user_data)
-{
- Data *data = user_data;
-
- if (event == COGL_FRAME_EVENT_SYNC)
- data->ready_to_draw = TRUE;
-}
-
-int
-main (int argc, char **argv)
-{
- CoglContext *ctx;
- CoglOnscreen *onscreen;
- CoglError *error = NULL;
- CoglVertexP2C4 triangle_vertices[] = {
- {0, 0.7, 0xff, 0x00, 0x00, 0xff},
- {-0.7, -0.7, 0x00, 0xff, 0x00, 0xff},
- {0.7, -0.7, 0x00, 0x00, 0xff, 0xff}
- };
- Data data;
- SDL_Event event;
-
- ctx = cogl_sdl_context_new (SDL_USEREVENT, &error);
- if (!ctx)
- {
- fprintf (stderr, "Failed to create context: %s\n", error->message);
- return 1;
- }
-
- onscreen = cogl_onscreen_new (ctx, 800, 600);
- data.fb = onscreen;
-
- cogl_onscreen_add_frame_callback (onscreen,
- frame_cb,
- &data,
- NULL /* destroy callback */);
- cogl_onscreen_add_dirty_callback (onscreen,
- dirty_cb,
- &data,
- NULL /* destroy callback */);
-
- data.center_x = 0.0f;
- data.center_y = 0.0f;
- data.quit = FALSE;
-
- /* In SDL2, setting resizable only works before allocating the
- * onscreen */
- cogl_onscreen_set_resizable (onscreen, TRUE);
-
- cogl_onscreen_show (onscreen);
-
- data.triangle = cogl_primitive_new_p2c4 (ctx, COGL_VERTICES_MODE_TRIANGLES,
- 3, triangle_vertices);
- data.pipeline = cogl_pipeline_new (ctx);
-
- data.redraw_queued = FALSE;
- data.ready_to_draw = TRUE;
-
- while (!data.quit)
- {
- if (!SDL_PollEvent (&event))
- {
- if (data.redraw_queued && data.ready_to_draw)
- {
- redraw (&data);
- data.redraw_queued = FALSE;
- data.ready_to_draw = FALSE;
- continue;
- }
-
- cogl_sdl_idle (ctx);
- if (!SDL_WaitEvent (&event))
- {
- fprintf (stderr, "Error waiting for SDL events");
- return 1;
- }
- }
-
- handle_event (&data, &event);
- cogl_sdl_handle_event (ctx, &event);
- }
-
- cogl_object_unref (ctx);
-
- return 0;
-}
diff --git a/tests/conform/Makefile.am b/tests/conform/Makefile.am
index 550082251..013068e15 100644
--- a/tests/conform/Makefile.am
+++ b/tests/conform/Makefile.am
@@ -68,14 +68,9 @@ test_sources = \
test-texture-no-allocate.c \
test-pipeline-shader-state.c \
test-texture-rg.c \
+ test-fence.c \
$(NULL)
-if !USING_EMSCRIPTEN
-# test-fence depends on the glib mainloop so it won't compile if using
-# emscripten which builds in standalone mode.
-test_sources += test-fence.c
-endif
-
if BUILD_COGL_PATH
test_sources += \
test-path.c \