added shading to TIA surface when emulation paused or dialog on top

This commit is contained in:
thrust26 2020-12-01 22:21:23 +01:00
parent 13a29ddddf
commit 462b8f75f7
3 changed files with 28 additions and 11 deletions

View File

@ -346,10 +346,10 @@ void FrameBuffer::update(UpdateMode mode)
{ {
myPausedCount = uInt32(7 * myOSystem.frameRate()); myPausedCount = uInt32(7 * myOSystem.frameRate());
showTextMessage("Paused", MessagePosition::MiddleCenter); showTextMessage("Paused", MessagePosition::MiddleCenter);
myTIASurface->render(); myTIASurface->render(true);
} }
if(rerender) if(rerender)
myTIASurface->render(); myTIASurface->render(true);
break; // EventHandlerState::PAUSE break; // EventHandlerState::PAUSE
} }
@ -361,13 +361,13 @@ void FrameBuffer::update(UpdateMode mode)
if(redraw) if(redraw)
{ {
clear(); clear();
myTIASurface->render(); myTIASurface->render(true);
myOSystem.menu().draw(forceRedraw); myOSystem.menu().draw(forceRedraw);
} }
else if(rerender) else if(rerender)
{ {
clear(); clear();
myTIASurface->render(); myTIASurface->render(true);
myOSystem.menu().render(); myOSystem.menu().render();
} }
break; // EventHandlerState::OPTIONSMENU break; // EventHandlerState::OPTIONSMENU
@ -380,7 +380,7 @@ void FrameBuffer::update(UpdateMode mode)
if(redraw) if(redraw)
{ {
clear(); clear();
myTIASurface->render(); myTIASurface->render(true);
myOSystem.commandMenu().draw(forceRedraw); myOSystem.commandMenu().draw(forceRedraw);
} }
break; // EventHandlerState::CMDMENU break; // EventHandlerState::CMDMENU
@ -393,13 +393,13 @@ void FrameBuffer::update(UpdateMode mode)
if(redraw) if(redraw)
{ {
clear(); clear();
myTIASurface->render(); myTIASurface->render(true);
myOSystem.highscoresMenu().draw(forceRedraw); myOSystem.highscoresMenu().draw(forceRedraw);
} }
else if(rerender) else if(rerender)
{ {
clear(); clear();
myTIASurface->render(); myTIASurface->render(true);
myOSystem.highscoresMenu().render(); myOSystem.highscoresMenu().render();
} }
break; // EventHandlerState::HIGHSCORESMENU break; // EventHandlerState::HIGHSCORESMENU
@ -412,7 +412,7 @@ void FrameBuffer::update(UpdateMode mode)
if(redraw) if(redraw)
{ {
clear(); clear();
myTIASurface->render(); myTIASurface->render(true);
myOSystem.messageMenu().draw(forceRedraw); myOSystem.messageMenu().draw(forceRedraw);
} }
break; // EventHandlerState::MESSAGEMENU break; // EventHandlerState::MESSAGEMENU

View File

@ -75,6 +75,17 @@ TIASurface::TIASurface(OSystem& system)
myBaseTiaSurface = myFB.allocateSurface(TIAConstants::frameBufferWidth*2, myBaseTiaSurface = myFB.allocateSurface(TIAConstants::frameBufferWidth*2,
TIAConstants::frameBufferHeight); TIAConstants::frameBufferHeight);
// Create shading surface
uInt32 data = 0xff000000;
myShadeSurface = myFB.allocateSurface(1, 1, ScalingInterpolation::sharp, &data);
FBSurface::Attributes& attr = myShadeSurface->attributes();
attr.blending = true;
attr.blendalpha = 35; // darken stopped emulation by 35%
myShadeSurface->applyAttributes();
myRGBFramebuffer.fill(0); myRGBFramebuffer.fill(0);
// Enable/disable threading in the NTSC TV effects renderer // Enable/disable threading in the NTSC TV effects renderer
@ -361,7 +372,7 @@ inline uInt32 TIASurface::averageBuffers(uInt32 bufOfs)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void TIASurface::render() void TIASurface::render(bool shade)
{ {
uInt32 width = myTIA->width(), height = myTIA->height(); uInt32 width = myTIA->width(), height = myTIA->height();
@ -438,6 +449,12 @@ void TIASurface::render()
if(myScanlinesEnabled) if(myScanlinesEnabled)
mySLineSurface->render(); mySLineSurface->render();
if(shade)
{
myShadeSurface->setDstRect(myTiaSurface->dstRect());
myShadeSurface->render();
}
if(mySaveSnapFlag) if(mySaveSnapFlag)
{ {
mySaveSnapFlag = false; mySaveSnapFlag = false;

View File

@ -164,7 +164,7 @@ class TIASurface
/** /**
This method should be called to draw the TIA image(s) to the screen. This method should be called to draw the TIA image(s) to the screen.
*/ */
void render(); void render(bool shade = false);
/** /**
This method prepares the current frame for taking a snapshot. This method prepares the current frame for taking a snapshot.
@ -208,7 +208,7 @@ class TIASurface
FrameBuffer& myFB; FrameBuffer& myFB;
TIA* myTIA{nullptr}; TIA* myTIA{nullptr};
shared_ptr<FBSurface> myTiaSurface, mySLineSurface, myBaseTiaSurface; shared_ptr<FBSurface> myTiaSurface, mySLineSurface, myBaseTiaSurface, myShadeSurface;
// NTSC object to use in TIA rendering mode // NTSC object to use in TIA rendering mode
NTSCFilter myNTSCFilter; NTSCFilter myNTSCFilter;