From b125d48db5f6d7cfee0a7b95f28b1380408ddf83 Mon Sep 17 00:00:00 2001 From: harry Date: Wed, 10 May 2023 20:58:19 -0400 Subject: [PATCH] For Qt GUI add code that forces video alpha bits to 255 for all pixels. Some video drivers aren't ignoring the alpha bits as they should so make sure they as always set to be safe. --- src/CMakeLists.txt | 1 + src/drivers/Qt/ConsoleViewerGL.cpp | 4 ++-- src/drivers/Qt/ConsoleViewerInterface.cpp | 28 +++++++++++++++++++++++ src/drivers/Qt/ConsoleViewerInterface.h | 5 ++++ src/drivers/Qt/ConsoleViewerQWidget.cpp | 8 ++++--- src/drivers/Qt/ConsoleViewerSDL.cpp | 4 ++-- 6 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 src/drivers/Qt/ConsoleViewerInterface.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 387f3879..b0957b7b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -550,6 +550,7 @@ set(SRC_DRIVERS_SDL ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/ConsoleViewerGL.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/ConsoleViewerSDL.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/ConsoleViewerQWidget.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/ConsoleViewerInterface.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/InputConf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/GamePadConf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/FamilyKeyboard.cpp diff --git a/src/drivers/Qt/ConsoleViewerGL.cpp b/src/drivers/Qt/ConsoleViewerGL.cpp index c877cefe..d7dbe7e3 100644 --- a/src/drivers/Qt/ConsoleViewerGL.cpp +++ b/src/drivers/Qt/ConsoleViewerGL.cpp @@ -92,7 +92,7 @@ ConsoleViewGL_t::ConsoleViewGL_t(QWidget *parent) if ( localBuf ) { - memset( localBuf, 0, localBufSize ); + memset32( localBuf, alphaMask, localBufSize ); } vsyncEnabled = true; @@ -502,7 +502,7 @@ void ConsoleViewGL_t::transfer2LocalBuffer(void) } else { - memcpy( localBuf, src, cpSize ); + copyPixels32( dest, src, cpSize, alphaMask); } } diff --git a/src/drivers/Qt/ConsoleViewerInterface.cpp b/src/drivers/Qt/ConsoleViewerInterface.cpp new file mode 100644 index 00000000..362a30f3 --- /dev/null +++ b/src/drivers/Qt/ConsoleViewerInterface.cpp @@ -0,0 +1,28 @@ +// ConsoleViewerInterface.cpp +// +#include "Qt/ConsoleViewerInterface.h" + +//---------------------------------------------------------- +void ConsoleViewerBase::memset32( void *buf, uint32_t val, size_t size) +{ + uint32_t *p = static_cast(buf); + size_t n = size / sizeof(uint32_t); + + for (size_t i=0; i(dest); + uint32_t *s = static_cast(src); + size_t n = size / sizeof(uint32_t); + + for (size_t i=0; i #include #include @@ -47,5 +48,9 @@ class ConsoleViewerBase virtual void setMinimumSize(const QSize &) = 0; virtual void setMaximumSize(const QSize &) = 0; + static void memset32( void *buf, uint32_t val, size_t size); + static void copyPixels32( void *dest, void *src, size_t size, uint32_t alphaMask); + + static constexpr uint32_t alphaMask = 0xff000000; protected: }; diff --git a/src/drivers/Qt/ConsoleViewerQWidget.cpp b/src/drivers/Qt/ConsoleViewerQWidget.cpp index d0d2f55e..427012cb 100644 --- a/src/drivers/Qt/ConsoleViewerQWidget.cpp +++ b/src/drivers/Qt/ConsoleViewerQWidget.cpp @@ -25,6 +25,7 @@ #include //#include +#include "../../profiler.h" #include "Qt/nes_shm.h" #include "Qt/throttle.h" #include "Qt/fceuWrapper.h" @@ -86,7 +87,7 @@ ConsoleViewQWidget_t::ConsoleViewQWidget_t(QWidget *parent) if ( localBuf ) { - memset( localBuf, 0, localBufSize ); + memset32( localBuf, alphaMask, localBufSize ); } forceAspect = true; @@ -227,7 +228,8 @@ void ConsoleViewQWidget_t::transfer2LocalBuffer(void) } else { - memcpy( localBuf, src, cpSize ); + //memcpy( localBuf, src, cpSize ); + copyPixels32( dest, src, cpSize, alphaMask); } } @@ -488,7 +490,7 @@ void ConsoleViewQWidget_t::paintEvent(QPaintEvent *event) int rowPitch = nesWidth * sizeof(uint32_t); - QImage tmpImage( (const uchar*)localBuf, nesWidth, nesHeight, rowPitch, QImage::Format_RGB32); + QImage tmpImage( (const uchar*)localBuf, nesWidth, nesHeight, rowPitch, QImage::Format_ARGB32); //SDL_Rect source = {0, 0, nesWidth, nesHeight }; QRect dest( sx, sy, rw, rh ); diff --git a/src/drivers/Qt/ConsoleViewerSDL.cpp b/src/drivers/Qt/ConsoleViewerSDL.cpp index 04216592..339ec1c6 100644 --- a/src/drivers/Qt/ConsoleViewerSDL.cpp +++ b/src/drivers/Qt/ConsoleViewerSDL.cpp @@ -89,7 +89,7 @@ ConsoleViewSDL_t::ConsoleViewSDL_t(QWidget *parent) if ( localBuf ) { - memset( localBuf, 0, localBufSize ); + memset32( localBuf, alphaMask, localBufSize ); } forceAspect = true; @@ -240,7 +240,7 @@ void ConsoleViewSDL_t::transfer2LocalBuffer(void) } else { - memcpy( localBuf, src, cpSize ); + copyPixels32( dest, src, cpSize, alphaMask); } }