summaryrefslogtreecommitdiff
path: root/fb.c
diff options
context:
space:
mode:
Diffstat (limited to 'fb.c')
-rw-r--r--fb.c67
1 files changed, 65 insertions, 2 deletions
diff --git a/fb.c b/fb.c
index c23678d..ec1c056 100644
--- a/fb.c
+++ b/fb.c
@@ -163,6 +163,23 @@ upscaledraw(Raster *fb, Image *dst, Point off, Point scale, uint filter)
free(blk);
}
+//typedef struct Ldimgtask Ldimgtask;
+//struct Ldimgtask
+//{
+// Image *dst;
+// Rectangle dr;
+// uchar *src;
+// ulong len;
+//};
+//static void
+//ldimgtask(void *arg)
+//{
+// Ldimgtask *t;
+//
+// t = arg;
+// loadimage(t->dst, t->dr, t->src, t->len);
+//}
+
static void
framebufctl_draw(Framebufctl *ctl, Image *dst, char *name, Point off, Point scale)
{
@@ -195,9 +212,55 @@ framebufctl_draw(Framebufctl *ctl, Image *dst, char *name, Point off, Point scal
sr = rectaddpt(fb->r, off);
dr = rectsubpt(dst->r, dst->r.min);
- if(rectinrect(sr, dr))
+ if(rectinrect(sr, dr)){
+// Ldimgtask *tasks;
+// Rectangle blkr;
+// ulong len, stride;
+// int Δy, i;
+// static Display **disps;
+// static Image **imgs;
+// static int loaded;
+//
+// assert(turbodrawingpool != nil);
+//
+// if(!loaded){
+// disps = emalloc(turbodrawingpool->nprocs * sizeof(*disps));
+// imgs = emalloc(turbodrawingpool->nprocs * sizeof(*imgs));
+// for(i = 0; i < turbodrawingpool->nprocs; i++){
+// disps[i] = initdisplay(nil, nil, nil);
+// if(disps[i] == nil)
+// sysfatal("initdisplay: %r");
+// imgs[i] = namedimage(disps[i], "screenb");
+// if(imgs[i] == nil)
+// sysfatal("namedimage: %r");
+////fprint(2, "d %#p i %#p → %#p\n", disps[i], imgs[i], imgs[i]->display);
+// }
+// loaded++;
+// }
+//
+// len = Dx(r->r)*Dy(r->r)*4;
+// Δy = Dy(sr)/turbodrawingpool->nprocs;
+// dr = rectaddpt(sr, dst->r.min);
+// blkr = dr;
+// blkr.max.y = blkr.min.y + Δy;
+// stride = Dx(blkr)*Dy(blkr)*4;
+// tasks = emalloc(turbodrawingpool->nprocs * sizeof(*tasks));
+//
+// for(i = 0; i < turbodrawingpool->nprocs; i++){
+// tasks[i].dst = imgs[i];
+// tasks[i].dr = rectaddpt(blkr, Pt(0, i*Δy));
+// tasks[i].src = (uchar*)r->data + i*stride;
+// tasks[i].len = stride;
+// if(i == turbodrawingpool->nprocs-1){
+// tasks[i].dr.max.y = dr.max.y;
+// tasks[i].len = len - i*stride;
+// }
+// procpoolexec(turbodrawingpool, ldimgtask, &tasks[i]);
+// }
+// procpoolwait(turbodrawingpool);
+// free(tasks);
loadimage(dst, rectaddpt(sr, dst->r.min), (uchar*)r->data, Dx(fb->r)*Dy(r->r)*4);
- else if(rectclip(&sr, dr)){
+ }else if(rectclip(&sr, dr)){
dr = sr;
dr.max.y = dr.min.y + 1;
/* remove offset to get the actual rect within the framebuffer */