From 2861067933a837e31d340eca32a0be69ac2a49a7 Mon Sep 17 00:00:00 2001 From: mjbudd77 Date: Fri, 11 Jun 2021 14:55:49 -0400 Subject: [PATCH 1/5] Fixed SDL video init for linux, force window to be reshown after calling SDL_DestroyWindow as the destroy calls hide. --- src/drivers/Qt/ConsoleViewerSDL.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/drivers/Qt/ConsoleViewerSDL.cpp b/src/drivers/Qt/ConsoleViewerSDL.cpp index 7c691607..8199e859 100644 --- a/src/drivers/Qt/ConsoleViewerSDL.cpp +++ b/src/drivers/Qt/ConsoleViewerSDL.cpp @@ -239,18 +239,10 @@ int ConsoleViewSDL_t::init(void) windowHandle = this->winId(); - //printf("Window Handle: %llu \n", windowHandle ); - - //sleep(1); - -#ifdef WIN32 if (sdlWindow == NULL) { sdlWindow = SDL_CreateWindowFrom( (void*)windowHandle); } -#else - sdlWindow = SDL_CreateWindowFrom( (void*)windowHandle); -#endif if (sdlWindow == NULL) { @@ -258,6 +250,8 @@ int ConsoleViewSDL_t::init(void) return -1; } + SDL_ShowWindow( sdlWindow ); + uint32_t baseFlags = vsyncEnabled ? SDL_RENDERER_PRESENTVSYNC : 0; sdlRenderer = SDL_CreateRenderer(sdlWindow, -1, baseFlags | SDL_RENDERER_ACCELERATED); @@ -304,6 +298,11 @@ void ConsoleViewSDL_t::cleanup(void) SDL_DestroyRenderer(sdlRenderer); sdlRenderer = NULL; } + if ( sdlWindow ) + { + SDL_DestroyWindow( sdlWindow ); + sdlWindow = NULL; + } } void ConsoleViewSDL_t::reset(void) From ac2818e3da0ffad8d1bb1f388ae4984062f44896 Mon Sep 17 00:00:00 2001 From: Alexey 'Cluster' Avdyukhin Date: Sat, 12 Jun 2021 03:55:04 +0300 Subject: [PATCH 2/5] Moved grayscale filter to ChoosePalette() --- src/drivers/Qt/sdl-video.cpp | 19 +++---------------- src/drivers/win/video.cpp | 16 +++------------- src/palette.cpp | 23 +++++++++++++++++++++++ 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/drivers/Qt/sdl-video.cpp b/src/drivers/Qt/sdl-video.cpp index 0bf667e7..8fea58c5 100644 --- a/src/drivers/Qt/sdl-video.cpp +++ b/src/drivers/Qt/sdl-video.cpp @@ -51,7 +51,6 @@ // GLOBALS extern Config *g_config; -extern bool force_grayscale; // STATIC GLOBALS static int s_curbpp = 0; @@ -363,21 +362,9 @@ FCEUD_SetPalette(uint8 index, uint8 g, uint8 b) { - if ( force_grayscale ) - { - // convert the palette entry to grayscale - int gray = ((float)r * 0.299 + (float)g * 0.587 + (float)b * 0.114); - - s_psdl[index].r = gray; - s_psdl[index].g = gray; - s_psdl[index].b = gray; - } - else - { - s_psdl[index].r = r; - s_psdl[index].g = g; - s_psdl[index].b = b; - } + s_psdl[index].r = r; + s_psdl[index].g = g; + s_psdl[index].b = b; s_paletterefresh = 1; } diff --git a/src/drivers/win/video.cpp b/src/drivers/win/video.cpp index 05e1add5..efce6ff4 100644 --- a/src/drivers/win/video.cpp +++ b/src/drivers/win/video.cpp @@ -115,19 +115,9 @@ int RestoreDD(int w) void FCEUD_SetPalette(unsigned char index, unsigned char r, unsigned char g, unsigned char b) { - if (force_grayscale) - { - // convert the palette entry to grayscale - int gray = ((float)r * 0.299 + (float)g * 0.587 + (float)b * 0.114); - color_palette[index].peRed = gray; - color_palette[index].peGreen = gray; - color_palette[index].peBlue = gray; - } else - { - color_palette[index].peRed = r; - color_palette[index].peGreen = g; - color_palette[index].peBlue = b; - } + color_palette[index].peRed = r; + color_palette[index].peGreen = g; + color_palette[index].peBlue = b; PaletteChanged=1; } diff --git a/src/palette.cpp b/src/palette.cpp index 361d9671..f13eede4 100644 --- a/src/palette.cpp +++ b/src/palette.cpp @@ -41,6 +41,7 @@ #include bool force_grayscale = false; +pal *grayscaled_palo = NULL; pal palette_game[64*8]; //custom palette for an individual game. (formerly palettei) pal palette_user[64*8]; //user's overridden palette (formerly palettec) @@ -526,6 +527,28 @@ static void ChoosePalette(void) //need to calcualte a deemph on the fly.. sorry. maybe support otherwise later ApplyDeemphasisComplete(palo); } + if (force_grayscale) + { + // need to apply grayscale filter + // allocate memory for grayscale palette + if (grayscaled_palo == NULL) + grayscaled_palo = (pal*)malloc(sizeof(pal) * 512); + // make every color grayscale + for (int x = 0; x < 512; x++) + { + uint8 gray = ((float)palo[x].r * 0.299 + (float)palo[x].g * 0.587 + (float)palo[x].b * 0.114); + grayscaled_palo[x].r = gray; + grayscaled_palo[x].g = gray; + grayscaled_palo[x].b = gray; + } + // apply new palette + palo = grayscaled_palo; + } + else if (grayscaled_palo != NULL) + { + free(grayscaled_palo); + grayscaled_palo = NULL; + } } void WritePalette(void) From d1b5301f640fa4079c2cde9a2d32de1df7287e76 Mon Sep 17 00:00:00 2001 From: Alexey 'Cluster' Avdyukhin Date: Sat, 12 Jun 2021 04:47:01 +0300 Subject: [PATCH 3/5] Minor refactoring, comments --- src/palette.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/palette.cpp b/src/palette.cpp index f13eede4..102f91ba 100644 --- a/src/palette.cpp +++ b/src/palette.cpp @@ -532,9 +532,9 @@ static void ChoosePalette(void) // need to apply grayscale filter // allocate memory for grayscale palette if (grayscaled_palo == NULL) - grayscaled_palo = (pal*)malloc(sizeof(pal) * 512); + grayscaled_palo = (pal*)malloc(sizeof(pal) * 64 * 8); // make every color grayscale - for (int x = 0; x < 512; x++) + for (int x = 0; x < 64 * 8; x++) { uint8 gray = ((float)palo[x].r * 0.299 + (float)palo[x].g * 0.587 + (float)palo[x].b * 0.114); grayscaled_palo[x].r = gray; @@ -546,6 +546,7 @@ static void ChoosePalette(void) } else if (grayscaled_palo != NULL) { + // free allocated memory if the grayscale filter is not used anymore free(grayscaled_palo); grayscaled_palo = NULL; } From e79f0159df9acc6ad4c5220cf89963c0fe388c3a Mon Sep 17 00:00:00 2001 From: mjbudd77 Date: Fri, 11 Jun 2021 23:00:11 -0400 Subject: [PATCH 4/5] Changed PAL filter name to PAL 3x to match recent win32 version changes. --- src/drivers/Qt/ConsoleVideoConf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/Qt/ConsoleVideoConf.cpp b/src/drivers/Qt/ConsoleVideoConf.cpp index 5f190507..fc66b72f 100644 --- a/src/drivers/Qt/ConsoleVideoConf.cpp +++ b/src/drivers/Qt/ConsoleVideoConf.cpp @@ -97,7 +97,7 @@ ConsoleVideoConfDialog_t::ConsoleVideoConfDialog_t(QWidget *parent) scalerSelect->addItem( tr("Prescale 2x"), 6 ); scalerSelect->addItem( tr("Prescale 3x"), 7 ); scalerSelect->addItem( tr("Prescale 4x"), 8 ); - scalerSelect->addItem( tr("PAL"), 9 ); + scalerSelect->addItem( tr("PAL 3x"), 9 ); hbox1 = new QHBoxLayout(); From da36b4afd8792a494ebc112cf8bd934626428244 Mon Sep 17 00:00:00 2001 From: mjbudd77 Date: Fri, 11 Jun 2021 23:09:10 -0400 Subject: [PATCH 5/5] Commented out redundant hot key set window activation. itemActivated and itemDoubleClicked signals are not both needed. A double click will also trigger itemActivated signal. --- src/drivers/Qt/HotKeyConf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/Qt/HotKeyConf.cpp b/src/drivers/Qt/HotKeyConf.cpp index 43f7a311..7a1ff50d 100644 --- a/src/drivers/Qt/HotKeyConf.cpp +++ b/src/drivers/Qt/HotKeyConf.cpp @@ -90,7 +90,7 @@ HotKeyConfDialog_t::HotKeyConfDialog_t(QWidget *parent) } - connect( tree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(hotKeyDoubleClicked(QTreeWidgetItem*,int) ) ); + //connect( tree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(hotKeyDoubleClicked(QTreeWidgetItem*,int) ) ); connect( tree, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(hotKeyActivated(QTreeWidgetItem*,int) ) ); mainLayout->addWidget(tree);