From 7f7b80b8a8b39a92231214ecc4b5bb1862e4edc4 Mon Sep 17 00:00:00 2001 From: zeromus Date: Wed, 7 May 2008 22:33:53 +0000 Subject: [PATCH] google issue 42 - palette corruption --- src/drivers/win/video.cpp | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/drivers/win/video.cpp b/src/drivers/win/video.cpp index 52049024..87288e72 100644 --- a/src/drivers/win/video.cpp +++ b/src/drivers/win/video.cpp @@ -97,19 +97,24 @@ void FCEUD_GetPalette(unsigned char i, unsigned char *r, unsigned char *g, unsig *b=color_palette[i].peBlue; } +static bool firstInitialize = true; static int InitializeDDraw(int fs) { -#ifdef _USE_SHARED_MEMORY_ - mapColorPalette = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE, 0, 256 * sizeof(PALETTEENTRY),"fceu.ColorPalette"); - if(mapColorPalette == NULL || GetLastError() == ERROR_ALREADY_EXISTS) - { - CloseHandle(mapColorPalette); - mapColorPalette = NULL; - color_palette = (PALETTEENTRY*)malloc(256 * sizeof(PALETTEENTRY)); //mbg merge 7/18/06 added cast + //only init the palette the first time through + if(firstInitialize) { + firstInitialize = false; + #ifdef _USE_SHARED_MEMORY_ + mapColorPalette = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE, 0, 256 * sizeof(PALETTEENTRY),"fceu.ColorPalette"); + if(mapColorPalette == NULL || GetLastError() == ERROR_ALREADY_EXISTS) + { + CloseHandle(mapColorPalette); + mapColorPalette = NULL; + color_palette = (PALETTEENTRY*)malloc(256 * sizeof(PALETTEENTRY)); //mbg merge 7/18/06 added cast + } + else + color_palette = (PALETTEENTRY *)MapViewOfFile(mapColorPalette, FILE_MAP_WRITE, 0, 0, 0); + #endif } - else - color_palette = (PALETTEENTRY *)MapViewOfFile(mapColorPalette, FILE_MAP_WRITE, 0, 0, 0); -#endif //(disvaccel&(1<<(fs?1:0)))?(GUID FAR *)DDCREATE_EMULATIONONLY: ddrval = DirectDrawCreate((disvaccel&(1<<(fs?1:0)))?(GUID FAR *)DDCREATE_EMULATIONONLY:NULL, &lpDD, NULL); @@ -1081,8 +1086,8 @@ void SetFSVideoMode() void DoVideoConfigFix(void) { - FCEUI_DisableSpriteLimitation(eoptions&EO_NOSPRLIM); - UpdateRendBounds(); + FCEUI_DisableSpriteLimitation(eoptions&EO_NOSPRLIM); + UpdateRendBounds(); } /** @@ -1103,6 +1108,6 @@ void ConfigVideo(void) SetVideoMode(0); changerecursive = 0; } - //SetMainWindowStuff(); + SetMainWindowStuff(); }