summaryrefslogtreecommitdiff
path: root/src/fb.c
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2020-09-25 18:47:25 -0700
committerVito Caputo <vcaputo@pengaru.com>2020-09-25 20:54:34 -0700
commitd9db2680298c01a82b768dc19e75bf4f2ef1b56e (patch)
tree1e52d4cbfa4747bc0cb8f405881d5575a0db9b7e /src/fb.c
parentdb9cc3ab1037ed98d2c6c9dbf44c60d08ca696c2 (diff)
fb: track zeroed state in fb_fragment_t
This adds a bit flag for tracking if the fragment has been zeroed since its last flip/present. When a fresh frame comes back from flipping, its zeroed state is reset to false. When fb_fragment_zero() is called, it checks if zeroed is true, and skips the zeroing if so. If zeroed is false, fb_fragment_zero() will zero the fragment and set the zeroed flag to 1. This change is preparatory for layering the output of modules in a compositing fashion. Not all modules are amenable to being used as upper layers, since they inherently fill the screen with new pixels every frame. Those modules make good bottom or bg layers. Other modules perform fb_fragment_zero() every frame and add relatively few pixels atop a clean slate. These modules make good candidates for upper layers where this change becomes relevant.
Diffstat (limited to 'src/fb.c')
-rw-r--r--src/fb.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/fb.c b/src/fb.c
index c909f6a..f7076a3 100644
--- a/src/fb.c
+++ b/src/fb.c
@@ -191,6 +191,7 @@ static inline _fb_page_t * _fb_page_get(fb_t *fb)
pthread_mutex_unlock(&fb->inactive_mutex);
page->next = NULL;
+ page->public_page.fragment.zeroed = 0;
return page;
}
@@ -329,6 +330,7 @@ int fb_fragment_slice_single(const fb_fragment_t *fragment, unsigned n_fragments
res_fragment->stride = fragment->stride;
res_fragment->pitch = fragment->pitch;
res_fragment->number = number;
+ res_fragment->zeroed = fragment->zeroed;
return 1;
}
© All Rights Reserved