winport - fix a bunch of sloppy broken stuff related to runtime changing of prescale and filtering

This commit is contained in:
zeromus 2015-09-28 08:34:21 +00:00
parent 15b6e7dbea
commit b0131342d4
2 changed files with 30 additions and 15 deletions

View File

@ -6321,11 +6321,16 @@ LRESULT CALLBACK GFX3DSettingsDlgProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp)
CommonSettings.GFX3D_TXTHack = IsDlgCheckboxChecked(hw,IDC_TXTHACK);
CommonSettings.GFX3D_PrescaleHD = SendDlgItemMessage(hw, IDC_NUD_PRESCALEHD, UDM_GETPOS, 0, 0);
Change3DCoreWithFallbackAndSave(ComboBox_GetCurSel(GetDlgItem(hw, IDC_3DCORE)));
video.SetPrescale(CommonSettings.GFX3D_PrescaleHD,1);
GPU->SetCustomFramebufferSize(256*video.prescaleHD,192*video.prescaleHD);
ScaleScreen(windowSize, false);
UpdateScreenRects();
{
Lock lock(win_backbuffer_sync);
if(display_mutex) g_mutex_lock(display_mutex);
Change3DCoreWithFallbackAndSave(ComboBox_GetCurSel(GetDlgItem(hw, IDC_3DCORE)));
video.SetPrescale(CommonSettings.GFX3D_PrescaleHD,1);
GPU->SetCustomFramebufferSize(256*video.prescaleHD,192*video.prescaleHD);
ScaleScreen(windowSize, false);
UpdateScreenRects();
if(display_mutex) g_mutex_unlock(display_mutex);
}
WritePrivateProfileBool("3D", "HighResolutionInterpolateColor", CommonSettings.GFX3D_HighResolutionInterpolateColor, IniName);
WritePrivateProfileBool("3D", "EnableEdgeMark", CommonSettings.GFX3D_EdgeMark, IniName);

View File

@ -22,6 +22,12 @@ class VideoInfo
{
public:
VideoInfo()
: buffer(NULL)
, filteredbuffer(NULL)
{
}
int width;
int height;
@ -40,11 +46,14 @@ public:
int scratchBufferSize;
u8* srcBuffer;
int srcBufferSize;
u32 *buffer;
u32 *buffer, *buffer_raw;
u32 *filteredbuffer;
void SetPrescale(int prescaleHD, int prescalePost)
{
free_aligned(buffer_raw);
free_aligned(filteredbuffer);
this->prescaleHD = prescaleHD;
this->prescalePost = prescalePost;
@ -60,7 +69,7 @@ public:
scratchBufferSize = scratchBufferWidth * scratchBufferHeight * 4;
//why are these the same size, anyway?
buffer = (u32*)malloc_alignedCacheLine(scratchBufferSize);
buffer_raw = buffer = (u32*)malloc_alignedCacheLine(scratchBufferSize);
filteredbuffer = (u32*)malloc_alignedCacheLine(scratchBufferSize);
clear();
@ -100,12 +109,13 @@ public:
void clear()
{
if (srcBuffer)
{
memset(srcBuffer, 0xFF, size() * 2);
}
memset(&buffer[0], 0, sizeof(buffer));
memset(&filteredbuffer[0], 0, sizeof(filteredbuffer));
//I dont understand this...
//if (srcBuffer)
//{
// memset(srcBuffer, 0xFF, size() * 2);
//}
memset(buffer_raw, 0, scratchBufferSize);
memset(filteredbuffer, 0, scratchBufferSize);
}
void reset() {
@ -179,8 +189,8 @@ public:
src.Pitch = src.Width * 2;
src.Surface = (u8*)buffer;
dst.Height = height;
dst.Width = width;
dst.Height = height * prescaleHD;
dst.Width = width * prescaleHD;
dst.Pitch = width*2;
dst.Surface = (u8*)filteredbuffer;