forked from enlightenment/efl
swapper infra work - handle if buffer sizes dont match... :)
SVN revision: 83764
This commit is contained in:
parent
afd8a714f4
commit
5a80685803
|
@ -226,7 +226,8 @@ evas_software_xlib_swapbuf_new_region_for_update(Outbuf *buf, int x, int y, int
|
|||
im = buf->priv.onebuf;
|
||||
if (!im)
|
||||
{
|
||||
data = evas_xlib_swapper_buffer_map(buf->priv.swapper, &bpl);
|
||||
data = evas_xlib_swapper_buffer_map(buf->priv.swapper, &bpl,
|
||||
&(buf->w), &(buf->h));
|
||||
#ifdef EVAS_CSERVE2
|
||||
if (evas_cserve2_use_get())
|
||||
im = (RGBA_Image *)evas_cache2_image_data(evas_common_image_cache2_get(),
|
||||
|
@ -482,8 +483,11 @@ evas_software_xlib_swapbuf_push_updated_region(Outbuf *buf, RGBA_Image *update,
|
|||
}
|
||||
src_data = update->image.data;
|
||||
if (!src_data) return;
|
||||
dst_data = evas_xlib_swapper_buffer_map(buf->priv.swapper, &bpl);
|
||||
dst_data = evas_xlib_swapper_buffer_map(buf->priv.swapper, &bpl,
|
||||
&(buf->w), &(buf->h));
|
||||
if (!dst_data) return;
|
||||
RECTS_CLIP_TO_RECT(r.x, r.y, r.w, r.h, 0, 0, buf->w, buf->h);
|
||||
if ((r.w <= 0) || (r.h <= 0)) return;
|
||||
bpp = d / 8;
|
||||
if (bpp <= 0) return;
|
||||
wid = bpl / bpp;
|
||||
|
|
|
@ -227,10 +227,12 @@ evas_xlib_swapper_free(X_Swapper *swp)
|
|||
}
|
||||
|
||||
void *
|
||||
evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl)
|
||||
evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl, int *w, int *h)
|
||||
{
|
||||
swp->mapped = EINA_TRUE;
|
||||
if (bpl) *bpl = swp->buf[swp->buf_cur].bpl;
|
||||
if (w) *w = swp->w;
|
||||
if (h) *h = swp->h;
|
||||
return swp->buf[swp->buf_cur].data;
|
||||
}
|
||||
|
||||
|
@ -676,7 +678,7 @@ evas_xlib_swapper_free(X_Swapper *swp)
|
|||
}
|
||||
|
||||
void *
|
||||
evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl)
|
||||
evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl, int *w, int *h)
|
||||
{
|
||||
unsigned int attach = DRI2BufferBackLeft;
|
||||
int num;
|
||||
|
@ -766,6 +768,8 @@ evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl)
|
|||
}
|
||||
swp->w = swp->buf_w;
|
||||
swp->h = swp->buf_h;
|
||||
if (w) *w = swp->w;
|
||||
if (h) *h = swp->h;
|
||||
return swp->buf_data;
|
||||
}
|
||||
|
||||
|
@ -806,7 +810,7 @@ evas_xlib_swapper_buffer_state_get(X_Swapper *swp)
|
|||
{
|
||||
DRI2BufferFlags *flags;
|
||||
|
||||
if (!swp->mapped) evas_xlib_swapper_buffer_map(swp, NULL);
|
||||
if (!swp->mapped) evas_xlib_swapper_buffer_map(swp, NULL, NULL, NULL);
|
||||
if (!swp->mapped) return MODE_FULL;
|
||||
flags = (DRI2BufferFlags *)(&(swp->buf->flags));
|
||||
if (flags->data.idx_reuse != swp->last_count)
|
||||
|
@ -906,7 +910,7 @@ evas_xlib_swapper_free(X_Swapper *swp EINA_UNUSED)
|
|||
}
|
||||
|
||||
void *
|
||||
evas_xlib_swapper_buffer_map(X_Swapper *swp EINA_UNUSED, int *bpl EINA_UNUSED)
|
||||
evas_xlib_swapper_buffer_map(X_Swapper *swp EINA_UNUSED, int *bpl EINA_UNUSED, int *w EINA_UNUSED, int *h EINA_UNUSED)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ typedef struct _X_Swapper X_Swapper;
|
|||
X_Swapper *evas_xlib_swapper_new(Display *disp, Drawable draw, Visual *vis,
|
||||
int depth, int w, int h);
|
||||
void evas_xlib_swapper_free(X_Swapper *swp);
|
||||
void *evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl);
|
||||
void *evas_xlib_swapper_buffer_map(X_Swapper *swp, int *bpl, int *w, int *h);
|
||||
void evas_xlib_swapper_buffer_unmap(X_Swapper *swp);
|
||||
void evas_xlib_swapper_swap(X_Swapper *swp, Eina_Rectangle *rects, int nrects);
|
||||
int evas_xlib_swapper_buffer_state_get(X_Swapper *swp);
|
||||
|
|
Loading…
Reference in New Issue