want_ecore_evas_software_16_ddraw="no"
want_ecore_evas_quartz="no"
want_ecore_evas_software_sdl="no"
+want_ecore_evas_gl_sdl="no"
want_ecore_evas_directfb="no"
want_ecore_evas_fb="no"
want_ecore_evas_software_16_wince="no"
want_ecore_evas_opengl_glew="yes"
want_ecore_evas_software_16_ddraw="auto"
want_ecore_evas_software_sdl="yes"
+ want_ecore_evas_gl_sdl="yes"
;;
darwin*)
want_curl="yes"
want_ecore_quartz="yes"
want_ecore_evas_quartz="yes"
want_ecore_evas_software_sdl="yes"
+ want_ecore_evas_gl_sdl="yes"
;;
*)
want_curl="yes"
want_ecore_evas_software_xcb="yes"
want_ecore_evas_xrender_xcb="yes"
want_ecore_evas_software_sdl="yes"
+ want_ecore_evas_gl_sdl="yes"
want_ecore_evas_directfb="yes"
want_ecore_evas_fb="yes"
;;
[${have_ecore_sdl}],
[requirements_ecore_evas="ecore-sdl ${requirements_ecore_evas}"])
+# ecore_evas_gl_sdl
+
+ECORE_EVAS_CHECK_MODULE([opengl-sdl],
+ [${want_ecore_evas_gl_sdl}],
+ [OpenGL SDL],
+ [${have_ecore_sdl}],
+ [requirements_ecore_evas="ecore-sdl ${requirements_ecore_evas}"])
+
# ecore_evas_directfb
ECORE_EVAS_CHECK_MODULE([directfb],
echo " OpenGL Glew................: $have_ecore_evas_opengl_glew"
echo " Quartz.....................: $have_ecore_evas_quartz"
echo " Software SDL...............: $have_ecore_evas_software_sdl"
+ echo " OpenGL SDL.................: $have_ecore_evas_opengl_sdl"
echo " DirectFB...................: $have_ecore_evas_directfb"
echo " Software Framebuffer.......: $have_ecore_evas_fb"
echo " Software 16bit X11.........: $have_ecore_evas_software_16_x11"
ECORE_EVAS_ENGINE_SOFTWARE_FB,
ECORE_EVAS_ENGINE_SOFTWARE_16_X11,
ECORE_EVAS_ENGINE_SOFTWARE_16_DDRAW,
- ECORE_EVAS_ENGINE_SOFTWARE_16_WINCE
+ ECORE_EVAS_ENGINE_SOFTWARE_16_WINCE,
+ ECORE_EVAS_ENGINE_OPENGL_SDL
} Ecore_Evas_Engine_Type;
typedef enum _Ecore_Evas_Avoid_Damage_Type
EAPI Ecore_Evas *ecore_evas_sdl_new(const char* name, int w, int h, int fullscreen, int hwsurface, int noframe, int alpha);
EAPI Ecore_Evas *ecore_evas_sdl16_new(const char* name, int w, int h, int fullscreen, int hwsurface, int noframe, int alpha);
+EAPI Ecore_Evas *ecore_evas_gl_sdl_new(const char* name, int w, int h, int fullscreen, int noframe);
EAPI Ecore_Evas *ecore_evas_software_wince_new(Ecore_WinCE_Window *parent,
int x,
#else
return 0;
#endif
+ case ECORE_EVAS_ENGINE_OPENGL_SDL:
+#ifdef BUILD_ECORE_EVAS_OPENGL_SDL
+ return 1;
+#else
+ return 0;
+#endif
case ECORE_EVAS_ENGINE_DIRECTFB:
#ifdef BUILD_ECORE_EVAS_DIRECTFB
return 1;
}
#endif
+#ifdef BUILD_ECORE_EVAS_OPENGL_SDL
+static Ecore_Evas *
+_ecore_evas_constructor_opengl_sdl(int x __UNUSED__, int y __UNUSED__, int w, int h, const char *extra_options)
+{
+ Ecore_Evas *ee;
+ unsigned int fullscreen = 0, noframe = 0;
+ char *name = NULL;
+
+ _ecore_evas_parse_extra_options_str(extra_options, "name=", &name);
+ _ecore_evas_parse_extra_options_uint(extra_options, "fullscreen=", &fullscreen);
+ _ecore_evas_parse_extra_options_uint(extra_options, "noframe=", &noframe);
+
+ ee = ecore_evas_gl_sdl_new(name, w, h, fullscreen, noframe);
+ free(name);
+
+ return ee;
+}
+#endif
+
#ifdef BUILD_ECORE_EVAS_DIRECTFB
static Ecore_Evas *
_ecore_evas_constructor_directfb(int x, int y, int w, int h, const char *extra_options)
{"software_16_sdl", _ecore_evas_constructor_sdl16},
#endif
+#ifdef BUILD_ECORE_EVAS_OPENGL_SDL
+ {"opengl_sdl", _ecore_evas_constructor_opengl_sdl},
+#endif
+
/* independent */
#ifdef BUILD_ECORE_EVAS_SOFTWARE_BUFFER
{"buffer", _ecore_evas_constructor_buffer},
#include <Ecore.h>
#include <Ecore_Input.h>
#include <Ecore_Input_Evas.h>
-#ifdef BUILD_ECORE_EVAS_SOFTWARE_SDL
-#include <Ecore_Sdl.h>
-#include <Evas_Engine_SDL.h>
+#if defined(BUILD_ECORE_EVAS_SOFTWARE_SDL) || defined(BUILD_ECORE_EVAS_OPENGL_SDL)
+# include <Ecore_Sdl.h>
+# ifdef BUILD_ECORE_EVAS_SOFTWARE_SDL
+# include <Evas_Engine_SDL.h>
+# endif
+# ifdef BUILD_ECORE_EVAS_OPENGL_SDL
+# include <Evas_Engine_GL_SDL.h>
+# endif
#endif
#include "ecore_evas_private.h"
// fixme: 1 sdl window only at a time? seems wrong
-#ifdef BUILD_ECORE_EVAS_SOFTWARE_SDL
+#if defined(BUILD_ECORE_EVAS_SOFTWARE_SDL) || defined(BUILD_ECORE_EVAS_OPENGL_SDL)
/* static char *ecore_evas_default_display = "0"; */
/* static Ecore_List *ecore_evas_input_devices = NULL; */
static Ecore_Evas*
_ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, int fullscreen, int hwsurface, int noframe, int alpha)
{
- Evas_Engine_Info_SDL *einfo;
+ void *einfo;
Ecore_Evas *ee;
if (!name)
evas_output_size_set(ee->evas, w, h);
evas_output_viewport_set(ee->evas, 0, 0, w, h);
- einfo = (Evas_Engine_Info_SDL*) evas_engine_info_get(ee->evas);
- if (einfo)
+ if (rmethod == evas_render_method_lookup("software_sdl"))
{
- einfo->info.rotation = 0;
- einfo->info.fullscreen = fullscreen;
- einfo->info.hwsurface = hwsurface;
- einfo->info.noframe = noframe;
- einfo->info.alpha = alpha;
- evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
+#ifdef BUILD_ECORE_EVAS_SOFTWARE_SDL
+ einfo = evas_engine_info_get(ee->evas);
+ if (einfo)
+ {
+ ((Evas_Engine_Info_SDL *)einfo)->info.rotation = 0;
+ ((Evas_Engine_Info_SDL *)einfo)->info.fullscreen = fullscreen;
+ ((Evas_Engine_Info_SDL *)einfo)->info.hwsurface = hwsurface;
+ ((Evas_Engine_Info_SDL *)einfo)->info.noframe = noframe;
+ ((Evas_Engine_Info_SDL *)einfo)->info.alpha = alpha;
+ evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
+ }
+#endif
+ }
+ else if (rmethod == evas_render_method_lookup("gl_sdl"))
+ {
+#ifdef BUILD_ECORE_EVAS_OPENGL_SDL
+ einfo = evas_engine_info_get(ee->evas);
+ if (einfo)
+ {
+ ((Evas_Engine_Info_GL_SDL *)einfo)->flags.fullscreen = fullscreen;
+ ((Evas_Engine_Info_GL_SDL *)einfo)->flags.noframe = noframe;
+ evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
+ }
+#endif
}
if (!ecore_sdl_init(name))
return NULL;
}
#endif
+
+#ifdef BUILD_ECORE_EVAS_OPENGL_SDL
+EAPI Ecore_Evas*
+ecore_evas_gl_sdl_new(const char* name, int w, int h, int fullscreen, int noframe)
+{
+ Ecore_Evas *ee;
+ int rmethod;
+
+ rmethod = evas_render_method_lookup("gl_sdl");
+ if (!rmethod) return NULL;
+
+ ee = _ecore_evas_internal_sdl_new(rmethod, name, w, h, fullscreen, 0, noframe, 0);
+ ee->driver = "gl_sdl";
+ return ee;
+}
+#else
+EAPI Ecore_Evas*
+ecore_evas_gl_sdl_new(const char* name __UNUSED__, int w __UNUSED__, int h __UNUSED__, int fullscreen __UNUSED__, int noframe __UNUSED__)
+{
+ ERR("OUTCH !");
+ return NULL;
+}
+#endif
+