Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Fix X11_FillRects to work with double buffering as well as triple buf…
Browse files Browse the repository at this point in the history
…fering. This requires that the buffer pixmap be cleared after every render.
  • Loading branch information
sunnyps committed Jun 2, 2010
1 parent 181aeda commit e4d5d55
Showing 1 changed file with 20 additions and 2 deletions.
22 changes: 20 additions & 2 deletions src/video/x11/SDL_x11render.c
Expand Up @@ -290,6 +290,8 @@ X11_CreateRenderer(SDL_Window * window, Uint32 flags)
if(!data->pixmap_picts[i]) {
data->xrender_available = SDL_FALSE;
}
XRenderComposite(data->display, PictOpClear, data->pixmap_picts[i], None, data->pixmap_picts[i],
0, 0, 0, 0, 0, 0, window->w, window->h);
}
#endif
}
Expand Down Expand Up @@ -374,6 +376,8 @@ X11_DisplayModeChanged(SDL_Renderer * renderer)
if(!data->pixmap_picts[i]) {
data->xrender_available = SDL_FALSE;
}
XRenderComposite(data->display, PictOpClear, data->pixmap_picts[i], None, data->pixmap_picts[i],
0, 0, 0, 0, 0, 0, window->w, window->h);
}
#endif
}
Expand Down Expand Up @@ -735,6 +739,13 @@ X11_SetDrawBlendMode(SDL_Renderer * renderer)
switch (renderer->blendMode) {
case SDL_BLENDMODE_NONE:
return 0;
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
case SDL_BLENDMODE_MASK: // Use src pict as mask
case SDL_BLENDMODE_ADD: // PictOpAdd
case SDL_BLENDMODE_BLEND: // PictOpOver
/* FIXME case SDL_BLENDMODE_MOD: */
#endif
return 0;
default:
SDL_Unsupported();
renderer->blendMode = SDL_BLENDMODE_NONE;
Expand Down Expand Up @@ -1038,7 +1049,7 @@ X11_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count)
xrender_foreground_color.green = ((unsigned short)renderer->g + 1) * ((unsigned short)renderer->a + 1) - 1;
xrender_foreground_color.blue = ((unsigned short)renderer->b + 1) * ((unsigned short)renderer->a + 1) - 1;
xrender_foreground_color.alpha = ((unsigned short)renderer->a + 1) * ((unsigned short)renderer->a + 1) - 1;
XRenderFillRectangles(data->display, PictOpSrc, data->drawable_pict,
XRenderFillRectangles(data->display, PictOpOver, data->drawable_pict,
&xrender_foreground_color, xrects, xcount);
}
else
Expand Down Expand Up @@ -1241,7 +1252,7 @@ X11_RenderPresent(SDL_Renderer * renderer)
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
if(data->xrender_available == SDL_TRUE)
{
XRenderComposite(data->display, PictOpSrc, data->drawable_pict, None, data->xwindow_pict,
XRenderComposite(data->display, PictOpOver, data->drawable_pict, None, data->xwindow_pict,
rect->x, rect->y, 0, 0, rect->x, rect->y, rect->w, rect->h);
}
else
Expand All @@ -1253,6 +1264,13 @@ X11_RenderPresent(SDL_Renderer * renderer)
}
}
SDL_ClearDirtyRects(&data->dirty);
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
// Clear each pixmap after a render
if(data->xrender_available == SDL_TRUE) {
XRenderComposite(data->display, PictOpClear, data->drawable_pict, None, data->drawable_pict,
0, 0, 0, 0, 0, 0, renderer->window->w, renderer->window->h);
}
#endif
}
XSync(data->display, False);

Expand Down

0 comments on commit e4d5d55

Please sign in to comment.