summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Boddie <david@boddie.org.uk>2018-03-24 00:08:37 +0000
committerDavid Boddie <david@boddie.org.uk>2018-03-24 00:08:37 +0000
commit811a63300c4a3c25a557a5fdb7ae46256a258f17 (patch)
treec768977e2adacfebd4e680e8556984e41abbd10f
parent9daa5b837e2e1f494a95ecd298d5e428ccb76b01 (diff)
Added a function for drawing on 16-bit displays.
-rw-r--r--emu/port/win-x11a.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/emu/port/win-x11a.c b/emu/port/win-x11a.c
index 4fdd295a..3670b260 100644
--- a/emu/port/win-x11a.c
+++ b/emu/port/win-x11a.c
@@ -313,6 +313,33 @@ copy32to32(Rectangle r)
}
static void
+copy16to16(Rectangle r)
+{
+ int dx, width;
+ u16int *dp, *wp, *edp, *lp;
+
+ width = Dx(r);
+ dx = Xsize - width;
+ dp = (u16int*)(gscreendata + ((r.min.y * Xsize) + r.min.x) * 2);
+ wp = (u16int*)(xscreendata + ((r.min.y * Xsize) + r.min.x) * 2);
+ edp = (u16int*)(gscreendata + ((r.max.y * Xsize) + r.max.x) * 2);
+
+ /* The pixel format should be the same as the underlying X display (see
+ the xtruevisual function) unless a different channel format is
+ explicitly specified on the command line, so just copy the pixel data
+ without any processing. */
+
+ while(dp < edp) {
+ lp = dp + width;
+ while(dp < lp){
+ *wp++ = *dp++;
+ }
+ dp += dx;
+ wp += dx;
+ }
+}
+
+static void
copy8to32(Rectangle r)
{
int dx, width;
@@ -435,6 +462,17 @@ flushmemscreen(Rectangle r)
case 32:
copy32to32(r);
break;
+ case 16:
+ switch(xscreendepth){
+ case 16:
+ copy16to16(r);
+ break;
+ default:
+ fprint(2, "emu: bad display depth %d chan %s xscreendepth %d\n", displaydepth,
+ chantostr(chanbuf, displaychan), xscreendepth);
+ cleanexit(0);
+ }
+ break;
case 8:
switch(xscreendepth){
case 24: