Mercurial > sdl-ios-xcode
changeset 2223:175754591a13
Optimized dirty rect code
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 11 Aug 2007 21:34:08 +0000 |
parents | 926294b2bb4e |
children | 29cc9e9c76bd |
files | src/video/SDL_rect.c |
diffstat | 1 files changed, 10 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/src/video/SDL_rect.c Sat Aug 11 20:54:31 2007 +0000 +++ b/src/video/SDL_rect.c Sat Aug 11 21:34:08 2007 +0000 @@ -122,7 +122,14 @@ SDL_AddDirtyRect(SDL_DirtyRectList * list, const SDL_Rect * rect) { SDL_DirtyRect *dirty; - SDL_DirtyRect *check, *prev, *next; + + /* FIXME: At what point is this optimization too expensive? */ + for (dirty = list->list; dirty; dirty = dirty->next) { + if (SDL_HasIntersection(&dirty->rect, rect)) { + SDL_UnionRect(&dirty->rect, rect, &dirty->rect); + return; + } + } if (list->free) { dirty = list->free; @@ -134,26 +141,6 @@ } } dirty->rect = *rect; - - /* FIXME: At what point is this optimization too expensive? */ - for (prev = NULL, check = list->list; check; check = next) { - next = check->next; - - if (SDL_HasIntersection(&dirty->rect, &check->rect)) { - SDL_UnionRect(&dirty->rect, &check->rect, &dirty->rect); - if (prev) { - prev->next = next; - } else { - list->list = next; - } - check->next = list->free; - list->free = check; - --list->count; - } else { - prev = check; - } - } - dirty->next = list->list; list->list = dirty; ++list->count; @@ -162,12 +149,8 @@ void SDL_ClearDirtyRects(SDL_DirtyRectList * list) { - while (list->list) { - SDL_DirtyRect *elem = list->list; - list->list = elem->next; - elem->next = list->free; - list->free = elem; - } + list->free = list->list; + list->list = NULL; list->count = 0; }