winport - preliminary work on binding HD rendering
This commit is contained in:
parent
601b86c78a
commit
8c00e2c676
|
@ -480,6 +480,7 @@ extern struct TCommonSettings {
|
||||||
, GFX3D_Zelda_Shadow_Depth_Hack(0)
|
, GFX3D_Zelda_Shadow_Depth_Hack(0)
|
||||||
, GFX3D_Renderer_Multisample(false)
|
, GFX3D_Renderer_Multisample(false)
|
||||||
, GFX3D_TXTHack(false)
|
, GFX3D_TXTHack(false)
|
||||||
|
, GFX3D_PrescaleHD(1)
|
||||||
, jit_max_block_size(100)
|
, jit_max_block_size(100)
|
||||||
, loadToMemory(false)
|
, loadToMemory(false)
|
||||||
, UseExtBIOS(false)
|
, UseExtBIOS(false)
|
||||||
|
@ -540,6 +541,9 @@ extern struct TCommonSettings {
|
||||||
bool GFX3D_Renderer_Multisample;
|
bool GFX3D_Renderer_Multisample;
|
||||||
bool GFX3D_TXTHack;
|
bool GFX3D_TXTHack;
|
||||||
|
|
||||||
|
//may not want this on OSX port
|
||||||
|
int GFX3D_PrescaleHD;
|
||||||
|
|
||||||
bool loadToMemory;
|
bool loadToMemory;
|
||||||
|
|
||||||
bool UseExtBIOS;
|
bool UseExtBIOS;
|
||||||
|
|
|
@ -1857,7 +1857,17 @@ static void DD_DoDisplay()
|
||||||
}
|
}
|
||||||
|
|
||||||
//triple buffering logic
|
//triple buffering logic
|
||||||
u16 displayBuffers[3][256*192*4];
|
struct DisplayBuffer
|
||||||
|
{
|
||||||
|
DisplayBuffer()
|
||||||
|
: buffer(NULL)
|
||||||
|
, size(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
u16* buffer;
|
||||||
|
int size; //[256*192*4];
|
||||||
|
} displayBuffers[3];
|
||||||
|
|
||||||
volatile int currDisplayBuffer=-1;
|
volatile int currDisplayBuffer=-1;
|
||||||
volatile int newestDisplayBuffer=-2;
|
volatile int newestDisplayBuffer=-2;
|
||||||
GMutex *display_mutex = NULL;
|
GMutex *display_mutex = NULL;
|
||||||
|
@ -1897,7 +1907,7 @@ static void DoDisplay(bool firstTime)
|
||||||
//convert pixel format to 32bpp for compositing
|
//convert pixel format to 32bpp for compositing
|
||||||
//why do we do this over and over? well, we are compositing to
|
//why do we do this over and over? well, we are compositing to
|
||||||
//filteredbuffer32bpp, and it needs to get refreshed each frame..
|
//filteredbuffer32bpp, and it needs to get refreshed each frame..
|
||||||
const int size = video.size();
|
const int size = video.srcBufferSize/2;
|
||||||
u16* src = (u16*)video.srcBuffer;
|
u16* src = (u16*)video.srcBuffer;
|
||||||
for(int i=0;i<size;i++)
|
for(int i=0;i<size;i++)
|
||||||
video.buffer[i] = RGB15TO24_REVERSE(src[i]);
|
video.buffer[i] = RGB15TO24_REVERSE(src[i]);
|
||||||
|
@ -1967,7 +1977,8 @@ void displayProc()
|
||||||
if(!alreadyDisplayed) {
|
if(!alreadyDisplayed) {
|
||||||
//start displaying a new buffer
|
//start displaying a new buffer
|
||||||
currDisplayBuffer = todo;
|
currDisplayBuffer = todo;
|
||||||
video.srcBuffer = (u8*)displayBuffers[currDisplayBuffer];
|
video.srcBuffer = (u8*)displayBuffers[currDisplayBuffer].buffer;
|
||||||
|
video.srcBufferSize = displayBuffers[currDisplayBuffer].size;
|
||||||
|
|
||||||
DoDisplay(true);
|
DoDisplay(true);
|
||||||
}
|
}
|
||||||
|
@ -2000,6 +2011,7 @@ void Display()
|
||||||
if(CommonSettings.single_core())
|
if(CommonSettings.single_core())
|
||||||
{
|
{
|
||||||
video.srcBuffer = (u8*)GPU->GetNativeFramebuffer();
|
video.srcBuffer = (u8*)GPU->GetNativeFramebuffer();
|
||||||
|
video.srcBufferSize = GPU->GetCustomFramebufferHeight()*GPU->GetCustomFramebufferWidth()*2*2;
|
||||||
DoDisplay(true);
|
DoDisplay(true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2019,7 +2031,15 @@ void Display()
|
||||||
newestDisplayBuffer += diff;
|
newestDisplayBuffer += diff;
|
||||||
else newestDisplayBuffer = (currDisplayBuffer+2)%3;
|
else newestDisplayBuffer = (currDisplayBuffer+2)%3;
|
||||||
|
|
||||||
memcpy(displayBuffers[newestDisplayBuffer],GPU->GetNativeFramebuffer(),256*192*4);
|
DisplayBuffer& db = displayBuffers[newestDisplayBuffer];
|
||||||
|
int targetSize = 256*192*4*video.prescaleHD*video.prescaleHD;
|
||||||
|
if(db.size != targetSize)
|
||||||
|
{
|
||||||
|
free_aligned(db.buffer);
|
||||||
|
db.buffer = (u16*)malloc_alignedCacheLine(targetSize);
|
||||||
|
db.size = targetSize;
|
||||||
|
}
|
||||||
|
memcpy(db.buffer,GPU->GetCustomFramebuffer(),targetSize);
|
||||||
|
|
||||||
g_mutex_unlock(display_mutex);
|
g_mutex_unlock(display_mutex);
|
||||||
}
|
}
|
||||||
|
@ -3139,6 +3159,9 @@ int _main()
|
||||||
|
|
||||||
SetMinWindowSize();
|
SetMinWindowSize();
|
||||||
|
|
||||||
|
CommonSettings.GFX3D_PrescaleHD = GetPrivateProfileInt("3D", "PrescaleHD", 0, IniName);
|
||||||
|
video.SetPrescale(CommonSettings.GFX3D_PrescaleHD,1);
|
||||||
|
|
||||||
ScaleScreen(windowSize, false);
|
ScaleScreen(windowSize, false);
|
||||||
|
|
||||||
DragAcceptFiles(MainWindow->getHWnd(), TRUE);
|
DragAcceptFiles(MainWindow->getHWnd(), TRUE);
|
||||||
|
@ -3265,6 +3288,8 @@ int _main()
|
||||||
NDS_Init();
|
NDS_Init();
|
||||||
GPU->ClearWithColor(0xFFFF);
|
GPU->ClearWithColor(0xFFFF);
|
||||||
|
|
||||||
|
GPU->SetCustomFramebufferSize(256*video.prescaleHD,192*video.prescaleHD);
|
||||||
|
|
||||||
#ifdef GDB_STUB
|
#ifdef GDB_STUB
|
||||||
gdbstub_mutex_init();
|
gdbstub_mutex_init();
|
||||||
|
|
||||||
|
@ -3354,6 +3379,7 @@ int _main()
|
||||||
CommonSettings.GFX3D_TXTHack = GetPrivateProfileBool("3D", "EnableTXTHack", 0, IniName); //default is off.
|
CommonSettings.GFX3D_TXTHack = GetPrivateProfileBool("3D", "EnableTXTHack", 0, IniName); //default is off.
|
||||||
Change3DCoreWithFallbackAndSave(cur3DCore);
|
Change3DCoreWithFallbackAndSave(cur3DCore);
|
||||||
|
|
||||||
|
|
||||||
#ifdef BETA_VERSION
|
#ifdef BETA_VERSION
|
||||||
EnableMenuItem (mainMenu, IDM_SUBMITBUGREPORT, MF_GRAYED);
|
EnableMenuItem (mainMenu, IDM_SUBMITBUGREPORT, MF_GRAYED);
|
||||||
#endif
|
#endif
|
||||||
|
@ -6362,6 +6388,9 @@ LRESULT CALLBACK GFX3DSettingsDlgProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp)
|
||||||
SetDlgItemInt (hw,IDC_ZELDA_SHADOW_DEPTH_HACK,CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack,FALSE);
|
SetDlgItemInt (hw,IDC_ZELDA_SHADOW_DEPTH_HACK,CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack,FALSE);
|
||||||
//CheckDlgButton(hw,IDC_ALTERNATEFLUSH,CommonSettings.gfx3d_flushMode);
|
//CheckDlgButton(hw,IDC_ALTERNATEFLUSH,CommonSettings.gfx3d_flushMode);
|
||||||
|
|
||||||
|
SendDlgItemMessage(hw, IDC_NUD_PRESCALEHD, UDM_SETRANGE, 0, MAKELPARAM(5, 1));
|
||||||
|
SendDlgItemMessage(hw, IDC_NUD_PRESCALEHD, UDM_SETPOS, 0, CommonSettings.GFX3D_PrescaleHD);
|
||||||
|
|
||||||
for(i = 0; core3DList[i] != NULL; i++)
|
for(i = 0; core3DList[i] != NULL; i++)
|
||||||
{
|
{
|
||||||
ComboBox_AddString(GetDlgItem(hw, IDC_3DCORE), core3DList[i]->name);
|
ComboBox_AddString(GetDlgItem(hw, IDC_3DCORE), core3DList[i]->name);
|
||||||
|
@ -6384,8 +6413,14 @@ LRESULT CALLBACK GFX3DSettingsDlgProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp)
|
||||||
CommonSettings.GFX3D_Renderer_Multisample = IsDlgCheckboxChecked(hw,IDC_3DSETTINGS_ANTIALIASING);
|
CommonSettings.GFX3D_Renderer_Multisample = IsDlgCheckboxChecked(hw,IDC_3DSETTINGS_ANTIALIASING);
|
||||||
CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack = GetDlgItemInt(hw,IDC_ZELDA_SHADOW_DEPTH_HACK,NULL,FALSE);
|
CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack = GetDlgItemInt(hw,IDC_ZELDA_SHADOW_DEPTH_HACK,NULL,FALSE);
|
||||||
CommonSettings.GFX3D_TXTHack = IsDlgCheckboxChecked(hw,IDC_TXTHACK);
|
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)));
|
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();
|
||||||
|
|
||||||
WritePrivateProfileBool("3D", "HighResolutionInterpolateColor", CommonSettings.GFX3D_HighResolutionInterpolateColor, IniName);
|
WritePrivateProfileBool("3D", "HighResolutionInterpolateColor", CommonSettings.GFX3D_HighResolutionInterpolateColor, IniName);
|
||||||
WritePrivateProfileBool("3D", "EnableEdgeMark", CommonSettings.GFX3D_EdgeMark, IniName);
|
WritePrivateProfileBool("3D", "EnableEdgeMark", CommonSettings.GFX3D_EdgeMark, IniName);
|
||||||
WritePrivateProfileBool("3D", "EnableFog", CommonSettings.GFX3D_Fog, IniName);
|
WritePrivateProfileBool("3D", "EnableFog", CommonSettings.GFX3D_Fog, IniName);
|
||||||
|
@ -6394,7 +6429,7 @@ LRESULT CALLBACK GFX3DSettingsDlgProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp)
|
||||||
WritePrivateProfileInt ("3D", "EnableLineHack", CommonSettings.GFX3D_LineHack, IniName);
|
WritePrivateProfileInt ("3D", "EnableLineHack", CommonSettings.GFX3D_LineHack, IniName);
|
||||||
WritePrivateProfileInt ("3D", "EnableAntiAliasing", CommonSettings.GFX3D_Renderer_Multisample, IniName);
|
WritePrivateProfileInt ("3D", "EnableAntiAliasing", CommonSettings.GFX3D_Renderer_Multisample, IniName);
|
||||||
WritePrivateProfileInt ("3D", "EnableTXTHack", CommonSettings.GFX3D_TXTHack, IniName);
|
WritePrivateProfileInt ("3D", "EnableTXTHack", CommonSettings.GFX3D_TXTHack, IniName);
|
||||||
//WritePrivateProfileInt("3D", "AlternateFlush", CommonSettings.gfx3d_flushMode, IniName);
|
WritePrivateProfileInt ("3D", "PrescaleHD", CommonSettings.GFX3D_PrescaleHD, IniName);
|
||||||
}
|
}
|
||||||
case IDCANCEL:
|
case IDCANCEL:
|
||||||
{
|
{
|
||||||
|
|
|
@ -464,7 +464,10 @@
|
||||||
#define IDC_FILE_QVIEW 1060
|
#define IDC_FILE_QVIEW 1060
|
||||||
#define IDC_BEDIT 1061
|
#define IDC_BEDIT 1061
|
||||||
#define IDC_STATIC_S1 1061
|
#define IDC_STATIC_S1 1061
|
||||||
|
#define IDC_SPIN1 1061
|
||||||
|
#define IDC_NUD_PRESCALEHD 1061
|
||||||
#define IDC_STATIC_S2 1062
|
#define IDC_STATIC_S2 1062
|
||||||
|
#define IDC_TEXT_PRESCALEHD 1062
|
||||||
#define IDC_STATIC_S3 1063
|
#define IDC_STATIC_S3 1063
|
||||||
#define IDC_STATIC_S4 1064
|
#define IDC_STATIC_S4 1064
|
||||||
#define IDC_EVALUE 1065
|
#define IDC_EVALUE 1065
|
||||||
|
@ -1066,7 +1069,7 @@
|
||||||
#define _APS_NO_MFC 1
|
#define _APS_NO_MFC 1
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 128
|
#define _APS_NEXT_RESOURCE_VALUE 128
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40126
|
#define _APS_NEXT_COMMAND_VALUE 40126
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1059
|
#define _APS_NEXT_CONTROL_VALUE 1063
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,13 +13,11 @@
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// English (U.S.) resources
|
// English (United States) resources
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||||
#ifdef _WIN32
|
|
||||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
#pragma code_page(1252)
|
#pragma code_page(1252)
|
||||||
#endif //_WIN32
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
@ -31,7 +29,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTI
|
||||||
CAPTION "NITRO File System"
|
CAPTION "NITRO File System"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
CONTROL "",IDC_FILES_TREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | WS_BORDER | WS_HSCROLL | WS_TABSTOP | 0x800,7,7,359,294
|
CONTROL "",IDC_FILES_TREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | TVS_INFOTIP | WS_BORDER | WS_HSCROLL | WS_TABSTOP,7,7,359,294
|
||||||
PUSHBUTTON "Close",IDCANCEL,316,320,50,14
|
PUSHBUTTON "Close",IDCANCEL,316,320,50,14
|
||||||
EDITTEXT IDC_FILE_INFO,8,322,306,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
|
EDITTEXT IDC_FILE_INFO,8,322,306,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
|
||||||
LTEXT "Static",IDC_FILE_QVIEW,7,303,359,15,NOT WS_GROUP
|
LTEXT "Static",IDC_FILE_QVIEW,7,303,359,15,NOT WS_GROUP
|
||||||
|
@ -112,31 +110,35 @@ BEGIN
|
||||||
PUSHBUTTON "&Cancel",IDCANCEL,127,94,50,16
|
PUSHBUTTON "&Cancel",IDCANCEL,127,94,50,16
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_3DSETTINGS DIALOGEX 0, 0, 190, 252
|
IDD_3DSETTINGS DIALOGEX 0, 0, 390, 205
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "3D settings"
|
CAPTION "3D settings"
|
||||||
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "OK",IDOK,83,234,50,14
|
|
||||||
PUSHBUTTON "Cancel",IDCANCEL,137,234,50,14
|
|
||||||
PUSHBUTTON "Default",IDC_DEFAULT,2,234,50,14
|
|
||||||
GROUPBOX "Renderer:",IDC_STATIC,7,7,174,39
|
|
||||||
COMBOBOX IDC_3DCORE,15,23,153,138,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_3DCORE,15,23,153,138,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
CONTROL "Unrealistically High-Precision Color Interpolation",IDC_INTERPOLATECOLOR,
|
CONTROL "Unrealistically High-Precision Color Interpolation",IDC_INTERPOLATECOLOR,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,64,165,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,62,165,10
|
||||||
GROUPBOX "SoftRasterizer Options",IDC_STATIC,7,52,176,114
|
CONTROL "Enable Edge Marking",IDC_3DSETTINGS_EDGEMARK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,74,84,10
|
||||||
CONTROL "Enable Edge Marking",IDC_3DSETTINGS_EDGEMARK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,76,84,10
|
CONTROL "Enable Fog",IDC_3DSETTINGS_FOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,86,52,10
|
||||||
CONTROL "Enable Fog",IDC_3DSETTINGS_FOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,88,52,10
|
CONTROL "Enable Textures",IDC_3DSETTINGS_TEXTURE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,98,67,10
|
||||||
CONTROL "Enable Textures",IDC_3DSETTINGS_TEXTURE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,100,67,10
|
LTEXT "Depth Comparison Threshold : \n -0=normal behavior (recommended) \n -bigger value can help Zelda PH/ST shadow issue",ID_LABEL_ZELDA_SHADOW_DEPTH_HACK,15,111,165,35
|
||||||
LTEXT "Depth Comparison Threshold : \n -0=normal behavior (recommended) \n -bigger value can help Zelda PH/ST shadow issue",ID_LABEL_ZELDA_SHADOW_DEPTH_HACK,15,113,165,35
|
EDITTEXT IDC_ZELDA_SHADOW_DEPTH_HACK,113,106,44,12
|
||||||
EDITTEXT IDC_ZELDA_SHADOW_DEPTH_HACK,109,109,44,12
|
|
||||||
LTEXT "Fixes some graphical bugs involving lines, but causes some other bugs. Not many games use lines.",ID_LABEL_ZELDA_SHADOW_DEPTH_HACK2,17,182,170,19
|
|
||||||
CONTROL "Enable Line Hack",IDC_3DSETTINGS_LINEHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,170,73,10
|
|
||||||
LTEXT "Fixes text bugs in some games.(e.g. Etrian Odyssey)",ID_LABEL_TXTHACK1,15,153,165,11
|
|
||||||
CONTROL "Enable TXT Hack",IDC_TXTHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,141,73,10
|
|
||||||
LTEXT "Reduces jagged edges on 3D objects. Only works in OpenGL renderer.",IDC_3DSETTINGS_ANTIALIASING1,17,211,169,19
|
|
||||||
CONTROL "Enable Anti-Aliasing",IDC_3DSETTINGS_ANTIALIASING,
|
CONTROL "Enable Anti-Aliasing",IDC_3DSETTINGS_ANTIALIASING,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,201,78,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,178,78,10
|
||||||
|
EDITTEXT IDC_TEXT_PRESCALEHD,245,61,20,14,ES_AUTOHSCROLL
|
||||||
|
CONTROL "",IDC_NUD_PRESCALEHD,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS,264,61,11,14
|
||||||
|
PUSHBUTTON "Default",IDC_DEFAULT,204,187,50,14
|
||||||
|
DEFPUSHBUTTON "OK",IDOK,284,187,50,14
|
||||||
|
PUSHBUTTON "Cancel",IDCANCEL,340,187,50,14
|
||||||
|
GROUPBOX "Renderer:",IDC_STATIC,7,7,174,39
|
||||||
|
GROUPBOX "SoftRasterizer Options",IDC_STATIC,7,50,176,114
|
||||||
|
LTEXT "Fixes some graphical bugs involving lines, but causes some other bugs. Not many games use lines.",ID_LABEL_ZELDA_SHADOW_DEPTH_HACK2,197,31,160,24
|
||||||
|
CONTROL "Enable Line Hack",IDC_3DSETTINGS_LINEHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,193,19,73,10
|
||||||
|
LTEXT "Fixes text bugs in some games.(e.g. Etrian Odyssey)",ID_LABEL_TXTHACK1,15,151,165,11
|
||||||
|
CONTROL "Enable TXT Hack",IDC_TXTHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,138,73,10
|
||||||
|
GROUPBOX "OpenGL Renderer Options",IDC_STATIC,7,166,176,33
|
||||||
|
GROUPBOX "General Options",IDC_STATIC,189,6,176,114
|
||||||
|
LTEXT "HD Prescaling:",IDC_STATIC,195,64,48,8
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_ABOUT_BOX DIALOGEX 0, 0, 268, 198
|
IDD_ABOUT_BOX DIALOGEX 0, 0, 268, 198
|
||||||
|
@ -880,7 +882,7 @@ BEGIN
|
||||||
LTEXT "frames",IDC_STATIC,92,154,16,8
|
LTEXT "frames",IDC_STATIC,92,154,16,8
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_PROMPT DIALOG 0, 0, 186, 68
|
IDD_PROMPT DIALOG 0, 0, 186, 68
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Input Prompt"
|
CAPTION "Input Prompt"
|
||||||
FONT 8, "Ms Shell Dlg 2"
|
FONT 8, "Ms Shell Dlg 2"
|
||||||
|
@ -1831,7 +1833,7 @@ BEGIN
|
||||||
|
|
||||||
IDD_3DSETTINGS, DIALOG
|
IDD_3DSETTINGS, DIALOG
|
||||||
BEGIN
|
BEGIN
|
||||||
BOTTOMMARGIN, 248
|
BOTTOMMARGIN, 201
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_CHEAT_ADD, DIALOG
|
IDD_CHEAT_ADD, DIALOG
|
||||||
|
@ -2186,7 +2188,7 @@ BEGIN
|
||||||
ID_LABEL_HK3d "Decrease JIT block size"
|
ID_LABEL_HK3d "Decrease JIT block size"
|
||||||
END
|
END
|
||||||
|
|
||||||
#endif // English (U.S.) resources
|
#endif // English (United States) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "filter/filter.h"
|
#include "filter/filter.h"
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
class VideoInfo
|
class VideoInfo
|
||||||
{
|
{
|
||||||
|
@ -32,10 +33,31 @@ public:
|
||||||
int swap;
|
int swap;
|
||||||
|
|
||||||
int currentfilter;
|
int currentfilter;
|
||||||
|
int prescaleHD;
|
||||||
|
int prescalePost; //not supported yet
|
||||||
|
int prescaleTotal;
|
||||||
|
|
||||||
u8* srcBuffer;
|
u8* srcBuffer;
|
||||||
CACHE_ALIGN u32 buffer[5*5*256*192*2];
|
int srcBufferSize;
|
||||||
CACHE_ALIGN u32 filteredbuffer[5*5*256*192*2];
|
u32 *buffer;
|
||||||
|
u32 *filteredbuffer;
|
||||||
|
|
||||||
|
void SetPrescale(int prescaleHD, int prescalePost)
|
||||||
|
{
|
||||||
|
this->prescaleHD = prescaleHD;
|
||||||
|
this->prescalePost = prescalePost;
|
||||||
|
|
||||||
|
prescaleTotal = prescaleHD;
|
||||||
|
|
||||||
|
const int kInflationFactor = 5*5; //the largest filter is going up 5x in each dimension
|
||||||
|
int bufferSize = kInflationFactor * 256*192*2*prescaleHD * 4;
|
||||||
|
|
||||||
|
//why are these the same size, anyway?
|
||||||
|
buffer = (u32*)malloc_alignedCacheLine(bufferSize);
|
||||||
|
filteredbuffer = (u32*)malloc_alignedCacheLine(bufferSize);
|
||||||
|
|
||||||
|
setfilter(currentfilter);
|
||||||
|
}
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
NONE,
|
NONE,
|
||||||
|
@ -75,6 +97,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset() {
|
void reset() {
|
||||||
|
SetPrescale(1,1); //should i do this here?
|
||||||
width = 256;
|
width = 256;
|
||||||
height = 384;
|
height = 384;
|
||||||
}
|
}
|
||||||
|
@ -103,18 +126,18 @@ public:
|
||||||
case _5XBRZ:
|
case _5XBRZ:
|
||||||
width = 256*5;
|
width = 256*5;
|
||||||
height = 384*5;
|
height = 384*5;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HQ4X:
|
case HQ4X:
|
||||||
case _4XBRZ:
|
case _4XBRZ:
|
||||||
width = 256*4;
|
width = 256*4;
|
||||||
height = 384*4;
|
height = 384*4;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case _3XBRZ:
|
case _3XBRZ:
|
||||||
width = 256*3;
|
width = 256*3;
|
||||||
height = 384*3;
|
height = 384*3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case _2XBRZ:
|
case _2XBRZ:
|
||||||
default:
|
default:
|
||||||
|
@ -122,6 +145,9 @@ public:
|
||||||
height = 384*2;
|
height = 384*2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
width *= prescaleHD;
|
||||||
|
height *= prescaleHD;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSurface src;
|
SSurface src;
|
||||||
|
@ -136,9 +162,9 @@ public:
|
||||||
|
|
||||||
void filter() {
|
void filter() {
|
||||||
|
|
||||||
src.Height = 384;
|
src.Height = 384 * prescaleHD;
|
||||||
src.Width = 256;
|
src.Width = 256 * prescaleHD;
|
||||||
src.Pitch = 512;
|
src.Pitch = src.Width * 2;
|
||||||
src.Surface = (u8*)buffer;
|
src.Surface = (u8*)buffer;
|
||||||
|
|
||||||
dst.Height = height;
|
dst.Height = height;
|
||||||
|
@ -285,6 +311,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
int scaledscreengap() {
|
int scaledscreengap() {
|
||||||
return screengap * height / 384;
|
return screengap * height / (384 * prescaleHD);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue