From 5a6bb392184decd72779ea93c4e0ecc492b3d77f Mon Sep 17 00:00:00 2001 From: Chris Young Date: Mon, 28 Jun 2021 20:11:46 +0100 Subject: [PATCH] Revert "Amiga: do not force 32-bit bitmaps" This reverts commit 793f514220c15c6bb1b0db31bf0b6d0cfea0fc7b. --- frontends/amiga/bitmap.c | 2 +- frontends/amiga/corewindow.c | 2 +- frontends/amiga/gui.c | 2 +- frontends/amiga/plotters.c | 16 ++++++++-------- frontends/amiga/plotters.h | 3 ++- frontends/amiga/print.c | 2 +- 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/frontends/amiga/bitmap.c b/frontends/amiga/bitmap.c index 97e537c10..e160f9351 100644 --- a/frontends/amiga/bitmap.c +++ b/frontends/amiga/bitmap.c @@ -750,7 +750,7 @@ static nserror bitmap_render(struct bitmap *bitmap, struct hlcache_handle *conte plot_height = ((plot_width * bitmap->height) + (bitmap->width / 2)) / bitmap->width; - bm_globals = ami_plot_ra_alloc(bitmap->width, bitmap->height, false); + bm_globals = ami_plot_ra_alloc(bitmap->width, bitmap->height, true, false); ami_clearclipreg(bm_globals); struct redraw_context ctx = { diff --git a/frontends/amiga/corewindow.c b/frontends/amiga/corewindow.c index 88988299f..bfb0eb202 100644 --- a/frontends/amiga/corewindow.c +++ b/frontends/amiga/corewindow.c @@ -939,7 +939,7 @@ nserror ami_corewindow_init(struct ami_corewindow *ami_cw) ami_cw->dragging = false; /* allocate drawing area etc */ - ami_cw->gg = ami_plot_ra_alloc(100, 100, true); // force tiles to save memory + ami_cw->gg = ami_plot_ra_alloc(100, 100, false, true); // force tiles to save memory ami_cw->deferred_rects = NewObjList(); ami_cw->deferred_rects_pool = ami_memory_itempool_create(sizeof(struct rect)); diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c index be5bca47a..8eb34fb92 100644 --- a/frontends/amiga/gui.c +++ b/frontends/amiga/gui.c @@ -1321,7 +1321,7 @@ static void ami_openscreen(void) static void ami_openscreenfirst(void) { ami_openscreen(); - if(browserglob == NULL) browserglob = ami_plot_ra_alloc(0, 0, false); + if(browserglob == NULL) browserglob = ami_plot_ra_alloc(0, 0, false, false); ami_theme_throbber_setup(); } diff --git a/frontends/amiga/plotters.c b/frontends/amiga/plotters.c index 68e682b0b..fe1e58f13 100644 --- a/frontends/amiga/plotters.c +++ b/frontends/amiga/plotters.c @@ -110,7 +110,7 @@ static bool palette_mapped = true; /* palette-mapped state for the screen */ */ #define AREA_SIZE 25000 -struct gui_globals *ami_plot_ra_alloc(ULONG width, ULONG height, bool alloc_pen_list) +struct gui_globals *ami_plot_ra_alloc(ULONG width, ULONG height, bool force32bit, bool alloc_pen_list) { /* init shared bitmaps */ int depth = 32; @@ -119,16 +119,16 @@ struct gui_globals *ami_plot_ra_alloc(ULONG width, ULONG height, bool alloc_pen_ struct gui_globals *gg = malloc(sizeof(struct gui_globals)); - depth = GetBitMapAttr(scrn->RastPort.BitMap, BMA_DEPTH); + if(force32bit == false) depth = GetBitMapAttr(scrn->RastPort.BitMap, BMA_DEPTH); NSLOG(netsurf, INFO, "Screen depth = %d", depth); #ifdef __amigaos4__ if(depth < 16) { gg->palette_mapped = true; - palette_mapped = true; + if(force32bit == false) palette_mapped = true; } else { gg->palette_mapped = false; - palette_mapped = false; + if(force32bit == false) palette_mapped = false; } #else /* Friend BitMaps are weird. @@ -141,15 +141,15 @@ struct gui_globals *ami_plot_ra_alloc(ULONG width, ULONG height, bool alloc_pen_ } else { /* Force friend BitMaps on for obvious RTG screens under OS3. * If we get a bit smarter about this we can lose the user option. */ - if(depth > 8) friend = scrn->RastPort.BitMap; + if((depth > 8) && (force32bit == false)) friend = scrn->RastPort.BitMap; } if(depth < 16) { gg->palette_mapped = true; - palette_mapped = true; + if(force32bit == false) palette_mapped = true; } else { gg->palette_mapped = false; - palette_mapped = false; + if(force32bit == false) palette_mapped = false; } #endif @@ -177,7 +177,7 @@ struct gui_globals *ami_plot_ra_alloc(ULONG width, ULONG height, bool alloc_pen_ * \todo use friend BitMaps but avoid CompositeTags() at non-32-bit * as that seems to be the cause of the problems. */ - if(depth >= 24) friend = scrn->RastPort.BitMap; + if((depth >= 24) && (force32bit == false)) friend = scrn->RastPort.BitMap; #endif gg->bm = ami_rtg_allocbitmap(width, height, 32, 0, friend, RGBFB_A8R8G8B8); } diff --git a/frontends/amiga/plotters.h b/frontends/amiga/plotters.h index 8fadbe200..94259234b 100644 --- a/frontends/amiga/plotters.h +++ b/frontends/amiga/plotters.h @@ -37,10 +37,11 @@ bool ami_plot_screen_is_palettemapped(void); * Alloc a plotter render area * \param width of render bitmap * \param height of render bitmap + * \param force32bit allocate a 32-bit bitmap even if this does not match the screen * \param alloc_pen_list set to false to use own pen list (eg. if multiple pen lists will be required) * \returns pointer to render area */ -struct gui_globals *ami_plot_ra_alloc(ULONG width, ULONG height, bool alloc_pen_list); +struct gui_globals *ami_plot_ra_alloc(ULONG width, ULONG height, bool force32bit, bool alloc_pen_list); /** * Free a plotter render area diff --git a/frontends/amiga/print.c b/frontends/amiga/print.c index 4624bd6c2..97c70b96c 100644 --- a/frontends/amiga/print.c +++ b/frontends/amiga/print.c @@ -500,7 +500,7 @@ bool ami_print_begin(struct print_settings *ps) { ami_print_info.gg = ami_plot_ra_alloc(ami_print_info.PED->ped_MaxXDots, ami_print_info.PED->ped_MaxYDots, - false); + true, false); if(!ami_print_info.gg) return false; ami_print_info.page = 0;