forked from enlightenment/efl
Evas (wayland_egl): More bug fixes & cleanups ! :)
When we create the egl window we should take rotation into consideration, so account for that. Add an 'edges' variable to the engine info structure. This is needed so we can implement resizing windows from the top also. Make sure to use wl_egl_window_get_attached_size and determine the edge we are resizing from, so we can calculate the difference in sizes to send to wl_egl_window_resize. Add __UNUSED__ to function paramaters where it was missing, and fix some compiler warnings. SVN revision: 75215
This commit is contained in:
parent
a5df8468b0
commit
419c817815
|
@ -24,7 +24,8 @@ struct _Evas_Engine_Info_Wayland_Egl
|
||||||
int depth;
|
int depth;
|
||||||
int screen;
|
int screen;
|
||||||
int rotation;
|
int rotation;
|
||||||
unsigned int destination_alpha : 1;
|
int edges;
|
||||||
|
unsigned int destination_alpha : 1;
|
||||||
} info;
|
} info;
|
||||||
/* engine specific function calls to query stuff about the destination */
|
/* engine specific function calls to query stuff about the destination */
|
||||||
/* engine (what visual & colormap & depth to use, performance info etc. */
|
/* engine (what visual & colormap & depth to use, performance info etc. */
|
||||||
|
|
|
@ -473,7 +473,7 @@ static Evas_Func func, pfunc;
|
||||||
static Evas_GL_API gl_funcs;
|
static Evas_GL_API gl_funcs;
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
eng_info(Evas *e)
|
eng_info(Evas *e __UNUSED__)
|
||||||
{
|
{
|
||||||
Evas_Engine_Info_Wayland_Egl *info;
|
Evas_Engine_Info_Wayland_Egl *info;
|
||||||
|
|
||||||
|
@ -481,8 +481,8 @@ eng_info(Evas *e)
|
||||||
info->magic.magic = rand();
|
info->magic.magic = rand();
|
||||||
info->func.best_depth_get = eng_best_depth_get;
|
info->func.best_depth_get = eng_best_depth_get;
|
||||||
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
|
info->render_mode = EVAS_RENDER_MODE_BLOCKING;
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
e = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -822,7 +822,22 @@ eng_output_resize(void *data, int w, int h)
|
||||||
eng_window_use(re->win);
|
eng_window_use(re->win);
|
||||||
|
|
||||||
if (re->win->win)
|
if (re->win->win)
|
||||||
wl_egl_window_resize(re->win->win, w, h, 0, 0);
|
{
|
||||||
|
int aw, ah, dx, dy;
|
||||||
|
|
||||||
|
wl_egl_window_get_attached_size(re->win->win, &aw, &ah);
|
||||||
|
|
||||||
|
if (re->info->info.edges & 4) // resize from left
|
||||||
|
dx = aw - w;
|
||||||
|
else
|
||||||
|
dx = 0;
|
||||||
|
if (re->info->info.edges & 1) // resize from top
|
||||||
|
dy = ah - h;
|
||||||
|
else
|
||||||
|
dy = 0;
|
||||||
|
|
||||||
|
wl_egl_window_resize(re->win->win, w, h, dx, dy);
|
||||||
|
}
|
||||||
|
|
||||||
evas_gl_common_context_resize(re->win->gl_context, w, h, re->win->rot);
|
evas_gl_common_context_resize(re->win->gl_context, w, h, re->win->rot);
|
||||||
evas_common_tilebuf_free(re->tb);
|
evas_common_tilebuf_free(re->tb);
|
||||||
|
@ -1041,11 +1056,11 @@ eng_output_flush(void *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eng_output_idle_flush(void *data)
|
eng_output_idle_flush(void *data __UNUSED__)
|
||||||
{
|
{
|
||||||
Render_Engine *re;
|
/* Render_Engine *re; */
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
/* re = (Render_Engine *)data; */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1105,20 +1120,20 @@ eng_line_draw(void *data, void *context, void *surface, int x1, int y1, int x2,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
eng_polygon_point_add(void *data, void *context __UNUSED__, void *polygon, int x, int y)
|
eng_polygon_point_add(void *data __UNUSED__, void *context __UNUSED__, void *polygon, int x, int y)
|
||||||
{
|
{
|
||||||
Render_Engine *re;
|
/* Render_Engine *re; */
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
/* re = (Render_Engine *)data; */
|
||||||
return evas_gl_common_poly_point_add(polygon, x, y);
|
return evas_gl_common_poly_point_add(polygon, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
eng_polygon_points_clear(void *data, void *context __UNUSED__, void *polygon)
|
eng_polygon_points_clear(void *data __UNUSED__, void *context __UNUSED__, void *polygon)
|
||||||
{
|
{
|
||||||
Render_Engine *re;
|
/* Render_Engine *re; */
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
/* re = (Render_Engine *)data; */
|
||||||
return evas_gl_common_poly_points_clear(polygon);
|
return evas_gl_common_poly_points_clear(polygon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1249,13 +1264,13 @@ eng_image_comment_get(void *data __UNUSED__, void *image, char *key __UNUSED__)
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
eng_image_format_get(void *data __UNUSED__, void *image)
|
eng_image_format_get(void *data __UNUSED__, void *image __UNUSED__)
|
||||||
{
|
{
|
||||||
// Render_Engine *re;
|
// Render_Engine *re;
|
||||||
Evas_GL_Image *im;
|
/* Evas_GL_Image *im; */
|
||||||
|
|
||||||
// re = (Render_Engine *)data;
|
// re = (Render_Engine *)data;
|
||||||
im = image;
|
/* im = image; */
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2414,13 +2429,13 @@ eng_gl_proc_address_get(void *data __UNUSED__, const char *name)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
eng_gl_native_surface_get(void *data, void *surface, void *native_surface)
|
eng_gl_native_surface_get(void *data __UNUSED__, void *surface, void *native_surface)
|
||||||
{
|
{
|
||||||
Render_Engine *re;
|
/* Render_Engine *re; */
|
||||||
Render_Engine_GL_Surface *sfc;
|
Render_Engine_GL_Surface *sfc;
|
||||||
Evas_Native_Surface *ns;
|
Evas_Native_Surface *ns;
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
/* re = (Render_Engine *)data; */
|
||||||
sfc = (Render_Engine_GL_Surface*)surface;
|
sfc = (Render_Engine_GL_Surface*)surface;
|
||||||
ns = (Evas_Native_Surface*)native_surface;
|
ns = (Evas_Native_Surface*)native_surface;
|
||||||
|
|
||||||
|
@ -2440,9 +2455,9 @@ static const GLubyte *
|
||||||
evgl_glGetString(GLenum name)
|
evgl_glGetString(GLenum name)
|
||||||
{
|
{
|
||||||
if (name == GL_EXTENSIONS)
|
if (name == GL_EXTENSIONS)
|
||||||
return (GLubyte *)_gl_ext_string; //glGetString(GL_EXTENSIONS);
|
return (GLubyte *)_gl_ext_string; //glGetString(GL_EXTENSIONS);
|
||||||
else
|
else
|
||||||
return glGetString(name);
|
return glGetString(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2553,11 +2568,11 @@ evgl_glEvasGLImageTargetRenderbufferStorageOES(GLenum target, EvasGLImage image)
|
||||||
|
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
eng_gl_api_get(void *data)
|
eng_gl_api_get(void *data __UNUSED__)
|
||||||
{
|
{
|
||||||
Render_Engine *re;
|
/* Render_Engine *re; */
|
||||||
|
|
||||||
re = (Render_Engine *)data;
|
/* re = (Render_Engine *)data; */
|
||||||
|
|
||||||
gl_funcs.version = EVAS_GL_API_VERSION;
|
gl_funcs.version = EVAS_GL_API_VERSION;
|
||||||
|
|
||||||
|
|
|
@ -137,7 +137,10 @@ eng_window_new(struct wl_display *disp, struct wl_surface *surface, int screen,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
gw->win = wl_egl_window_create(gw->surface, gw->w, gw->h);
|
if ((gw->rot == 0) || (gw->rot == 180))
|
||||||
|
gw->win = wl_egl_window_create(gw->surface, gw->w, gw->h);
|
||||||
|
else if ((gw->rot == 90) || (gw->rot == 270))
|
||||||
|
gw->win = wl_egl_window_create(gw->surface, gw->h, gw->w);
|
||||||
|
|
||||||
gw->egl_surface[0] = eglCreateWindowSurface(gw->egl_disp, gw->egl_config,
|
gw->egl_surface[0] = eglCreateWindowSurface(gw->egl_disp, gw->egl_config,
|
||||||
(EGLNativeWindowType)gw->win,
|
(EGLNativeWindowType)gw->win,
|
||||||
|
@ -150,7 +153,9 @@ eng_window_new(struct wl_display *disp, struct wl_surface *surface, int screen,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
gw->egl_context[0] = eglCreateContext(gw->egl_disp, gw->egl_config, share_context, context_attrs);
|
gw->egl_context[0] =
|
||||||
|
eglCreateContext(gw->egl_disp, gw->egl_config, share_context,
|
||||||
|
context_attrs);
|
||||||
|
|
||||||
if (gw->egl_context[0] == EGL_NO_CONTEXT)
|
if (gw->egl_context[0] == EGL_NO_CONTEXT)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue