diff options
Diffstat (limited to 'lib/libvgl/bitmap.c')
-rw-r--r-- | lib/libvgl/bitmap.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/lib/libvgl/bitmap.c b/lib/libvgl/bitmap.c index 177d171..6498e26 100644 --- a/lib/libvgl/bitmap.c +++ b/lib/libvgl/bitmap.c @@ -143,12 +143,31 @@ WriteVerticalLine(VGLBitmap *dst, int x, int y, int width, byte *line) width -= i; } break; + case VIDBUF16S: + case VIDBUF24S: + case VIDBUF32S: + width = width * dst->PixelBytes; + pos = (dst->VXsize * y + x) * dst->PixelBytes; + while (width > 0) { + offset = VGLSetSegment(pos); + i = min(VGLAdpInfo.va_window_size - offset, width); + bcopy(line, dst->Bitmap + offset, i); + line += i; + pos += i; + width -= i; + } + break; case VIDBUF8: case MEMBUF: address = dst->Bitmap + dst->VXsize * y + x; bcopy(line, address, width); break; - + case VIDBUF16: + case VIDBUF24: + case VIDBUF32: + address = dst->Bitmap + (dst->VXsize * y + x) * dst->PixelBytes; + bcopy(line, address, width * dst->PixelBytes); + break; default: } } @@ -238,11 +257,31 @@ read_planar: width -= i; } break; + case VIDBUF16S: + case VIDBUF24S: + case VIDBUF32S: + width = width * src->PixelBytes; + pos = (src->VXsize * y + x) * src->PixelBytes; + while (width > 0) { + offset = VGLSetSegment(pos); + i = min(VGLAdpInfo.va_window_size - offset, width); + bcopy(src->Bitmap + offset, line, i); + line += i; + pos += i; + width -= i; + } + break; case VIDBUF8: case MEMBUF: address = src->Bitmap + src->VXsize * y + x; bcopy(address, line, width); break; + case VIDBUF16: + case VIDBUF24: + case VIDBUF32: + address = src->Bitmap + (src->VXsize * y + x) * src->PixelBytes; + bcopy(address, line, width * src->PixelBytes); + break; default: } } |