On Windows, draw HUD before the filter to avoid having to scale it separately. (significant performance boost when using a filter)

This commit is contained in:
SuuperW 2018-07-06 11:45:07 -05:00
parent e4d5da97c0
commit 5906d44c2d
1 changed files with 6 additions and 24 deletions

View File

@ -2015,18 +2015,6 @@ static void DoDisplay(bool firstTime)
ColorspaceApplyIntensityToBuffer32<false, false>(video.buffer + pixCount, pixCount, displayInfo.backlightIntensity[NDSDisplayID_Touch]); ColorspaceApplyIntensityToBuffer32<false, false>(video.buffer + pixCount, pixCount, displayInfo.backlightIntensity[NDSDisplayID_Touch]);
} }
if(firstTime)
{
//on single core systems, draw straight to the screen
//we only do this once per emulated frame because we don't want to waste time redrawing
//on such lousy computers
if(CommonSettings.single_core())
{
aggDraw.hud->attach((u8*)video.buffer, video.width, video.height, video.width*4);
DoDisplay_DrawHud();
}
}
if(AnyLuaActive()) if(AnyLuaActive())
{ {
if(sthread_isself(display_thread)) if(sthread_isself(display_thread))
@ -2040,19 +2028,13 @@ static void DoDisplay(bool firstTime)
} }
} }
// draw HUD
aggDraw.hud->attach((u8*)video.buffer, video.prefilterWidth, video.prefilterHeight, video.prefilterWidth * 4);
DoDisplay_DrawHud();
//apply user's filter //apply user's filter
video.filter(); video.filter();
if(!CommonSettings.single_core())
{
//draw and composite the OSD (but not if we are drawing osd straight to screen)
DoDisplay_DrawHud();
T_AGG_RGBA target((u8*)video.finalBuffer(), video.width,video.height,video.width*4);
target.transformImage(aggDraw.hud->image<T_AGG_PF_RGBA>(), 0,0,video.width,video.height);
aggDraw.hud->clear();
}
if(ddhw || ddsw) if(ddhw || ddsw)
{ {
gldisplay.kill(); gldisplay.kill();
@ -2292,7 +2274,7 @@ static void StepRunLoop_User()
Hud.fps3d = GPU->GetFPSRender3D(); Hud.fps3d = GPU->GetFPSRender3D();
// wait for the HUD to update from last frame // wait for the HUD to update from last frame
WaitForSingleObject(display_done_event, display_done_timeout); if(frameskiprate==0) WaitForSingleObject(display_done_event, display_done_timeout);
Display(); Display();
mainLoopData.fps3d = Hud.fps3d; mainLoopData.fps3d = Hud.fps3d;