Add a menubar option to change the backend.

It restarts without warning.
Also, disable software rendering when switching, similar to the command-line.
Fix some spacing and tab issues in the resource files.
This commit is contained in:
The Dax 2014-09-14 07:30:49 -04:00
parent 436f39d3f6
commit 24c75c96be
5 changed files with 81 additions and 40 deletions

View File

@ -117,7 +117,7 @@ void GameSettingsScreen::CreateViews() {
graphicsSettings->Add(new ItemHeader(gs->T("Rendering Mode")));
#if defined(_WIN32)
static const char *renderingBackend[] = { "OpenGL", "DirectX" };
static const char *renderingBackend[] = { "OpenGL", "Direct3D9" };
PopupMultiChoice *renderingBackendChoice = graphicsSettings->Add(new PopupMultiChoice(&g_Config.iTempGPUBackend, gs->T("Backend"), renderingBackend, GPU_BACKEND_OPENGL, ARRAY_SIZE(renderingBackend), gs, screenManager()));
renderingBackendChoice->OnChoice.Handle(this, &GameSettingsScreen::OnRenderingBackend);
#endif

View File

@ -465,11 +465,12 @@ namespace MainWindow
SUBMENU_CUSTOM_SHADERS = 10,
SUBMENU_RENDERING_RESOLUTION = 11,
SUBMENU_WINDOW_SIZE = 12,
SUBMENU_RENDERING_MODE = 13,
SUBMENU_FRAME_SKIPPING = 14,
SUBMENU_TEXTURE_FILTERING = 15,
SUBMENU_BUFFER_FILTER = 16,
SUBMENU_TEXTURE_SCALING = 17,
SUBMENU_RENDERING_BACKEND = 13,
SUBMENU_RENDERING_MODE = 14,
SUBMENU_FRAME_SKIPPING = 15,
SUBMENU_TEXTURE_FILTERING = 16,
SUBMENU_BUFFER_FILTER = 17,
SUBMENU_TEXTURE_SCALING = 18,
};
std::string GetMenuItemText(int menuID) {
@ -649,6 +650,9 @@ namespace MainWindow
// Skip rendering resolution 2x-5x..
TranslateSubMenu("Window Size", MENU_OPTIONS, SUBMENU_WINDOW_SIZE);
// Skip window size 1x-4x..
TranslateSubMenu("Backend", MENU_OPTIONS, SUBMENU_RENDERING_BACKEND);
TranslateMenuItem(ID_OPTIONS_DIRECTX);
TranslateMenuItem(ID_OPTIONS_OPENGL);
TranslateSubMenu("Rendering Mode", MENU_OPTIONS, SUBMENU_RENDERING_MODE, L"\tF5");
TranslateMenuItem(ID_OPTIONS_NONBUFFEREDRENDERING);
TranslateMenuItem(ID_OPTIONS_BUFFEREDRENDERING);
@ -1356,6 +1360,18 @@ namespace MainWindow
NativeMessageReceived("gpu clear cache", "");
break;
case ID_OPTIONS_DIRECTX:
g_Config.iTempGPUBackend = GPU_BACKEND_DIRECT3D9;
g_Config.bRestartRequired = true;
PostMessage(MainWindow::GetHWND(), WM_CLOSE, 0, 0);
break;
case ID_OPTIONS_OPENGL:
g_Config.iTempGPUBackend = GPU_BACKEND_OPENGL;
g_Config.bRestartRequired = true;
PostMessage(MainWindow::GetHWND(), WM_CLOSE, 0, 0);
break;
case ID_OPTIONS_NONBUFFEREDRENDERING: setRenderingMode(FB_NON_BUFFERED_MODE); break;
case ID_OPTIONS_BUFFEREDRENDERING: setRenderingMode(FB_BUFFERED_MODE); break;
case ID_OPTIONS_READFBOTOMEMORYCPU: setRenderingMode(FB_READFBOMEMORY_CPU); break;
@ -1925,6 +1941,17 @@ namespace MainWindow
CheckMenuItem(menu, savestateSlot[i], MF_BYCOMMAND | (( i == g_Config.iCurrentStateSlot )? MF_CHECKED : MF_UNCHECKED));
}
if (g_Config.iGPUBackend == GPU_BACKEND_DIRECT3D9) {
EnableMenuItem(menu, ID_OPTIONS_DIRECTX, MF_GRAYED);
CheckMenuItem(menu, ID_OPTIONS_DIRECTX, MF_CHECKED);
EnableMenuItem(menu, ID_OPTIONS_OPENGL, MF_ENABLED);
} else {
EnableMenuItem(menu, ID_OPTIONS_OPENGL, MF_GRAYED);
CheckMenuItem(menu, ID_OPTIONS_OPENGL, MF_CHECKED);
EnableMenuItem(menu, ID_OPTIONS_DIRECTX, MF_ENABLED);
}
UpdateDynamicMenuCheckmarks();
UpdateCommands();
}

View File

@ -592,9 +592,13 @@ int WINAPI WinMain(HINSTANCE _hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLin
// Is there a safer place to do this?
// Doing this in Config::Save requires knowing if the UI state is UISTATE_EXIT,
// but that causes UnitTest to fail linking with 400 errors if System.h is included..
if (g_Config.iTempGPUBackend != g_Config.iGPUBackend)
if (g_Config.iTempGPUBackend != g_Config.iGPUBackend) {
g_Config.iGPUBackend = g_Config.iTempGPUBackend;
// For now, turn off software rendering too, similar to the command-line.
g_Config.bSoftwareRendering = false;
}
g_Config.Save();
LogManager::Shutdown();

View File

@ -469,39 +469,47 @@ BEGIN
MENUITEM "&3x", ID_OPTIONS_WINDOW3X
MENUITEM "&4x", ID_OPTIONS_WINDOW4X
END
POPUP "Rendering Mode"
BEGIN
MENUITEM "Non-Buffered Rendering", ID_OPTIONS_NONBUFFEREDRENDERING
MENUITEM "Buffered Rendering", ID_OPTIONS_BUFFEREDRENDERING
MENUITEM "Read Framebuffers To Memory (CPU)", ID_OPTIONS_READFBOTOMEMORYCPU
MENUITEM "Read Framebuffers To Memory (GPU)", ID_OPTIONS_READFBOTOMEMORYGPU
END
POPUP "Frame Skipping"
BEGIN
MENUITEM "Auto", ID_OPTIONS_FRAMESKIP_AUTO
MENUITEM SEPARATOR
MENUITEM "Off", ID_OPTIONS_FRAMESKIP_0
MENUITEM "&1", ID_OPTIONS_FRAMESKIP_1
MENUITEM "&2", ID_OPTIONS_FRAMESKIP_2
MENUITEM "&3", ID_OPTIONS_FRAMESKIP_3
MENUITEM "&4", ID_OPTIONS_FRAMESKIP_4
MENUITEM "&5", ID_OPTIONS_FRAMESKIP_5
MENUITEM "&6", ID_OPTIONS_FRAMESKIP_6
MENUITEM "&7", ID_OPTIONS_FRAMESKIP_7
MENUITEM "&8", ID_OPTIONS_FRAMESKIP_8
END
POPUP "Texture Filtering"
BEGIN
MENUITEM "Auto", ID_OPTIONS_TEXTUREFILTERING_AUTO
MENUITEM "Nearest", ID_OPTIONS_NEARESTFILTERING
MENUITEM "Linear", ID_OPTIONS_LINEARFILTERING
MENUITEM "Linear on FMV", ID_OPTIONS_LINEARFILTERING_CG
END
POPUP "Screen Scaling Filter"
BEGIN
MENUITEM "Linear", ID_OPTIONS_BUFLINEARFILTER
MENUITEM "Nearest", ID_OPTIONS_BUFNEARESTFILTER
END
POPUP "Backend"
BEGIN
MENUITEM "Direct3D9" ID_OPTIONS_DIRECTX
MENUITEM "OpenGL" ID_OPTIONS_OPENGL
END
POPUP "Rendering Mode"
BEGIN
MENUITEM "Non-Buffered Rendering", ID_OPTIONS_NONBUFFEREDRENDERING
MENUITEM "Buffered Rendering", ID_OPTIONS_BUFFEREDRENDERING
MENUITEM "Read Framebuffers To Memory (CPU)", ID_OPTIONS_READFBOTOMEMORYCPU
MENUITEM "Read Framebuffers To Memory (GPU)", ID_OPTIONS_READFBOTOMEMORYGPU
END
POPUP "Frame Skipping"
BEGIN
MENUITEM "Auto", ID_OPTIONS_FRAMESKIP_AUTO
MENUITEM SEPARATOR
MENUITEM "Off", ID_OPTIONS_FRAMESKIP_0
MENUITEM "&1", ID_OPTIONS_FRAMESKIP_1
MENUITEM "&2", ID_OPTIONS_FRAMESKIP_2
MENUITEM "&3", ID_OPTIONS_FRAMESKIP_3
MENUITEM "&4", ID_OPTIONS_FRAMESKIP_4
MENUITEM "&5", ID_OPTIONS_FRAMESKIP_5
MENUITEM "&6", ID_OPTIONS_FRAMESKIP_6
MENUITEM "&7", ID_OPTIONS_FRAMESKIP_7
MENUITEM "&8", ID_OPTIONS_FRAMESKIP_8
END
POPUP "Texture Filtering"
BEGIN
MENUITEM "Auto", ID_OPTIONS_TEXTUREFILTERING_AUTO
MENUITEM "Nearest", ID_OPTIONS_NEARESTFILTERING
MENUITEM "Linear", ID_OPTIONS_LINEARFILTERING
MENUITEM "Linear on FMV", ID_OPTIONS_LINEARFILTERING_CG
END
POPUP "Screen Scaling Filter"
BEGIN
MENUITEM "Linear", ID_OPTIONS_BUFLINEARFILTER
MENUITEM "Nearest", ID_OPTIONS_BUFNEARESTFILTER
END
POPUP "Texture Scaling"
BEGIN
MENUITEM "Off", ID_TEXTURESCALING_OFF

View File

@ -315,6 +315,8 @@
#define ID_DEBUG_SAVESYMFILE 40151
#define ID_OPTIONS_BUFLINEARFILTER 40152
#define ID_OPTIONS_BUFNEARESTFILTER 40153
#define ID_OPTIONS_DIRECTX 40154
#define ID_OPTIONS_OPENGL 40155
// Dummy option to let the buffered rendering hotkey cycle through all the options.
#define ID_OPTIONS_BUFFEREDRENDERINGDUMMY 40500