add pre/post swap callbacks. need them! :(
SVN revision: 45514
This commit is contained in:
parent
b9cbdd4a7d
commit
c12557d8f0
|
@ -1030,6 +1030,7 @@ shader_array_flush(Evas_GL_Context *gc)
|
||||||
glBindTexture(GL_TEXTURE_2D, gc->shader.cur_texu);
|
glBindTexture(GL_TEXTURE_2D, gc->shader.cur_texu);
|
||||||
glActiveTexture(GL_TEXTURE2);
|
glActiveTexture(GL_TEXTURE2);
|
||||||
glBindTexture(GL_TEXTURE_2D, gc->shader.cur_texv);
|
glBindTexture(GL_TEXTURE_2D, gc->shader.cur_texv);
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
}
|
}
|
||||||
else if (gc->array.use_texuv2)
|
else if (gc->array.use_texuv2)
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,13 @@ struct _Evas_Engine_Info_GL_X11
|
||||||
Colormap (*best_colormap_get) (Display *disp, int screen);
|
Colormap (*best_colormap_get) (Display *disp, int screen);
|
||||||
int (*best_depth_get) (Display *disp, int screen);
|
int (*best_depth_get) (Display *disp, int screen);
|
||||||
} func;
|
} func;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
void (*pre_swap) (void *data, Evas *e);
|
||||||
|
void (*post_swap) (void *data, Evas *e);
|
||||||
|
|
||||||
|
void *data; // data for callback calls
|
||||||
|
} callback;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -72,8 +72,10 @@ typedef struct _Render_Engine Render_Engine;
|
||||||
|
|
||||||
struct _Render_Engine
|
struct _Render_Engine
|
||||||
{
|
{
|
||||||
Evas_GL_X11_Window *win;
|
Evas_GL_X11_Window *win;
|
||||||
int end;
|
Evas_Engine_Info_GL_X11 *info;
|
||||||
|
Evas *evas;
|
||||||
|
int end;
|
||||||
|
|
||||||
XrmDatabase xrdb; // xres - dpi
|
XrmDatabase xrdb; // xres - dpi
|
||||||
struct { // xres - dpi
|
struct { // xres - dpi
|
||||||
|
@ -122,6 +124,8 @@ eng_setup(Evas *e, void *in)
|
||||||
#endif
|
#endif
|
||||||
re = calloc(1, sizeof(Render_Engine));
|
re = calloc(1, sizeof(Render_Engine));
|
||||||
if (!re) return 0;
|
if (!re) return 0;
|
||||||
|
re->info = info;
|
||||||
|
re->evas = e;
|
||||||
e->engine.data.output = re;
|
e->engine.data.output = re;
|
||||||
re->win = eng_window_new(info->info.display,
|
re->win = eng_window_new(info->info.display,
|
||||||
info->info.drawable,
|
info->info.drawable,
|
||||||
|
@ -391,8 +395,8 @@ eng_output_flush(void *data)
|
||||||
re->win->draw.drew = 0;
|
re->win->draw.drew = 0;
|
||||||
eng_window_use(re->win);
|
eng_window_use(re->win);
|
||||||
|
|
||||||
|
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
||||||
// glFlush();
|
// glFlush();
|
||||||
# if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
|
||||||
eglSwapBuffers(re->win->egl_disp, re->win->egl_surface[0]);
|
eglSwapBuffers(re->win->egl_disp, re->win->egl_surface[0]);
|
||||||
#else
|
#else
|
||||||
# ifdef VSYNC_TO_SCREEN
|
# ifdef VSYNC_TO_SCREEN
|
||||||
|
@ -403,18 +407,17 @@ eng_output_flush(void *data)
|
||||||
// glXWaitVideoSyncSGI(2, (rc + 1) % 2, &rc);
|
// glXWaitVideoSyncSGI(2, (rc + 1) % 2, &rc);
|
||||||
// }
|
// }
|
||||||
# endif
|
# endif
|
||||||
# ifdef SLOW_GL_COPY_RECT
|
if (re->info->callback.pre_swap)
|
||||||
|
{
|
||||||
|
glXWaitGL();
|
||||||
|
re->info->callback.pre_swap(re->info->callback.data, re->evas);
|
||||||
|
}
|
||||||
glXSwapBuffers(re->win->disp, re->win->win);
|
glXSwapBuffers(re->win->disp, re->win->win);
|
||||||
# else
|
if (re->info->callback.post_swap)
|
||||||
// /* SLOW AS ALL HELL! */
|
{
|
||||||
// evas_gl_common_swap_rect(re->win->gl_context,
|
glXWaitGL();
|
||||||
// re->win->draw.x1, re->win->draw.y1,
|
re->info->callback.post_swap(re->info->callback.data, re->evas);
|
||||||
// re->win->draw.x2 - re->win->draw.x1 + 1,
|
}
|
||||||
// re->win->draw.y2 - re->win->draw.y1 + 1);
|
|
||||||
# endif
|
|
||||||
// glFlush();
|
|
||||||
// glXWaitGL();
|
|
||||||
// XSync(re->win->disp, False);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue