From a5a8844c71e9c9925d05ec408e8114c762a29216 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Wed, 31 Aug 2016 20:56:20 +0300 Subject: [PATCH] Fix uaegfx 8-bit palette change. --- od-win32/picasso96_win.cpp | 11 ++++++++--- od-win32/picasso96_win.h | 2 +- od-win32/win32gfx.cpp | 8 ++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/od-win32/picasso96_win.cpp b/od-win32/picasso96_win.cpp index ed91e38b..45e5d401 100644 --- a/od-win32/picasso96_win.cpp +++ b/od-win32/picasso96_win.cpp @@ -912,7 +912,7 @@ static void setconvert(void) else alloc_colors_rgb(5, 6, 5, 11, 5, 0, 0, 0, 0, 0, p96rc, p96gc, p96bc); gfx_set_picasso_colors(picasso96_state.RGBFormat); - picasso_palette(); + picasso_palette(picasso96_state.CLUT); if (host_mode != ohost_mode || picasso96_state.RGBFormat != orgbformat) { write_log (_T("RTG conversion: Depth=%d HostRGBF=%d P96RGBF=%d Mode=%d\n"), picasso_vidinfo.pixbytes, host_mode, picasso96_state.RGBFormat, picasso_convert); @@ -2606,6 +2606,7 @@ static void resetpalette(void) */ static int updateclut(TrapContext *ctx, uaecptr clut, int start, int count) { + bool uaegfx = currprefs.rtgboards[0].rtgmem_type < GFXBOARD_HARDWARE && currprefs.rtgboards[0].rtgmem_size; uae_u8 clutbuf[256 * 3]; int i, changed = 0; clut += start * 3; @@ -2625,9 +2626,13 @@ static int updateclut(TrapContext *ctx, uaecptr clut, int start, int count) picasso96_state_uaegfx.CLUT[i].Red = r; picasso96_state_uaegfx.CLUT[i].Green = g; picasso96_state_uaegfx.CLUT[i].Blue = b; - clut += 3; + if (uaegfx) { + picasso96_state.CLUT[i].Red = r; + picasso96_state.CLUT[i].Green = g; + picasso96_state.CLUT[i].Blue = b; + } } - changed |= picasso_palette (); + changed |= picasso_palette (picasso96_state.CLUT); return changed; } static uae_u32 REGPARAM2 picasso_SetColorArray (TrapContext *ctx) diff --git a/od-win32/picasso96_win.h b/od-win32/picasso96_win.h index e5665a5e..6a57909a 100644 --- a/od-win32/picasso96_win.h +++ b/od-win32/picasso96_win.h @@ -557,7 +557,7 @@ extern void picasso_trigger_vblank (void); extern void picasso_reset (void); extern bool picasso_is_active (void); extern int picasso_setwincursor (void); -extern int picasso_palette (void); +extern int picasso_palette (struct MyCLUTEntry *CLUT); extern bool picasso_flushpixels (int index, uae_u8 *src, int offset); extern void picasso_allocatewritewatch (int index, int gfxmemsize); extern void picasso_getwritewatch (int index, int offset); diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index fbe431a1..7095d4ac 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -2428,15 +2428,15 @@ void init_colors (void) #ifdef PICASSO96 -int picasso_palette (void) +int picasso_palette (struct MyCLUTEntry *CLUT) { int i, changed; changed = 0; for (i = 0; i < 256; i++) { - int r = picasso96_state.CLUT[i].Red; - int g = picasso96_state.CLUT[i].Green; - int b = picasso96_state.CLUT[i].Blue; + int r = CLUT[i].Red; + int g = CLUT[i].Green; + int b = CLUT[i].Blue; uae_u32 v = (doMask256 (r, red_bits, red_shift) | doMask256 (g, green_bits, green_shift) | doMask256 (b, blue_bits, blue_shift)) -- 2.47.3