Fix for rendering RGBA and Image textures. RGBA and Image textures could exceed their tarea if given an x or y offset inside the area that is > 0.
Dana Jansens danakj@orodu.net
1 files changed,
12 insertions(+),
8 deletions(-)
jump to
M
render/render.c
→
render/render.c
@@ -135,12 +135,14 @@ g_assert(!transferred);
{ RrRect narea = tarea; RrTextureImage *img = &a->texture[i].data.image; - if (img->twidth) - narea.width = MIN(tarea.width, img->twidth); - if (img->theight) - narea.height = MIN(tarea.height, img->theight); narea.x += img->tx; + narea.width -= img->tx; narea.y += img->ty; + narea.height -= img->ty; + if (img->twidth) + narea.width = MIN(narea.width, img->twidth); + if (img->theight) + narea.height = MIN(narea.height, img->theight); RrImageDrawImage(a->surface.pixel_data, &a->texture[i].data.image, a->w, a->h,@@ -153,12 +155,14 @@ g_assert(!transferred);
{ RrRect narea = tarea; RrTextureRGBA *rgb = &a->texture[i].data.rgba; - if (rgb->twidth) - narea.width = MIN(tarea.width, rgb->twidth); - if (rgb->theight) - narea.height = MIN(tarea.height, rgb->theight); narea.x += rgb->tx; + narea.width -= rgb->tx; narea.y += rgb->ty; + narea.height -= rgb->ty; + if (rgb->twidth) + narea.width = MIN(narea.width, rgb->twidth); + if (rgb->theight) + narea.height = MIN(narea.height, rgb->theight); RrImageDrawRGBA(a->surface.pixel_data, &a->texture[i].data.rgba, a->w, a->h,