diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-01-30 18:22:52 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2019-01-30 18:22:52 +0100 |
commit | cefc849a9521c9d5ba85d5aa88526d0f4b059db9 (patch) | |
tree | b5f42fb9651de5734abc2e23647ca9ec7ea49c25 /sys/src/cmd/vnc | |
parent | 8e1218acebcb87bcf16e6bca5b5f213ff2a1df3a (diff) |
devdraw: get rid of softscreen==0xa110c hack and make attachscreen() return Memdata*
all screen implementations use a Memimage* internally
for the framebuffer, so we can return a shared reference
to its Memdata structure in attachscreen() instead of
a framebuffer data pointer.
this eleminates the softscreen == 0xa110c hack as we
always use shared Memdata* now.
Diffstat (limited to 'sys/src/cmd/vnc')
-rw-r--r-- | sys/src/cmd/vnc/devdraw.c | 29 | ||||
-rw-r--r-- | sys/src/cmd/vnc/screen.c | 5 | ||||
-rw-r--r-- | sys/src/cmd/vnc/screen.h | 2 |
3 files changed, 9 insertions, 27 deletions
diff --git a/sys/src/cmd/vnc/devdraw.c b/sys/src/cmd/vnc/devdraw.c index 07d27c147..48ec63e03 100644 --- a/sys/src/cmd/vnc/devdraw.c +++ b/sys/src/cmd/vnc/devdraw.c @@ -925,33 +925,14 @@ makescreenimage(void) Memdata *md; Memimage *i; Rectangle r; - uchar *data; - if((data = attachscreen(&r, &chan, &depth, &width, &sdraw.softscreen)) == nil) + if((md = attachscreen(&r, &chan, &depth, &width, &sdraw.softscreen)) == nil) return nil; - if(sdraw.softscreen == 0xa110c){ - /* hack: softscreen is memimage. */ - md = *((Memdata**)(data - sizeof(ulong) - sizeof(Memdata*))); - - assert(md->bdata == data); - assert(md->ref > 1); - assert(md->allocd); - - if((i = allocmemimaged(r, chan, md)) == nil){ - md->ref--; - return nil; - } - }else{ - if((md = malloc(sizeof *md)) == nil) - return nil; - md->allocd = 1; - md->base = nil; - md->bdata = data; - md->ref = 1; - if((i = allocmemimaged(r, chan, md)) == nil){ + assert(md->ref > 0); + if((i = allocmemimaged(r, chan, md)) == nil){ + if(--md->ref == 0 && md->allocd) free(md); - return nil; - } + return nil; } i->width = width; i->clipr = r; diff --git a/sys/src/cmd/vnc/screen.c b/sys/src/cmd/vnc/screen.c index 6d507877c..51361584d 100644 --- a/sys/src/cmd/vnc/screen.c +++ b/sys/src/cmd/vnc/screen.c @@ -126,7 +126,7 @@ screenwin(void) qunlock(&drawlock); } -uchar* +Memdata* attachscreen(Rectangle* r, ulong* chan, int* d, int* width, int *softscreen) { *r = gscreen->clipr; @@ -135,7 +135,8 @@ attachscreen(Rectangle* r, ulong* chan, int* d, int* width, int *softscreen) *width = gscreen->width; *softscreen = 1; - return gscreen->data->bdata; + gscreen->data->ref++; + return gscreen->data; } void diff --git a/sys/src/cmd/vnc/screen.h b/sys/src/cmd/vnc/screen.h index ce525102c..5ba53a9ac 100644 --- a/sys/src/cmd/vnc/screen.h +++ b/sys/src/cmd/vnc/screen.h @@ -29,7 +29,7 @@ extern void blankscreen(int); void screeninit(int x, int y, char *chanstr); void screenwin(void); void absmousetrack(int x, int y, int b, ulong msec); -uchar *attachscreen(Rectangle*, ulong*, int*, int*, int*); +Memdata* attachscreen(Rectangle*, ulong*, int*, int*, int*); void deletescreenimage(void); void resetscreenimage(void); |