add glew engine support in ecore_evas. fix Windows backend compilation

SVN revision: 34916
This commit is contained in:
doursse 2008-06-26 09:56:08 +00:00 committed by doursse
parent 2ab4d7ad99
commit 3d175f57e9
4 changed files with 117 additions and 7 deletions

View File

@ -78,6 +78,7 @@ typedef enum _Ecore_Evas_Engine_Type
ECORE_EVAS_ENGINE_SOFTWARE_DDRAW,
ECORE_EVAS_ENGINE_SOFTWARE_DDRAW_16,
ECORE_EVAS_ENGINE_DIRECT3D,
ECORE_EVAS_ENGINE_GL_GLEW,
ECORE_EVAS_ENGINE_SDL,
ECORE_EVAS_ENGINE_SOFTWARE_WINCE,
} Ecore_Evas_Engine_Type;
@ -182,6 +183,12 @@ EAPI Ecore_Evas *ecore_evas_direct3d_new(Ecore_Win32_Window *parent,
EAPI Ecore_Win32_Window *ecore_evas_direct3d_window_get(Ecore_Evas *ee);
EAPI Ecore_Evas *ecore_evas_gl_glew_new(Ecore_Win32_Window *parent,
int x,
int y,
int width,
int height);
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_software_wince_new(Ecore_WinCE_Window *parent,

View File

@ -77,6 +77,12 @@ ecore_evas_engine_type_supported_get(Ecore_Evas_Engine_Type engine)
return 1;
#else
return 0;
#endif
case ECORE_EVAS_ENGINE_GL_GLEW:
#ifdef BUILD_ECORE_EVAS_GL_GLEW
return 1;
#else
return 0;
#endif
case ECORE_EVAS_ENGINE_SDL:
#ifdef BUILD_ECORE_EVAS_SDL

View File

@ -67,15 +67,18 @@
#endif
#ifdef BUILD_ECORE_WIN32
# include "Ecore_Win32.h"
# ifdef HAVE_DIRECTDRAW
# ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW
# include <Evas_Engine_Software_DDraw.h>
# endif
# ifdef HAVE_DIRECTDRAW_16
# ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW_16
# include <Evas_Engine_Software_16_DDraw.h>
# endif
# ifdef HAVE_DIRECT3D
# ifdef BUILD_ECORE_EVAS_DIRECT3D
# include <Evas_Engine_Direct3D.h>
# endif
# ifdef BUILD_ECORE_EVAS_GL_GLEW
# include <Evas_Engine_GL_Glew.h>
# endif
#endif
#ifdef BUILD_ECORE_EVAS_SOFTWARE_16_WINCE
# include "Ecore_WinCE.h"

View File

@ -984,7 +984,7 @@ ecore_evas_software_ddraw_new(Ecore_Win32_Window *parent,
int width,
int height)
{
#ifdef BUILD_ECORE_EVAS_DIRECTDRAW
#ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW
Evas_Engine_Info_Software_DDraw *einfo;
Ecore_Evas *ee;
int rmethod;
@ -1077,7 +1077,7 @@ ecore_evas_software_ddraw_new(Ecore_Win32_Window *parent,
y = 0;
width = 0;
height = 0;
#endif /* BUILD_ECORE_EVAS_DIRECTDRAW */
#endif /* BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW */
}
EAPI Ecore_Win32_Window *
@ -1093,7 +1093,7 @@ ecore_evas_software_ddraw_16_new(Ecore_Win32_Window *parent,
int width,
int height)
{
#ifdef BUILD_ECORE_EVAS_DIRECTDRAW_16
#ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW_16
Evas_Engine_Info_Software_16_DDraw *einfo;
Ecore_Evas *ee;
int rmethod;
@ -1192,7 +1192,7 @@ ecore_evas_software_ddraw_16_new(Ecore_Win32_Window *parent,
y = 0;
width = 0;
height = 0;
#endif /* BUILD_ECORE_EVAS_DIRECTDRAW_16 */
#endif /* BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW_16 */
}
EAPI Ecore_Win32_Window *
@ -1301,3 +1301,97 @@ ecore_evas_direct3d_window_get(Ecore_Evas *ee)
{
return (Ecore_Win32_Window *) _ecore_evas_win32_window_get(ee);
}
EAPI Ecore_Evas *
ecore_evas_gl_glew_new(Ecore_Win32_Window *parent,
int x,
int y,
int width,
int height)
{
#ifdef BUILD_ECORE_EVAS_GL_GLEW
Evas_Engine_Info_GL_Glew *einfo;
Ecore_Evas *ee;
int rmethod;
rmethod = evas_render_method_lookup("gl_glew");
if (!rmethod)
return NULL;
if (!ecore_win32_init())
return NULL;
ee = calloc(1, sizeof(Ecore_Evas));
if (!ee)
return NULL;
ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
_ecore_evas_win32_init();
ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_win32_engine_func;
ee->driver = "gl_glew";
if (width < 1) width = 1;
if (height < 1) height = 1;
ee->x = x;
ee->y = y;
ee->w = width;
ee->h = height;
ee->prop.max.w = 32767;
ee->prop.max.h = 32767;
ee->prop.layer = 4;
ee->prop.request_pos = 0;
ee->prop.sticky = 0;
/* FIXME: sticky to add */
/* init evas here */
ee->evas = evas_new();
evas_data_attach_set(ee->evas, ee);
evas_output_method_set(ee->evas, rmethod);
evas_output_size_set(ee->evas, width, height);
evas_output_viewport_set(ee->evas, 0, 0, width, height);
ee->engine.win32.parent = parent;
ee->engine.win32.window = ecore_win32_window_new(parent, x, y, width, height);
if (!ee->engine.win32.window)
{
_ecore_evas_win32_shutdown();
free(ee);
return NULL;
}
einfo = (Evas_Engine_Info_GL_Glew *)evas_engine_info_get(ee->evas);
if (einfo)
{
/* FIXME: REDRAW_DEBUG missing for now */
einfo->info.window = ((struct _Ecore_Win32_Window *)ee->engine.win32.window)->window;
einfo->info.depth = ecore_win32_screen_depth_get();
evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
}
evas_key_modifier_add(ee->evas, "Shift");
evas_key_modifier_add(ee->evas, "Control");
evas_key_modifier_add(ee->evas, "Alt");
evas_key_modifier_add(ee->evas, "Meta");
evas_key_modifier_add(ee->evas, "Hyper");
evas_key_modifier_add(ee->evas, "Super");
evas_key_lock_add(ee->evas, "Caps_Lock");
evas_key_lock_add(ee->evas, "Num_Lock");
evas_key_lock_add(ee->evas, "Scroll_Lock");
ecore_evases = _ecore_list2_prepend(ecore_evases, ee);
ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee);
return ee;
#else
return NULL;
parent = NULL;
x = 0;
y = 0;
width = 0;
height = 0;
#endif /* BUILD_ECORE_EVAS_GL_GLEW */
}