| plan 9 kernel history: overview | file list | diff list |
1997/1101/pc/screen.c (diff list | history)
| 1993/1113/sys/src/9/pc/screen.c:4,309 – 1997/1101/sys/src/9/pc/screen.c:4,298 (short | long) | ||
| 1993/1113 | #include "dat.h" #include "fns.h" #include "io.h" | |
| 1997/1101 | #include "ureg.h" | |
| 1993/1113 | #include "../port/error.h" | |
| 1997/1101 | #define Image IMAGE #include <draw.h> #include <memdraw.h> | |
| 1993/1113 | #include "screen.h" | |
| 1997/1101 | static ulong onesbits = ~0; static Memdata onesdata = { nil, &onesbits, | |
| 1993/1113 | }; | |
| 1997/1101 | static Memimage xones = { { 0, 0, 1, 1 }, { -100000, -100000, 100000, 100000 }, 3, 1, &onesdata, 0, 1 | |
| 1993/1113 | }; | |
| 1997/1101 | Memimage *memones = &xones; | |
| 1993/1113 |
| |
| 1997/1101 | Point ZP = {0, 0}; | |
| 1993/1113 |
| |
| 1997/1101 | Memdata gscreendata; Memimage gscreen; | |
| 1993/1113 |
| |
| 1997/1101 | VGAscr vgascreen[1]; | |
| 1993/1113 |
| |
| 1997/1101 | int screensize(int x, int y, int z) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; | |
| 1993/1113 |
| |
| 1997/1101 | scr = &vgascreen[0]; | |
| 1993/1113 | /* | |
| 1997/1101 | * BUG: need to check if any xalloc'ed memory needs to * be given back if aperture is set. | |
| 1993/1113 | */ | |
| 1997/1101 | if(scr->aperture == 0){ int width = (x*(1<<z))/BI2WD; | |
| 1993/1113 |
| |
| 1997/1101 | gscreendata.data = xalloc(width*BY2WD*y); if(gscreendata.data == 0) error("screensize: vga soft memory"); memset(gscreendata.data, Backgnd, width*BY2WD*y); scr->useflush = 1; | |
| 1993/1113 |
| |
| 1997/1101 | scr->aperture = 0xA0000; scr->apsize = 1<<16; } else gscreendata.data = KADDR(scr->aperture); gscreen.data = &gscreendata; gscreen.ldepth = z; gscreen.width = (x*(1<<gscreen.ldepth)+31)/32; gscreen.r.min = ZP; gscreen.r.max = Pt(x, y); gscreen.clipr = gscreen.r; gscreen.repl = 0; scr->gscreendata = gscreen.data; scr->memdefont = getmemdefont(); scr->gscreen = &gscreen; // memset(gscreen.data->data, Backgnd, scr->apsize); drawcmap(0); return 0; | |
| 1993/1113 | } | |
| 1997/1101 | int screenaperture(int size, int align) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; ulong aperture; | |
| 1993/1113 |
| |
| 1997/1101 | scr = &vgascreen[0]; if(size == 0){ if(scr->aperture && scr->isupamem) upafree(scr->aperture, scr->apsize); scr->aperture = 0; scr->isupamem = 0; return 0; | |
| 1993/1113 | } | |
| 1997/1101 | if(scr->dev && scr->dev->linear){ aperture = scr->dev->linear(scr, &size, &align); if(aperture == 0) return 1; | |
| 1993/1113 | } | |
| 1997/1101 | else{ aperture = upamalloc(0, size, align); if(aperture == 0) return 1; if(scr->aperture && scr->isupamem) upafree(scr->aperture, scr->apsize); scr->isupamem = 1; } scr->aperture = aperture; scr->apsize = size; return 0; | |
| 1993/1113 | } | |
| 1997/1101 | ulong* attachscreen(Rectangle* r, int* ld, int* width) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; scr = &vgascreen[0]; if(scr->gscreen == nil || scr->gscreendata == nil) return nil; *r = scr->gscreen->r; *ld = scr->gscreen->ldepth; *width = scr->gscreen->width; return scr->gscreendata->data; | |
| 1993/1113 | } | |
| 1997/1101 | flushmemscreen(Rectangle r) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; uchar *sp, *disp, *sdisp, *edisp; int y, len, incs, off, page; scr = &vgascreen[0]; if(scr->gscreen == nil || scr->useflush == 0) return; if(scr->dev == nil || scr->dev->page == nil) return; if(rectclip(&r, scr->gscreen->r) == 0) return; incs = scr->gscreen->width * BY2WD; switch(scr->gscreen->ldepth){ default: len = 0; panic("flushmemscreen: ldepth\n"); break; case 3: len = Dx(r); break; } if(len < 1) return; off = r.min.y*scr->gscreen->width*BY2WD+(r.min.x>>(3-scr->gscreen->ldepth)); page = off/scr->apsize; off %= scr->apsize; disp = KADDR(scr->aperture); sdisp = disp+off; edisp = disp+scr->apsize; off = r.min.y*scr->gscreen->width*BY2WD+(r.min.x>>(3-scr->gscreen->ldepth)); sp = ((uchar*)scr->gscreendata->data) + off; scr->dev->page(scr, page); for(y = r.min.y; y < r.max.y; y++) { if(sdisp + incs < edisp) { memmove(sdisp, sp, len); sp += incs; sdisp += incs; } else { off = edisp - sdisp; page++; if(off <= len){ if(off > 0) memmove(sdisp, sp, off); scr->dev->page(scr, page); if(len - off > 0) memmove(disp, sp+off, len - off); } else { memmove(sdisp, sp, len); scr->dev->page(scr, page); } sp += incs; sdisp += incs - scr->apsize; } } | |
| 1993/1113 | } void | |
| 1997/1101 | getcolor(ulong p, ulong* pr, ulong* pg, ulong* pb) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; ulong x; scr = &vgascreen[0]; if(scr->gscreen == nil) return; switch(scr->gscreen->ldepth){ default: x = 0x0F; break; case 3: x = 0xFF; break; } p &= x; p ^= x; lock(&cursor); *pr = scr->colormap[p][0]; *pg = scr->colormap[p][1]; *pb = scr->colormap[p][2]; unlock(&cursor); | |
| 1993/1113 | } | |
| 1997/1101 | int setcolor(ulong p, ulong r, ulong g, ulong b) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; ulong x; scr = &vgascreen[0]; if(scr->gscreen == nil) return 0; switch(scr->gscreen->ldepth){ default: x = 0x0F; break; case 3: x = 0xFF; break; } p &= x; p ^= x; lock(&cursor); scr->colormap[p][0] = r; scr->colormap[p][1] = g; scr->colormap[p][2] = b; vgao(PaddrW, p); vgao(Pdata, r>>(32-6)); vgao(Pdata, g>>(32-6)); vgao(Pdata, b>>(32-6)); unlock(&cursor); return ~0; | |
| 1993/1113 | } | |
| 1997/1101 | int cursoron(int dolock) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; int v; scr = &vgascreen[0]; if(scr->cur == nil || scr->cur->move == nil) return 0; if(dolock) lock(&cursor); v = scr->cur->move(scr, mousexy()); if(dolock) unlock(&cursor); return v; | |
| 1993/1113 | } void | |
| 1997/1101 | cursoroff(int) | |
| 1993/1113 | { | |
| 1997/1101 | setcursor(Cursor* curs) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; | |
| 1993/1113 |
| |
| 1997/1101 | scr = &vgascreen[0]; if(scr->cur == nil || scr->cur->load == nil) return; | |
| 1993/1113 |
| |
| 1997/1101 | scr->cur->load(scr, curs); | |
| 1993/1113 | } | |
| 1997/1101/sys/src/9/pc/screen.c:117,123 – 1998/0109/sys/src/9/pc/screen.c:117,123 (short | long) | ||
|
Add softscreen parameter to attachscreen.
rsc Fri Mar 4 12:44:25 2005 | ||
| 1993/1113 | } | |
| 1997/1101 | ulong* | |
| 1998/0109 | attachscreen(Rectangle* r, int* ld, int* width, int *softscreen) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; | |
| 1997/1101/sys/src/9/pc/screen.c:128,133 – 1998/0109/sys/src/9/pc/screen.c:128,134 | ||
| 1997/1101 | *r = scr->gscreen->r; *ld = scr->gscreen->ldepth; *width = scr->gscreen->width; | |
| 1998/0109 | *softscreen = scr->useflush; | |
| 1997/1101 | return scr->gscreendata->data; | |
| 1993/1113 | } | |
| 1998/0109/sys/src/9/pc/screen.c:35,40 – 1998/0209/sys/src/9/pc/screen.c:35,54 (short | long) | ||
|
Add arrow Cursor.
rsc Fri Mar 4 12:44:25 2005 | ||
| 1993/1113 | ||
| 1997/1101 | VGAscr vgascreen[1]; | |
| 1993/1113 | ||
| 1998/0209 | Cursor arrow = { { -1, -1 }, { 0xFF, 0xFF, 0x80, 0x01, 0x80, 0x02, 0x80, 0x0C, 0x80, 0x10, 0x80, 0x10, 0x80, 0x08, 0x80, 0x04, 0x80, 0x02, 0x80, 0x01, 0x80, 0x02, 0x8C, 0x04, 0x92, 0x08, 0x91, 0x10, 0xA0, 0xA0, 0xC0, 0x40, }, { 0x00, 0x00, 0x7F, 0xFE, 0x7F, 0xFC, 0x7F, 0xF0, 0x7F, 0xE0, 0x7F, 0xE0, 0x7F, 0xF0, 0x7F, 0xF8, 0x7F, 0xFC, 0x7F, 0xFE, 0x7F, 0xFC, 0x73, 0xF8, 0x61, 0xF0, 0x60, 0xE0, 0x40, 0x40, 0x00, 0x00, }, }; | |
| 1997/1101 | int screensize(int x, int y, int z) | |
| 1993/1113 | { | |
| 1998/0209/sys/src/9/pc/screen.c:10,15 – 1999/0119/sys/src/9/pc/screen.c:10,16 (short | long) | ||
|
Add rsc Fri Mar 4 12:44:25 2005 | ||
| 1997/1101 | #define Image IMAGE #include <draw.h> #include <memdraw.h> | |
| 1999/0119 | #include <cursor.h> | |
| 1993/1113 | #include "screen.h" | |
| 1997/1101 | static ulong onesbits = ~0; | |
| 1999/0119/sys/src/9/pc/screen.c:13,38 – 1999/1005/sys/src/9/pc/screen.c:13,26 (short | long) | ||
| 1999/0119 | #include <cursor.h> | |
| 1993/1113 | #include "screen.h" | |
| 1997/1101 |
| |
| 1993/1113 |
| |
| 1997/1101 |
| |
| 1993/1113 |
| |
| 1997/1101 |
| |
| 1999/1005 | #define RGB2K(r,g,b) ((156763*(r)+307758*(g)+59769*(b))>>19) | |
| 1993/1113 | ||
| 1997/1101 | Point ZP = {0, 0}; | |
| 1993/1113 | ||
| 1999/1005 | Rectangle physgscreenr; | |
| 1997/1101 | Memdata gscreendata; | |
| 1999/1005 | Memimage *gscreen; | |
| 1993/1113 | ||
| 1997/1101 | VGAscr vgascreen[1]; | |
| 1993/1113 | ||
| 1999/0119/sys/src/9/pc/screen.c:51,60 – 1999/1005/sys/src/9/pc/screen.c:39,49 | ||
| 1998/0209 | }; | |
| 1997/1101 | int | |
| 1999/1005 | screensize(int x, int y, int z, ulong chan) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; | |
| 1993/1113 | ||
| 1999/1005 | memimageinit(); | |
| 1997/1101 | scr = &vgascreen[0]; | |
| 1993/1113 | /* | |
| 1999/0119/sys/src/9/pc/screen.c:62,97 – 1999/1005/sys/src/9/pc/screen.c:51,88 | ||
| 1997/1101 | * be given back if aperture is set. | |
| 1993/1113 | */ | |
| 1997/1101 | if(scr->aperture == 0){ | |
| 1999/1005 | int width = (x*z)/BI2WD; | |
| 1993/1113 | ||
| 1997/1101 |
| |
| 1999/1005 | gscreendata.bdata = xalloc(width*BY2WD*y); if(gscreendata.bdata == 0) | |
| 1997/1101 | error("screensize: vga soft memory"); | |
| 1999/1005 | /* memset(gscreendata.bdata, 0x72, width*BY2WD*y); /* not really black */ | |
| 1997/1101 | scr->useflush = 1; | |
| 1993/1113 | ||
| 1997/1101 | scr->aperture = 0xA0000; scr->apsize = 1<<16; } else | |
| 1999/1005 | gscreendata.bdata = KADDR(scr->aperture); | |
| 1997/1101 |
| |
| 1999/1005 | if(gscreen) freememimage(gscreen); | |
| 1997/1101 |
| |
| 1999/1005 | gscreen = allocmemimaged(Rect(0,0,x,y), chan, &gscreendata); vgaimageinit(chan); if(gscreen == nil) return -1; | |
| 1997/1101 |
| |
| 1999/1005 | /* memset(gscreen->data->bdata, 0x15, (x*y*z+7)/8); /* RSC BUG */ memfillcolor(gscreen, DRed); | |
| 1997/1101 |
| |
| 1999/1005 | scr->palettedepth = 6; /* default */ scr->gscreendata = &gscreendata; scr->memdefont = getmemdefont(); scr->gscreen = gscreen; | |
| 1997/1101 | ||
| 1999/1005 | physgscreenr = gscreen->r; drawcmap(1); | |
| 1997/1101 | return 0; | |
| 1993/1113 | } | |
| 1999/0119/sys/src/9/pc/screen.c:114,121 – 1999/1005/sys/src/9/pc/screen.c:105,111 | ||
| 1997/1101 | aperture = scr->dev->linear(scr, &size, &align); if(aperture == 0) return 1; | |
| 1993/1113 |
| |
| 1997/1101 |
| |
| 1999/1005 | }else{ | |
| 1997/1101 | aperture = upamalloc(0, size, align); if(aperture == 0) return 1; | |
| 1999/0119/sys/src/9/pc/screen.c:131,138 – 1999/1005/sys/src/9/pc/screen.c:121,128 | ||
| 1997/1101 | return 0; | |
| 1993/1113 | } | |
| 1997/1101 |
| |
| 1998/0109 |
| |
| 1999/1005 | uchar* attachscreen(Rectangle* r, ulong* chan, int* d, int* width, int *softscreen) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; | |
| 1999/0119/sys/src/9/pc/screen.c:141,153 – 1999/1005/sys/src/9/pc/screen.c:131,147 | ||
| 1997/1101 | return nil; *r = scr->gscreen->r; | |
| 1999/1005 | *chan = scr->gscreen->chan; *d = scr->gscreen->depth; | |
| 1997/1101 | *width = scr->gscreen->width; | |
| 1998/0109 | *softscreen = scr->useflush; | |
| 1997/1101 |
| |
| 1999/1005 | return scr->gscreendata->bdata; | |
| 1993/1113 | } | |
| 1999/1005 | /* * It would be fair to say that this doesn't work for >8-bit screens. */ | |
| 1993/1113 | void | |
| 1997/1101 | flushmemscreen(Rectangle r) | |
| 1993/1113 | { | |
| 1999/0119/sys/src/9/pc/screen.c:166,177 – 1999/1005/sys/src/9/pc/screen.c:160,171 | ||
| 1997/1101 | incs = scr->gscreen->width * BY2WD; | |
| 1999/1005 | switch(scr->gscreen->depth){ | |
| 1997/1101 | default: len = 0; | |
| 1999/1005 | panic("flushmemscreen: depth\n"); | |
| 1997/1101 | break; | |
| 1999/1005 | case 8: | |
| 1997/1101 | len = Dx(r); break; } | |
| 1999/0119/sys/src/9/pc/screen.c:178,184 – 1999/1005/sys/src/9/pc/screen.c:172,178 | ||
| 1997/1101 | if(len < 1) return; | |
| 1999/1005 | off = r.min.y*scr->gscreen->width*BY2WD+(r.min.x*scr->gscreen->depth)/8; | |
| 1997/1101 | page = off/scr->apsize; off %= scr->apsize; disp = KADDR(scr->aperture); | |
| 1999/0119/sys/src/9/pc/screen.c:185,193 – 1999/1005/sys/src/9/pc/screen.c:179,188 | ||
| 1997/1101 | sdisp = disp+off; edisp = disp+scr->apsize; | |
| 1999/1005 | off = r.min.y*scr->gscreen->width*BY2WD+(r.min.x*scr->gscreen->depth)/8; | |
| 1997/1101 | ||
| 1999/1005 | sp = scr->gscreendata->bdata + off; | |
| 1997/1101 | scr->dev->page(scr, page); for(y = r.min.y; y < r.max.y; y++) { if(sdisp + incs < edisp) { | |
| 1999/0119/sys/src/9/pc/screen.c:225,235 – 1999/1005/sys/src/9/pc/screen.c:220,230 | ||
| 1997/1101 | if(scr->gscreen == nil) return; | |
| 1999/1005 | switch(scr->gscreen->depth){ | |
| 1997/1101 | default: x = 0x0F; break; | |
| 1999/1005 | case 8: | |
| 1997/1101 | x = 0xFF; break; } | |
| 1999/0119/sys/src/9/pc/screen.c:244,280 – 1999/1005/sys/src/9/pc/screen.c:239,296 | ||
| 1993/1113 | } | |
| 1997/1101 | int | |
| 1999/1005 | setpalette(ulong p, ulong r, ulong g, ulong b) { VGAscr *scr; int d; scr = &vgascreen[0]; d = scr->palettedepth; lock(&cursor); scr->colormap[p][0] = r; scr->colormap[p][1] = g; scr->colormap[p][2] = b; vgao(PaddrW, p); vgao(Pdata, r>>(32-d)); vgao(Pdata, g>>(32-d)); vgao(Pdata, b>>(32-d)); unlock(&cursor); return ~0; } /* * On some video cards (e.g. Mach64), the palette is used as the * DAC registers for >8-bit modes. We don't want to set them when the user * is trying to set a colormap and the card is in one of these modes. */ int | |
| 1997/1101 | setcolor(ulong p, ulong r, ulong g, ulong b) | |
| 1993/1113 | { | |
| 1997/1101 | VGAscr *scr; | |
| 1999/1005 | int x; | |
| 1997/1101 | scr = &vgascreen[0]; if(scr->gscreen == nil) return 0; | |
| 1999/1005 | switch(scr->gscreen->depth){ case 1: case 2: case 4: | |
| 1997/1101 | x = 0x0F; break; | |
| 1999/1005 | case 8: | |
| 1997/1101 | x = 0xFF; break; | |
| 1999/1005 | default: return 0; | |
| 1997/1101 | } p &= x; p ^= x; | |
| 1999/1005 | return setpalette(p, r, g, b); | |
| 1993/1113 | } | |
| 1997/1101 | int | |
| 1999/0119/sys/src/9/pc/screen.c:312,314 – 1999/1005/sys/src/9/pc/screen.c:328,517 | ||
| 1993/1113 | ||
| 1997/1101 | scr->cur->load(scr, curs); | |
| 1993/1113 | } | |
| 1999/1005 | static ulong pixelbits(Memimage *i, Point pt) { uchar *p; ulong val; int off, bpp, npack; val = 0; p = byteaddr(i, pt); switch(bpp=i->depth){ case 1: case 2: case 4: npack = 8/bpp; off = pt.x%npack; val = p[0] >> bpp*(npack-1-off); val &= (1<<bpp)-1; break; case 8: val = p[0]; break; case 16: val = p[0]|(p[1]<<8); break; case 24: val = p[0]|(p[1]<<8)|(p[2]<<16); break; case 32: val = p[0]|(p[1]<<8)|(p[2]<<16)|(p[3]<<24); break; } while(bpp<32){ val |= val<<bpp; bpp *= 2; } return val; } static ulong imgtorgba(Memimage *img, ulong val) { uchar r, g, b, a; int nb, ov, v; ulong chan; uchar *p; a = 0xFF; r = g = b = 0xAA; /* garbage */ for(chan=img->chan; chan; chan>>=8){ nb = NBITS(chan); ov = v = val&((1<<nb)-1); val >>= nb; while(nb < 8){ v |= v<<nb; nb *= 2; } v >>= (nb-8); switch(TYPE(chan)){ case CRed: r = v; break; case CGreen: g = v; break; case CBlue: b = v; break; case CAlpha: a = v; break; case CGrey: r = g = b = v; break; case CMap: p = img->cmap->cmap2rgb+3*ov; r = *p++; g = *p++; b = *p; break; } } return (r<<24)|(g<<16)|(b<<8)|a; } static ulong rgbatoimg(Memimage *img, ulong rgba) { ulong chan; int d, nb; ulong v; uchar *p, r, g, b, a, m; v = 0; r = rgba>>24; g = rgba>>16; b = rgba>>8; a = rgba; d = 0; for(chan=img->chan; chan; chan>>=8){ nb = NBITS(chan); switch(TYPE(chan)){ case CRed: v |= (r>>(8-nb))<<d; break; case CGreen: v |= (g>>(8-nb))<<d; break; case CBlue: v |= (b>>(8-nb))<<d; break; case CAlpha: v |= (a>>(8-nb))<<d; break; case CMap: p = img->cmap->rgb2cmap; m = p[(r>>4)*256+(g>>4)*16+(b>>4)]; v |= m<<d; break; case CGrey: m = RGB2K(r,g,b); v |= m<<d; break; } d += nb; } // print("rgba2img %.8lux = %.*lux\n", rgba, 2*d/8, v); return v; } Memimage *lastbadi; Memdata *lastbad; Memimage *lastbadsrc, *lastbaddst; #ifndef SDFSDF int hwdraw(Memdrawparam *par) { VGAscr *scr; Memimage *dst, *src; dst = par->dst; scr = &vgascreen[0]; if(dst == nil || dst->data == nil) return 0; if(dst->data->bdata != gscreendata.bdata) return 0; // if(dst->data != &gscreendata){ // lastbad = dst->data; // lastbadi = dst; // return 0; // } if(scr->fill==nil && scr->scroll==nil) return 0; /* * If we have an opaque mask and source is one opaque pixel we can convert to the * destination format and just replicate with memset. */ if(scr->fill && (par->state&(Simplemask|Simplesrc|Fullmask))==(Simplemask|Simplesrc|Fullmask)) return scr->fill(scr, par->r, par->sdval); /* * If no source alpha, an opaque mask, we can just copy the * source onto the destination. If the channels are the same and * the source is not replicated, memmove suffices. */ src = par->src; if(scr->scroll && src->data->bdata==dst->data->bdata && !(src->flags&Falpha) && (par->state&(Simplemask|Fullmask))==(Simplemask|Fullmask)){ if(src->zero != dst->zero){ lastbadsrc = src; lastbaddst = dst; iprint("#"); } return scr->scroll(scr, par->r, par->sr); } return 0; } #endif | |
| 1999/1005/sys/src/9/pc/screen.c:464,471 – 1999/1006/sys/src/9/pc/screen.c:464,471 (short | long) | ||
| 1999/1005 | Memimage *lastbadi; Memdata *lastbad; Memimage *lastbadsrc, *lastbaddst; | |
| 1999/1006 | int hwaccel = 1; | |
| 1999/1005 |
| |
| 1999/1005/sys/src/9/pc/screen.c:472,477 – 1999/1006/sys/src/9/pc/screen.c:472,480 | ||
| 1999/1005 | VGAscr *scr; Memimage *dst, *src; | |
| 1999/1006 | if(hwaccel == 0) return 0; | |
| 1999/1005 | dst = par->dst; scr = &vgascreen[0]; if(dst == nil || dst->data == nil) | |
| 1999/1005/sys/src/9/pc/screen.c:514,517 – 1999/1006/sys/src/9/pc/screen.c:517,519 | ||
| 1999/1005 | return 0; } | |
| 1999/1006/sys/src/9/pc/screen.c:82,88 – 1999/1013/sys/src/9/pc/screen.c:82,88 (short | long) | ||
| 1997/1101 | ||
| 1999/1005 | physgscreenr = gscreen->r; | |
| 1999/1013 | drawcmap(); | |
| 1997/1101 | return 0; | |
| 1993/1113 | } | |
| 1999/1006/sys/src/9/pc/screen.c:288,294 – 1999/1013/sys/src/9/pc/screen.c:288,293 | ||
| 1999/1005 | return 0; | |
| 1997/1101 | } p &= x; | |
| 1999/1005 | return setpalette(p, r, g, b); | |
| 1993/1113 | } | |
| 1999/1013/sys/src/9/pc/screen.c:229,235 – 1999/1014/sys/src/9/pc/screen.c:229,234 (short | long) | ||
| 1997/1101 | break; } p &= x; | |
| 1999/1014/sys/src/9/pc/screen.c:491,498 – 1999/1127/sys/src/9/pc/screen.c:491,499 (short | long) | ||
| 1999/1005 | return 0; /* | |
| 1999/1127 | * If we have an opaque mask and source is one opaque * pixel we can convert to the destination format and just * replicate with memset. | |
| 1999/1005 | */ if(scr->fill && (par->state&(Simplemask|Simplesrc|Fullmask))==(Simplemask|Simplesrc|Fullmask)) return scr->fill(scr, par->r, par->sdval); | |
| 1999/1014/sys/src/9/pc/screen.c:505,515 – 1999/1127/sys/src/9/pc/screen.c:506,516 | ||
| 1999/1005 | src = par->src; if(scr->scroll && src->data->bdata==dst->data->bdata && !(src->flags&Falpha) && (par->state&(Simplemask|Fullmask))==(Simplemask|Fullmask)){ | |
| 1999/1127 | // if(src->zero != dst->zero){ // lastbadsrc = src; // lastbaddst = dst; // iprint("#"); // } | |
| 1999/1005 | return scr->scroll(scr, par->r, par->sr); } | |
| 1999/1127/sys/src/9/pc/screen.c:463,468 – 2000/0326/sys/src/9/pc/screen.c:463,469 (short | long) | ||
| 1999/1005 | Memdata *lastbad; Memimage *lastbadsrc, *lastbaddst; | |
| 1999/1006 | int hwaccel = 1; | |
| 2000/0326 | int hwblank = 1; | |
| 1999/1005 | int hwdraw(Memdrawparam *par) | |
| 1999/1127/sys/src/9/pc/screen.c:515,518 – 2000/0326/sys/src/9/pc/screen.c:516,529 | ||
| 1999/1005 | } return 0; | |
| 2000/0326 | } void blankscreen(int blank) { VGAscr *scr; scr = &vgascreen[0]; if(hwblank && scr->blank) scr->blank(scr, blank); | |
| 1999/1005 | } | |
| 2000/0326/sys/src/9/pc/screen.c:470,475 – 2000/0711/sys/src/9/pc/screen.c:470,476 (short | long) | ||
| 1999/1005 | { VGAscr *scr; Memimage *dst, *src; | |
| 2000/0711 | int m; | |
| 1999/1005 | ||
| 1999/1006 | if(hwaccel == 0) return 0; | |
| 2000/0326/sys/src/9/pc/screen.c:496,502 – 2000/0711/sys/src/9/pc/screen.c:497,504 | ||
| 1999/1127 | * pixel we can convert to the destination format and just * replicate with memset. | |
| 1999/1005 | */ | |
| 2000/0711 | m = Simplesrc|Simplemask|Fullmask; if(scr->fill && (par->state&m)==m && ((par->srgba&0xFF) == 0xFF)) | |
| 1999/1005 | return scr->fill(scr, par->r, par->sdval); /* | |
| 2000/0711/sys/src/9/pc/screen.c:73,79 – 2001/0124/sys/src/9/pc/screen.c:73,79 (short | long) | ||
|
Turn off debugging memfillcolor.
rsc Fri Mar 4 12:44:25 2005 | ||
| 1999/1005 | return -1; | |
| 1997/1101 | ||
| 1999/1005 | /* memset(gscreen->data->bdata, 0x15, (x*y*z+7)/8); /* RSC BUG */ | |
| 2001/0124 | // memfillcolor(gscreen, DRed); | |
| 1997/1101 | ||
| 1999/1005 | scr->palettedepth = 6; /* default */ scr->gscreendata = &gscreendata; | |
| 2001/0124/sys/src/9/pc/screen.c:73,79 – 2001/0527/sys/src/9/pc/screen.c:73,79 (short | long) | ||
| 1999/1005 | return -1; | |
| 1997/1101 | ||
| 1999/1005 | /* memset(gscreen->data->bdata, 0x15, (x*y*z+7)/8); /* RSC BUG */ | |
| 2001/0124 |
| |
| 2001/0527 | memfillcolor(gscreen, DRed); | |
| 1997/1101 | ||
| 1999/1005 | scr->palettedepth = 6; /* default */ scr->gscreendata = &gscreendata; | |
| 2001/0124/sys/src/9/pc/screen.c:327,467 – 2001/0527/sys/src/9/pc/screen.c:327,332 | ||
| 1997/1101 | scr->cur->load(scr, curs); | |
| 1993/1113 | } | |
| 1999/1005 |
| |
| 1999/1006 | int hwaccel = 1; | |
| 2000/0326 | int hwblank = 1; | |
| 1999/1005 | ||
| 2001/0124/sys/src/9/pc/screen.c:483,494 – 2001/0527/sys/src/9/pc/screen.c:348,353 | ||
| 1999/1005 | if(dst->data->bdata != gscreendata.bdata) return 0; | |
| 2001/0124/sys/src/9/pc/screen.c:509,519 – 2001/0527/sys/src/9/pc/screen.c:368,373 | ||
| 1999/1005 | src = par->src; if(scr->scroll && src->data->bdata==dst->data->bdata && !(src->flags&Falpha) && (par->state&(Simplemask|Fullmask))==(Simplemask|Fullmask)){ | |
| 1999/1127 |
| |
| 1999/1005 | return scr->scroll(scr, par->r, par->sr); } | |
| 2001/0527/sys/src/9/pc/screen.c:72,80 – 2001/0822/sys/src/9/pc/screen.c:72,77 (short | long) | ||
| 1999/1005 | if(gscreen == nil) return -1; | |
| 1997/1101 | ||
| 1999/1005 |
| |
| 2001/0527 |
| |
| 1997/1101 | ||
| 1999/1005 | scr->palettedepth = 6; /* default */ scr->gscreendata = &gscreendata; scr->memdefont = getmemdefont(); | |
| 2001/0822/sys/src/9/pc/screen.c:13,18 – 2001/1014/sys/src/9/pc/screen.c:13,20 (short | long) | ||
| 1999/0119 | #include <cursor.h> | |
| 1993/1113 | #include "screen.h" | |
| 2001/1014 | #define round16(x) (((x)+15)&~15) | |
| 1999/1005 | #define RGB2K(r,g,b) ((156763*(r)+307758*(g)+59769*(b))>>19) | |
| 1993/1113 | ||
| 1997/1101 | Point ZP = {0, 0}; | |
| 2001/0822/sys/src/9/pc/screen.c:51,57 – 2001/1014/sys/src/9/pc/screen.c:53,59 | ||
| 1997/1101 | * be given back if aperture is set. | |
| 1993/1113 | */ | |
| 1997/1101 | if(scr->aperture == 0){ | |
| 1999/1005 |
| |
| 2001/1014 | int width = (round16(x)*z)/BI2WD; | |
| 1993/1113 | ||
| 1999/1005 | gscreendata.bdata = xalloc(width*BY2WD*y); if(gscreendata.bdata == 0) | |
| 2001/0822/sys/src/9/pc/screen.c:67,76 – 2001/1014/sys/src/9/pc/screen.c:69,80 | ||
| 1999/1005 | if(gscreen) freememimage(gscreen); | |
| 1997/1101 | ||
| 1999/1005 |
| |
| 2001/1014 | gscreen = allocmemimaged(Rect(0,0,round16(x),y), chan, &gscreendata); | |
| 1999/1005 | vgaimageinit(chan); if(gscreen == nil) return -1; | |
| 2001/1014 | gscreen->r.max.x = x; /* we used round16(x) to allocate */ | |
| 1997/1101 | ||
| 1999/1005 | scr->palettedepth = 6; /* default */ scr->gscreendata = &gscreendata; | |
| 2001/1014/sys/src/9/pc/screen.c:13,20 – 2001/1015/sys/src/9/pc/screen.c:13,18 (short | long) | ||
| 1999/0119 | #include <cursor.h> | |
| 1993/1113 | #include "screen.h" | |
| 2001/1014 |
| |
| 1999/1005 | #define RGB2K(r,g,b) ((156763*(r)+307758*(g)+59769*(b))>>19) | |
| 1993/1113 | ||
| 1997/1101 | Point ZP = {0, 0}; | |
| 2001/1014/sys/src/9/pc/screen.c:53,59 – 2001/1015/sys/src/9/pc/screen.c:51,57 | ||
| 1997/1101 | * be given back if aperture is set. | |
| 1993/1113 | */ | |
| 1997/1101 | if(scr->aperture == 0){ | |
| 2001/1014 |
| |
| 2001/1015 | int width = (x*z)/BI2WD; | |
| 1993/1113 | ||
| 1999/1005 | gscreendata.bdata = xalloc(width*BY2WD*y); if(gscreendata.bdata == 0) | |
| 2001/1014/sys/src/9/pc/screen.c:69,81 – 2001/1015/sys/src/9/pc/screen.c:67,77 | ||
| 1999/1005 | if(gscreen) freememimage(gscreen); | |
| 1997/1101 | ||
| 2001/1014 |
| |
| 2001/1015 | gscreen = allocmemimaged(Rect(0,0,x,y), chan, &gscreendata); | |
| 1999/1005 | vgaimageinit(chan); if(gscreen == nil) return -1; | |
| 2001/1014 |
| |
| 1997/1101 | ||
| 1999/1005 | scr->palettedepth = 6; /* default */ scr->gscreendata = &gscreendata; scr->memdefont = getmemdefont(); | |
| 2001/1014/sys/src/9/pc/screen.c:131,137 – 2001/1015/sys/src/9/pc/screen.c:127,133 | ||
| 1997/1101 | if(scr->gscreen == nil || scr->gscreendata == nil) return nil; | |
| 2001/1015 | *r = scr->gscreen->clipr; | |
| 1999/1005 | *chan = scr->gscreen->chan; *d = scr->gscreen->depth; | |
| 1997/1101 | *width = scr->gscreen->width; | |
| 2001/1014/sys/src/9/pc/screen.c:329,335 – 2001/1015/sys/src/9/pc/screen.c:325,332 | ||
| 1993/1113 | } | |
| 1999/1005 | ||
| 1999/1006 | int hwaccel = 1; | |
| 2000/0326 |
| |
| 2001/1015 | int hwblank = 0; /* turned on by drivers that are known good */ int panning = 0; | |
| 1999/1005 | int hwdraw(Memdrawparam *par) | |
| 2001/1015/sys/src/9/pc/screen.c:378,383 – 2001/1130/sys/src/9/pc/screen.c:378,387 (short | long) | ||
| 2000/0326 | VGAscr *scr; scr = &vgascreen[0]; | |
| 2001/1130 | if(hwblank){ if(scr->blank) scr->blank(scr, blank); else vgablank(scr, blank); } | |
| 1999/1005 | } | |
| 2001/1130/sys/src/9/pc/screen.c:72,77 – 2002/0404/sys/src/9/pc/screen.c:72,80 (short | long) | ||
| 1999/1005 | if(gscreen == nil) return -1; | |
| 2001/1014 | ||
| 2002/0404 | if(scr->dev && scr->dev->flush) scr->useflush = 1; | |
| 1999/1005 | scr->palettedepth = 6; /* default */ scr->gscreendata = &gscreendata; scr->memdefont = getmemdefont(); | |
| 2001/1130/sys/src/9/pc/screen.c:147,152 – 2002/0404/sys/src/9/pc/screen.c:150,159 | ||
| 1997/1101 | int y, len, incs, off, page; scr = &vgascreen[0]; | |
| 2002/0404 | if(scr->dev && scr->dev->flush){ scr->dev->flush(scr, r); return; } | |
| 1997/1101 | if(scr->gscreen == nil || scr->useflush == 0) return; if(scr->dev == nil || scr->dev->page == nil) | |
| 2002/0404/sys/src/9/pc/screen.c:392,394 – 2002/0919/sys/src/9/pc/screen.c:392,406 (short | long) | ||
| 2001/1130 | vgablank(scr, blank); } | |
| 1999/1005 | } | |
| 2002/0919 | void screensignal(int x) { VGAscr *scr; scr = &vgascreen[0]; if(scr->aperture == 0) return; memset(scr->aperture, x, 8*1024); } | |
| 2002/0919/sys/src/9/pc/screen.c:392,406 – 2002/0920/sys/src/9/pc/screen.c:392,394 (short | long) | ||
| 2001/1130 | vgablank(scr, blank); } | |
| 1999/1005 | } | |
| 2002/0919 |
| |
| 2002/0920/sys/src/9/pc/screen.c:385,390 – 2002/1201/sys/src/9/pc/screen.c:385,391 (short | long) | ||
| 2000/0326 | VGAscr *scr; scr = &vgascreen[0]; | |
| 2002/1201 | scr->isblank = blank; | |
| 2001/1130 | if(hwblank){ if(scr->blank) scr->blank(scr, blank); | |
| 2002/1201/sys/src/9/pc/screen.c:58,64 – 2002/1205/sys/src/9/pc/screen.c:58,64 (short | long) | ||
| 1997/1101 | error("screensize: vga soft memory"); | |
| 1999/1005 | /* memset(gscreendata.bdata, 0x72, width*BY2WD*y); /* not really black */ | |
| 1997/1101 | scr->useflush = 1; | |
| 2002/1205 | scr->aperture = VGAMEM(); | |
| 1997/1101 | scr->apsize = 1<<16; } else | |
| 2002/1201/sys/src/9/pc/screen.c:362,368 – 2002/1205/sys/src/9/pc/screen.c:362,371 | ||
| 1999/1127 | * replicate with memset. | |
| 1999/1005 | */ | |
| 2000/0711 | m = Simplesrc|Simplemask|Fullmask; | |
| 2002/1205 | if(scr->fill && (par->state&m)==m && ((par->srgba&0xFF) == 0xFF) && (par->op&S) == S) | |
| 1999/1005 | return scr->fill(scr, par->r, par->sdval); /* | |
| 2002/1201/sys/src/9/pc/screen.c:370,380 – 2002/1205/sys/src/9/pc/screen.c:373,386 | ||
| 1999/1005 | * source onto the destination. If the channels are the same and * the source is not replicated, memmove suffices. */ | |
| 2002/1205 | m = Simplemask|Fullmask; | |
| 1999/1005 | src = par->src; | |
| 2002/1205 | if(scr->scroll && src->data->bdata==dst->data->bdata && !(src->flags&Falpha) && (par->state&m)==m && (par->op&S) == S) | |
| 1999/1005 | return scr->scroll(scr, par->r, par->sr); | |
| 2000/0326 | } | |
| 2002/1201/sys/src/9/pc/screen.c:385,391 – 2002/1205/sys/src/9/pc/screen.c:391,396 | ||
| 2000/0326 | VGAscr *scr; scr = &vgascreen[0]; | |
| 2002/1201 |
| |
| 2001/1130 | if(hwblank){ if(scr->blank) scr->blank(scr, blank); | |