From c359b9400b720f9ee175154a1ffa542b5ccc2d97 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Sun, 5 Aug 2012 15:16:02 +0100 Subject: Palette-mapped bitmap support --- amiga/bitmap.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) (limited to 'amiga/bitmap.c') diff --git a/amiga/bitmap.c b/amiga/bitmap.c index ce665aaf7..5377adf3c 100644 --- a/amiga/bitmap.c +++ b/amiga/bitmap.c @@ -117,7 +117,11 @@ void bitmap_destroy(void *bitmap) if(bm) { - if(bm->nativebm) p96FreeBitMap(bm->nativebm); + if((bm->nativebm) && (bm->dto == NULL)) + p96FreeBitMap(bm->nativebm); + + if(bm->dto) DisposeDTObject(bm->dto); + FreeVec(bm->pixdata); bm->pixdata = NULL; FreeVec(bm); @@ -160,8 +164,13 @@ bool bitmap_save(void *bitmap, const char *path, unsigned flags) void bitmap_modified(void *bitmap) { struct bitmap *bm = bitmap; - p96FreeBitMap(bm->nativebm); + if((bm->nativebm) && (bm->dto == NULL)) + p96FreeBitMap(bm->nativebm); + + if(bm->dto) DisposeDTObject(bm->dto); bm->nativebm = NULL; + bm->dto = NULL; + bm->native_mask = NULL; } @@ -454,3 +463,25 @@ struct BitMap *ami_getcachenativebm(struct bitmap *bitmap,int width,int height,s return tbm; } + +struct BitMap *ami_bitmap_get_palettemapped(struct bitmap *bitmap, + int width, int height) +{ + struct BitMap *dtbm; + + if(bitmap->dto == NULL) + bitmap->dto = ami_datatype_object_from_bitmap(bitmap); + + SetDTAttrs(bitmap->dto, NULL, NULL, + PDTA_Screen, scrn, + TAG_DONE); + + if(DoDTMethod(bitmap->dto, 0, 0, DTM_PROCLAYOUT, 0, 1)) { + GetDTAttrs(bitmap->dto, + PDTA_DestBitMap, &dtbm, + PDTA_MaskPlane, &bitmap->native_mask, + TAG_END); + } +/* TODO: support scaling */ + return dtbm; +} -- cgit v1.2.3