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.

This commit is contained in:
harry 2023-05-10 20:58:19 -04:00
parent 3208c01b38
commit b125d48db5
6 changed files with 43 additions and 7 deletions

View File

@ -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

View File

@ -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);
}
}

View File

@ -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<uint32_t*>(buf);
size_t n = size / sizeof(uint32_t);
for (size_t i=0; i<n; i++)
{
*p = val; p++;
}
}
//----------------------------------------------------------
void ConsoleViewerBase::copyPixels32( void *dest, void *src, size_t size, uint32_t alphaMask)
{
uint32_t *d = static_cast<uint32_t*>(dest);
uint32_t *s = static_cast<uint32_t*>(src);
size_t n = size / sizeof(uint32_t);
for (size_t i=0; i<n; i++)
{
*d = *s | alphaMask; d++; s++;
}
}
//----------------------------------------------------------

View File

@ -1,6 +1,7 @@
// ConsoleViewerInterface.h
//
#pragma once
#include <stdint.h>
#include <QColor>
#include <QCursor>
@ -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:
};

View File

@ -25,6 +25,7 @@
#include <math.h>
//#include <unistd.h>
#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 );

View File

@ -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);
}
}