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:
parent
3208c01b38
commit
b125d48db5
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------
|
|
@ -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:
|
||||
};
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue