simple-shm: Draw the test motif surrounded by a white border
We can then use a wl_surface_damage to just trigger the compositor to update just a selected region of the buffer and thus test damaging a sub region.
This commit is contained in:
committed by
Kristian Høgsberg
parent
fecf332e19
commit
371805f76e
+13
-7
@@ -160,10 +160,10 @@ destroy_window(struct window *window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
paint_pixels(void *image, int width, int height, uint32_t time)
|
paint_pixels(void *image, int padding, int width, int height, uint32_t time)
|
||||||
{
|
{
|
||||||
const int halfh = height / 2;
|
const int halfh = padding + (height - padding * 2) / 2;
|
||||||
const int halfw = width / 2;
|
const int halfw = padding + (width - padding * 2) / 2;
|
||||||
int ir, or;
|
int ir, or;
|
||||||
uint32_t *pixel = image;
|
uint32_t *pixel = image;
|
||||||
int y;
|
int y;
|
||||||
@@ -174,11 +174,13 @@ paint_pixels(void *image, int width, int height, uint32_t time)
|
|||||||
or *= or;
|
or *= or;
|
||||||
ir *= ir;
|
ir *= ir;
|
||||||
|
|
||||||
for (y = 0; y < height; y++) {
|
pixel += padding * width;
|
||||||
|
for (y = padding; y < height - padding; y++) {
|
||||||
int x;
|
int x;
|
||||||
int y2 = (y - halfh) * (y - halfh);
|
int y2 = (y - halfh) * (y - halfh);
|
||||||
|
|
||||||
for (x = 0; x < width; x++) {
|
pixel += padding;
|
||||||
|
for (x = padding; x < width - padding; x++) {
|
||||||
uint32_t v;
|
uint32_t v;
|
||||||
|
|
||||||
/* squared distance from center */
|
/* squared distance from center */
|
||||||
@@ -198,6 +200,8 @@ paint_pixels(void *image, int width, int height, uint32_t time)
|
|||||||
|
|
||||||
*pixel++ = v;
|
*pixel++ = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pixel += padding;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,9 +212,9 @@ redraw(void *data, struct wl_callback *callback, uint32_t time)
|
|||||||
{
|
{
|
||||||
struct window *window = data;
|
struct window *window = data;
|
||||||
|
|
||||||
paint_pixels(window->shm_data, window->width, window->height, time);
|
paint_pixels(window->shm_data, 20, window->width, window->height, time);
|
||||||
wl_surface_damage(window->surface,
|
wl_surface_damage(window->surface,
|
||||||
0, 0, window->width, window->height);
|
20, 20, window->width - 40, window->height - 40);
|
||||||
|
|
||||||
if (callback)
|
if (callback)
|
||||||
wl_callback_destroy(callback);
|
wl_callback_destroy(callback);
|
||||||
@@ -329,7 +333,9 @@ main(int argc, char **argv)
|
|||||||
sigint.sa_flags = SA_RESETHAND;
|
sigint.sa_flags = SA_RESETHAND;
|
||||||
sigaction(SIGINT, &sigint, NULL);
|
sigaction(SIGINT, &sigint, NULL);
|
||||||
|
|
||||||
|
memset(window->shm_data, 0xff, window->width * window->height * 4);
|
||||||
wl_surface_attach(window->surface, window->buffer, 0, 0);
|
wl_surface_attach(window->surface, window->buffer, 0, 0);
|
||||||
|
|
||||||
redraw(window, NULL, 0);
|
redraw(window, NULL, 0);
|
||||||
|
|
||||||
while (running)
|
while (running)
|
||||||
|
|||||||
Reference in New Issue
Block a user