sung pushed a commit to branch master.
commit e1c238b1be5f942b59ab7b3a575a80a9f22109da
Author: Sung W. Park <[email protected]>
Date: Mon Jun 17 16:20:47 2013 +0900
Added Wayland fix for evas_gl direct fix
---
src/modules/evas/engines/gl_x11/evas_engine.c | 3 +-
src/modules/evas/engines/wayland_egl/evas_engine.c | 51 ++++++++++++++++++----
2 files changed, 44 insertions(+), 10 deletions(-)
diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c
b/src/modules/evas/engines/gl_x11/evas_engine.c
index 8106289..f467c29 100644
--- a/src/modules/evas/engines/gl_x11/evas_engine.c
+++ b/src/modules/evas/engines/gl_x11/evas_engine.c
@@ -53,12 +53,12 @@ struct _Render_Engine
int lost_back;
int prev_age;
Eina_Bool evgl_initted : 1;
+
struct {
Evas_Object_Image_Pixels_Get_Cb get_pixels;
void *get_pixels_data;
Evas_Object *obj;
} func;
-
};
static int initted = 0;
@@ -3119,7 +3119,6 @@ eng_gl_direct_override_get(void *data, int *override, int
*force_off)
EVGLINIT(data, );
evgl_direct_override_get(override, force_off);
}
-//--------------------------------//
static void
eng_gl_get_pixels_set(void *data, void *get_pixels, void *get_pixels_data,
void *obj)
diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.c
b/src/modules/evas/engines/wayland_egl/evas_engine.c
index 40aeb4c..6ed5e96 100644
--- a/src/modules/evas/engines/wayland_egl/evas_engine.c
+++ b/src/modules/evas/engines/wayland_egl/evas_engine.c
@@ -41,6 +41,12 @@ struct _Render_Engine
Eina_Bool lost_back : 1;
Eina_Bool end : 1;
Eina_Bool evgl_initted : 1;
+
+ struct {
+ Evas_Object_Image_Pixels_Get_Cb get_pixels;
+ void *get_pixels_data;
+ Evas_Object *obj;
+ } func;
};
typedef struct _Native Native;
@@ -1392,14 +1398,22 @@ eng_gl_api_get(void *data)
return evgl_api_get();
}
-static void
-eng_gl_img_obj_set(void *data, void *image, int has_alpha)
+static void
+eng_gl_direct_override_get(void *data, int *override, int *force_off)
{
- Render_Engine *re;
+ EVGLINIT(data, );
+ evgl_direct_override_get(override, force_off);
+}
+
+static void
+eng_gl_get_pixels_set(void *data, void *get_pixels, void *get_pixels_data,
void *obj)
+{
+ Render_Engine *re = (Render_Engine *)data;
- if (!(re = (Render_Engine *)data)) return;
EVGLINIT(data, );
- evgl_direct_img_obj_set(image, has_alpha, re->win->gl_context->rot);
+ re->func.get_pixels = get_pixels;
+ re->func.get_pixels_data = get_pixels_data;
+ re->func.obj = (Evas_Object*)obj;
}
static void
@@ -1905,10 +1919,30 @@ eng_image_draw(void *data, void *context, void
*surface, void *image, int src_x,
if ((n) && (n->ns.type == EVAS_NATIVE_SURFACE_OPENGL) &&
(n->ns.data.opengl.framebuffer_id == 0) &&
- (evgl_direct_rendered()))
+ re->func.get_pixels)
{
DBG("Rendering Directly to the window: %p", data);
- evas_object_image_pixels_dirty_set(evgl_direct_img_obj_get(),
EINA_TRUE);
+
+ re->win->gl_context->dc = context;
+
+ if (re->func.get_pixels)
+ {
+
+ // Pass the clip info the evas_gl
+ evgl_direct_img_clip_set(1,
+ re->win->gl_context->dc->clip.x,
+ re->win->gl_context->dc->clip.y,
+ re->win->gl_context->dc->clip.w,
+ re->win->gl_context->dc->clip.h);
+
+ // Call pixel get function
+ evgl_direct_img_obj_set(re->func.obj, re->win->gl_context->rot);
+ re->func.get_pixels(re->func.get_pixels_data, re->func.obj);
+ evgl_direct_img_obj_set(NULL, 0);
+
+ // Reset clip
+ evgl_direct_img_clip_set(0, 0, 0, 0, 0);
+ }
}
else
{
@@ -2523,7 +2557,8 @@ module_open(Evas_Module *em)
ORD(gl_proc_address_get);
ORD(gl_native_surface_get);
ORD(gl_api_get);
- ORD(gl_img_obj_set);
+ ORD(gl_direct_override_get);
+ ORD(gl_get_pixels_set);
ORD(rectangle_draw);
ORD(line_draw);
--
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:
Build for Windows Store.
http://p.sf.net/sfu/windows-dev2dev