diff --git a/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj b/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj
index 7611069458..e70054f62a 100644
--- a/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj
+++ b/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj
@@ -710,6 +710,14 @@
RelativePath=".\Src\Render.cpp"
>
+
+
+
+
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp b/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp
index 3a7c827478..2bba1b3a94 100644
--- a/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp
+++ b/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp
@@ -20,6 +20,7 @@
#include "Render.h"
#include "XFStructs.h"
#include "StringUtil.h"
+#include "Render3dVision.h"
// D3DX
HINSTANCE hD3DXDll = NULL;
@@ -139,7 +140,7 @@ void InitPP(int adapter, int f, int aa_mode, D3DPRESENT_PARAMETERS *pp)
yres = pp->BackBufferHeight = client.bottom - client.top;
pp->SwapEffect = D3DSWAPEFFECT_DISCARD;
pp->PresentationInterval = g_Config.bVSync ? D3DPRESENT_INTERVAL_DEFAULT : D3DPRESENT_INTERVAL_IMMEDIATE;
- pp->Windowed = TRUE;
+ pp->Windowed = !Render3dVision::isEnable3dVision();
}
void Enumerate()
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.cpp b/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.cpp
index 68f0766f32..99c06cb439 100644
--- a/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.cpp
+++ b/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.cpp
@@ -31,6 +31,7 @@
#include "VideoConfig.h"
#include "TextureCache.h"
+#include "Render3dVision.h"
BEGIN_EVENT_TABLE(GFXConfigDialogDX,wxDialog)
@@ -56,10 +57,10 @@ BEGIN_EVENT_TABLE(GFXConfigDialogDX,wxDialog)
EVT_CHECKBOX(ID_LOADHIRESTEXTURES, GFXConfigDialogDX::EnhancementsSettingsChanged)
EVT_CHECKBOX(ID_EFBSCALEDCOPY, GFXConfigDialogDX::EnhancementsSettingsChanged)
EVT_CHECKBOX(ID_PIXELLIGHTING, GFXConfigDialogDX::EnhancementsSettingsChanged)
+ EVT_CHECKBOX(ID_ENABLE_3DVISION, GFXConfigDialogDX::AdvancedSettingsChanged)
EVT_CHECKBOX(ID_ANAGLYPH, GFXConfigDialogDX::EnhancementsSettingsChanged)
EVT_SLIDER(ID_ANAGLYPHSEPARATION, GFXConfigDialogDX::EnhancementsSettingsChanged)
EVT_SLIDER(ID_ANAGLYPHFOCALANGLE, GFXConfigDialogDX::EnhancementsSettingsChanged)
-
//Advanced Tab
EVT_CHECKBOX(ID_DISABLEFOG, GFXConfigDialogDX::AdvancedSettingsChanged)
@@ -153,6 +154,7 @@ void GFXConfigDialogDX::InitializeGUIValues()
m_EnableXFB->SetValue(g_Config.bUseXFB);
m_EnableRealXFB->SetValue(g_Config.bUseRealXFB);
m_UseNativeMips->SetValue(g_Config.bUseNativeMips);
+ m_Enable3dVision->SetValue(Render3dVision::isEnable3dVision());
m_DumpTextures->SetValue(g_Config.bDumpTextures);
m_DumpFrames->SetValue(g_Config.bDumpFrames);
@@ -269,14 +271,15 @@ void GFXConfigDialogDX::CreateGUIControls()
wxStaticBoxSizer* sbTextureFilter;
sbTextureFilter = new wxStaticBoxSizer( new wxStaticBox( m_PageEnhancements, wxID_ANY, wxT("Texture filtering") ), wxVERTICAL );
m_ForceFiltering = new wxCheckBox( m_PageEnhancements, ID_FORCEFILTERING, wxT("Force bi/trilinear filtering (breaks video in several Wii games)"), wxDefaultPosition, wxDefaultSize, 0 );
- m_MaxAnisotropy = new wxCheckBox( m_PageEnhancements, ID_FORCEANISOTROPY, wxT("Enable 16x anisotropic filtering"), wxDefaultPosition, wxDefaultSize, 0 );
- m_HiresTextures = new wxCheckBox( m_PageEnhancements, ID_LOADHIRESTEXTURES, wxT("Enable hires texture loading"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_MaxAnisotropy = new wxCheckBox( m_PageEnhancements, ID_FORCEANISOTROPY, wxT("16x anisotropic filtering"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_HiresTextures = new wxCheckBox( m_PageEnhancements, ID_LOADHIRESTEXTURES, wxT("Hires texture loading"), wxDefaultPosition, wxDefaultSize, 0 );
wxStaticBoxSizer* sbEFBHacks;
sbEFBHacks = new wxStaticBoxSizer( new wxStaticBox( m_PageEnhancements, wxID_ANY, wxT("EFB hacks") ), wxVERTICAL );
m_EFBScaledCopy = new wxCheckBox( m_PageEnhancements, ID_EFBSCALEDCOPY, wxT("EFB scaled copy"), wxDefaultPosition, wxDefaultSize, 0 );
- m_Anaglyph = new wxCheckBox( m_PageEnhancements, ID_ANAGLYPH, wxT("Enable Anaglyph Stereo"), wxDefaultPosition, wxDefaultSize, 0 );
- m_PixelLighting = new wxCheckBox( m_PageEnhancements, ID_PIXELLIGHTING, wxT("Enable Pixel Lighting"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_Enable3dVision = new wxCheckBox( m_PageEnhancements, ID_ENABLE_3DVISION, wxT("NVIDIA 3D Vision support (Note: fullscreen must be enabled)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_PixelLighting = new wxCheckBox( m_PageEnhancements, ID_PIXELLIGHTING, wxT("Pixel Lighting"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_Anaglyph = new wxCheckBox( m_PageEnhancements, ID_ANAGLYPH, wxT("Anaglyph Stereo"), wxDefaultPosition, wxDefaultSize, 0 );
m_AnaglyphSeparation = new wxSlider( m_PageEnhancements, ID_ANAGLYPHSEPARATION,2000,1,10000, wxDefaultPosition, wxDefaultSize, wxHORIZONTAL,wxDefaultValidator, wxT("Stereo separation") );
m_AnaglyphFocalAngle = new wxSlider( m_PageEnhancements, ID_ANAGLYPHFOCALANGLE,0,-1000,1000, wxDefaultPosition, wxDefaultSize, wxHORIZONTAL,wxDefaultValidator, wxT("Stereo Focal Angle") );
m_AnaglyphSeparationText = new wxStaticText( m_PageEnhancements, wxID_ANY, wxT("Stereo Separation:"), wxDefaultPosition, wxDefaultSize, 0 );
@@ -309,12 +312,13 @@ void GFXConfigDialogDX::CreateGUIControls()
sImprovements = new wxGridBagSizer( 0, 0 );
sImprovements->SetFlexibleDirection( wxBOTH );
sImprovements->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
- sImprovements->Add( m_Anaglyph, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
- sImprovements->Add( m_AnaglyphSeparationText, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
- sImprovements->Add( m_AnaglyphFocalAngleText, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
- sImprovements->Add( m_AnaglyphSeparation, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
- sImprovements->Add( m_AnaglyphFocalAngle, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
- sImprovements->Add( m_PixelLighting, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
+ sImprovements->Add( m_Enable3dVision, wxGBPosition( 0, 0 ), wxGBSpan( 1, 2 ), wxALL, 5 );
+ sImprovements->Add( m_Anaglyph, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
+ sImprovements->Add( m_AnaglyphSeparationText, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
+ sImprovements->Add( m_AnaglyphFocalAngleText, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
+ sImprovements->Add( m_AnaglyphSeparation, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
+ sImprovements->Add( m_AnaglyphFocalAngle, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
+ sImprovements->Add( m_PixelLighting, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
sbImprovements->Add( sImprovements, 1, wxEXPAND, 5 );
sEnhancements->Add( sbImprovements, 0, wxEXPAND|wxALL, 5 );
@@ -549,6 +553,9 @@ void GFXConfigDialogDX::AdvancedSettingsChanged(wxCommandEvent& event)
case ID_TEXFMT_CENTER:
g_Config.bTexFmtOverlayCenter = m_TexfmtCenter->IsChecked();
break;
+ case ID_ENABLE_3DVISION:
+ Render3dVision::setEnable3dVision(m_Enable3dVision->IsChecked());
+ break;
}
UpdateGUI();
}
@@ -557,6 +564,7 @@ void GFXConfigDialogDX::CloseWindow()
{
// Save the config to INI
g_Config.Save((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_dx9.ini").c_str());
+ Render3dVision::saveConfig((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_dx9.ini").c_str());
EndModal(1);
}
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.h b/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.h
index 064f883636..0e5946e9de 100644
--- a/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.h
+++ b/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.h
@@ -130,6 +130,7 @@ class GFXConfigDialogDX : public wxDialog
wxCheckBox *m_ShaderErrors;
wxCheckBox *m_TexfmtOverlay;
wxCheckBox *m_TexfmtCenter;
+ wxCheckBox *m_Enable3dVision;
enum
{
@@ -183,6 +184,7 @@ class GFXConfigDialogDX : public wxDialog
ID_ANAGLYPH,
ID_ANAGLYPHSEPARATION,
ID_ANAGLYPHFOCALANGLE,
+ ID_ENABLE_3DVISION,
};
void InitializeAdapters();
void OnClose(wxCloseEvent& event);
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/EmuWindow.cpp b/Source/Plugins/Plugin_VideoDX9/Src/EmuWindow.cpp
index 7aac6ddc9e..2a72ecaeb6 100644
--- a/Source/Plugins/Plugin_VideoDX9/Src/EmuWindow.cpp
+++ b/Source/Plugins/Plugin_VideoDX9/Src/EmuWindow.cpp
@@ -22,6 +22,7 @@
#include "EmuWindow.h"
#include "D3DBase.h"
#include "Fifo.h"
+#include "Render3dVision.h"
int OSDChoice = 0 , OSDTime = 0, OSDInternalW = 0, OSDInternalH = 0;
@@ -197,7 +198,7 @@ HWND OpenWindow(HWND parent, HINSTANCE hInstance, int width, int height, const T
m_hParent = parent;
- m_hWnd = CreateWindow(m_szClassName, title, WS_CHILD,
+ m_hWnd = CreateWindow(m_szClassName, title, Render3dVision::isEnable3dVision() ? WS_EX_TOPMOST | WS_POPUP : WS_CHILD,
0, 0, width, height, m_hParent, NULL, hInstance, NULL);
return m_hWnd;
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp
index 91052cecf1..423a5da99b 100644
--- a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp
+++ b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp
@@ -52,6 +52,8 @@
#include "debugger/debugger.h"
+#include "Render3dVision.h"
+
static int s_fps = 0;
static bool WindowResized;
@@ -1319,8 +1321,17 @@ void Renderer::Swap(u32 xfbAddr, FieldType field, u32 fbWidth, u32 fbHeight,cons
}
else
{
- xScale = (float)(dst_rect.right - dst_rect.left) / (float)s_XFB_width;
- yScale = (float)(dst_rect.bottom - dst_rect.top) / (float)s_XFB_height;
+ if(Render3dVision::isEnable3dVision())
+ {
+ // This works, yet the version in the else doesn't. No idea why.
+ xScale = (float)s_backbuffer_width / (float)s_XFB_width;
+ yScale = (float)s_backbuffer_height / (float)s_XFB_height;
+ }
+ else
+ {
+ xScale = (float)(dst_rect.right - dst_rect.left) / (float)s_XFB_width;
+ yScale = (float)(dst_rect.bottom - dst_rect.top) / (float)s_XFB_height;
+ }
}
float SupersampleCoeficient = s_LastAA + 1;
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Render3dVision.cpp b/Source/Plugins/Plugin_VideoDX9/Src/Render3dVision.cpp
new file mode 100644
index 0000000000..92f9c3a26a
--- /dev/null
+++ b/Source/Plugins/Plugin_VideoDX9/Src/Render3dVision.cpp
@@ -0,0 +1,49 @@
+// Copyright (C) 2003 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+#include "Render3dVision.h"
+#include "IniFile.h"
+
+bool Render3dVision::enable3dVision = false;
+
+bool Render3dVision::isEnable3dVision()
+{
+ return enable3dVision;
+}
+
+void Render3dVision::setEnable3dVision(bool value)
+{
+ enable3dVision = value;
+}
+
+void Render3dVision::loadConfig(const char* filename)
+{
+ IniFile iniFile;
+ iniFile.Load(filename);
+
+ iniFile.Get("Settings", "Enable3dVision", &enable3dVision, false);
+}
+
+void Render3dVision::saveConfig(const char* filename)
+{
+ IniFile iniFile;
+ iniFile.Load(filename);
+
+ iniFile.Set("Settings", "Enable3dVision", enable3dVision);
+
+ iniFile.Save(filename);
+}
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Render3dVision.h b/Source/Plugins/Plugin_VideoDX9/Src/Render3dVision.h
new file mode 100644
index 0000000000..6e279f410b
--- /dev/null
+++ b/Source/Plugins/Plugin_VideoDX9/Src/Render3dVision.h
@@ -0,0 +1,51 @@
+// Copyright (C) 2003 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+#ifndef _RENDER3DVISION_H
+#define _RENDER3DVISION_H
+
+#include "CommonTypes.h"
+#include "VideoCommon.h"
+
+//3d vision pipline functions and variables.
+//This class provides services needed to run 3d vision.
+//It could be replaced by putting the config settings in the
+//VideoSettings class, but this way the dx9 plugin can stay portable
+//with no reliance on Core being updated. This can be modified if
+//these changes are added to the trunk.
+class Render3dVision
+{
+private:
+ static bool enable3dVision;
+
+public:
+ //Check to see if 3d vision compatable rendering should be used.
+ static bool isEnable3dVision();
+
+ //Set 3d vision enabled or disabled, used by the config dialog.
+ static void setEnable3dVision(bool value);
+
+ //Lod the specified config file and get enable3dVision out of it.
+ static void loadConfig(const char* filename);
+
+ //Save the enable3dVision variable to the specified config file.
+ static void saveConfig(const char* filename);
+
+ static void Swap(u32 xfbAddr, FieldType field, u32 fbWidth, u32 fbHeight,const EFBRectangle& rc);
+};
+
+#endif
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/main.cpp b/Source/Plugins/Plugin_VideoDX9/Src/main.cpp
index b546072b65..452c9dbfec 100644
--- a/Source/Plugins/Plugin_VideoDX9/Src/main.cpp
+++ b/Source/Plugins/Plugin_VideoDX9/Src/main.cpp
@@ -53,6 +53,7 @@ GFXConfigDialogDX *m_ConfigFrame = NULL;
#include "XFBConvert.h"
#include "render.h"
#include "DLCache.h"
+#include "Render3dVision.h"
HINSTANCE g_hInstance = NULL;
SVideoInitialize g_VideoInitialize;
@@ -180,6 +181,7 @@ void DllConfig(void *_hParent)
g_Config.Load((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_dx9.ini").c_str());
g_Config.GameIniLoad(globals->game_ini);
UpdateActiveConfig();
+ Render3dVision::loadConfig((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_dx9.ini").c_str());
#if defined(HAVE_WX) && HAVE_WX
m_ConfigFrame = new GFXConfigDialogDX((wxWindow *)_hParent);
@@ -204,6 +206,8 @@ void Initialize(void *init)
UpdateProjectionHack(g_Config.iPhackvalue); // DX9 projection hack could be disabled by commenting out this line
UpdateActiveConfig();
+ Render3dVision::loadConfig((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_dx9.ini").c_str());
+
g_VideoInitialize.pWindowHandle = (void*)EmuWindow::Create((HWND)g_VideoInitialize.pWindowHandle, g_hInstance, _T("Loading - Please wait."));
if (g_VideoInitialize.pWindowHandle == NULL)
{