diff --git a/360/media/hd/rarch_settings.xui b/360/media/hd/rarch_settings.xui
index b99273e9df..351e530561 100644
--- a/360/media/hd/rarch_settings.xui
+++ b/360/media/hd/rarch_settings.xui
@@ -37,7 +37,8 @@ Shader #1:
Shader #2:
Hardware filtering shader #1:
Hardware filtering shader #2:
-Custom Scaling/Dual Shaders
+Custom Scaling/Dual Shaders:
+Custom Scaling Factor:
@@ -184,6 +185,18 @@ Custom Scaling/Dual Shaders
0.000000,10.000000,0.000000
+
+
+control_ListItem
+226.000000
+45.000000
+7.000000,22.000000,0.000000
+5
+false
+XuiButton
+0.000000,10.000000,0.000000
+
+
diff --git a/360/media/sd/rarch_settings.xui b/360/media/sd/rarch_settings.xui
index bc08dcc532..e04bd092bf 100644
--- a/360/media/sd/rarch_settings.xui
+++ b/360/media/sd/rarch_settings.xui
@@ -38,6 +38,7 @@ Shader #2:
Hardware filtering shader #1:
Hardware filtering shader #2:
Cutom Scaling/Dual Shaders:
+Cutom Scaling Factor:
@@ -160,6 +161,18 @@ Cutom Scaling/Dual Shaders:
0.000000,10.000000,0.000000
+
+
+control_ListItem
+226.000000
+45.000000
+7.000000,22.000000,0.000000
+5
+false
+XuiButton
+0.000000,10.000000,0.000000
+
+
diff --git a/360/menu.cpp b/360/menu.cpp
index 711da74bc0..9d939438db 100644
--- a/360/menu.cpp
+++ b/360/menu.cpp
@@ -230,24 +230,83 @@ HRESULT CRetroArchControls::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled
HRESULT CRetroArchSettings::OnInit(XUIMessageInit * pInitData, BOOL& bHandled)
{
- char shader1str[128], shader2str[128];
+ char shader1str[128], shader2str[128], scalefactor[128];
GetChildById(L"XuiSettingsList", &m_settingslist);
GetChildById(L"XuiBackButton", &m_back);
+ snprintf(shader1str, sizeof(shader1str), "Shader #1: %s", g_settings.video.cg_shader_path);
+ snprintf(shader2str, sizeof(shader2str), "Shader #2: %s", g_settings.video.second_pass_shader);
+ snprintf(scalefactor, sizeof(scalefactor), "Scale Factor: %f (X) / %f (Y)", g_settings.video.fbo_scale_x, g_settings.video.fbo_scale_y);
+
m_settingslist.SetText(SETTING_EMU_REWIND_ENABLED, g_settings.rewind_enable ? L"Rewind: ON" : L"Rewind: OFF");
m_settingslist.SetText(SETTING_GAMMA_CORRECTION_ENABLED, g_console.gamma_correction_enable ? L"Gamma correction: ON" : L"Gamma correction: OFF");
m_settingslist.SetText(SETTING_HW_TEXTURE_FILTER, g_settings.video.smooth ? L"Hardware filtering shader #1: Linear interpolation" : L"Hardware filtering shader #1: Point filtering");
m_settingslist.SetText(SETTING_HW_TEXTURE_FILTER_2, g_settings.video.second_pass_smooth ? L"Hardware filtering shader #2: Linear interpolation" : L"Hardware filtering shader #2: Point filtering");
m_settingslist.SetText(SETTING_SCALE_ENABLED, g_console.fbo_enabled ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF");
- snprintf(shader1str, sizeof(shader1str), "Shader #1: %s", g_settings.video.cg_shader_path);
- snprintf(shader2str, sizeof(shader2str), "Shader #2: %s", g_settings.video.second_pass_shader);
m_settingslist.SetText(SETTING_SHADER, rarch_convert_char_to_wchar(shader1str));
m_settingslist.SetText(SETTING_COLOR_FORMAT, g_console.color_format ? L"Color format: 32bit ARGB" : L"Color format: 16bit RGBA");
m_settingslist.SetText(SETTING_SHADER_2, rarch_convert_char_to_wchar(shader2str));
+ m_settingslist.SetText(SETTING_SCALE_FACTOR, rarch_convert_char_to_wchar(scalefactor));
return S_OK;
}
+HRESULT CRetroArchSettings::OnControlNavigate(XUIMessageControlNavigate *pControlNavigateData, BOOL& bHandled)
+{
+ char scalefactor[128];
+ int current_index;
+ xdk360_video_t *vid = (xdk360_video_t*)g_d3d;
+
+ current_index = m_settingslist.GetCurSel();
+
+ switch(pControlNavigateData->nControlNavigate)
+ {
+ case XUI_CONTROL_NAVIGATE_LEFT:
+ switch(current_index)
+ {
+ case SETTING_SCALE_FACTOR:
+ if(vid->fbo_enabled)
+ {
+ if((g_settings.video.fbo_scale_x > MIN_SCALING_FACTOR))
+ {
+ g_settings.video.fbo_scale_x -= 1.0f;
+ g_settings.video.fbo_scale_y -= 1.0f;
+ //xdk360_gfx_init_fbo(vid);
+ snprintf(scalefactor, sizeof(scalefactor), "Scale Factor: %f (X) / %f (Y)", g_settings.video.fbo_scale_x, g_settings.video.fbo_scale_y);
+ m_settingslist.SetText(SETTING_SCALE_FACTOR, rarch_convert_char_to_wchar(scalefactor));
+ }
+ }
+ default:
+ break;
+ }
+ break;
+ case XUI_CONTROL_NAVIGATE_RIGHT:
+ switch(current_index)
+ {
+ case SETTING_SCALE_FACTOR:
+ if(vid->fbo_enabled)
+ {
+ if((g_settings.video.fbo_scale_x < MAX_SCALING_FACTOR))
+ {
+ g_settings.video.fbo_scale_x += 1.0f;
+ g_settings.video.fbo_scale_y += 1.0f;
+ //xdk360_gfx_init_fbo(vid);
+ snprintf(scalefactor, sizeof(scalefactor), "Scale Factor: %f (X) / %f (Y)", g_settings.video.fbo_scale_x, g_settings.video.fbo_scale_y);
+ m_settingslist.SetText(SETTING_SCALE_FACTOR, rarch_convert_char_to_wchar(scalefactor));
+ }
+ }
+ default:
+ break;
+ }
+ break;
+ case XUI_CONTROL_NAVIGATE_UP:
+ case XUI_CONTROL_NAVIGATE_DOWN:
+ break;
+ }
+
+ return S_OK;
+}
+
HRESULT CRetroArchQuickMenu::OnInit(XUIMessageInit * pInitData, BOOL& bHandled)
{
GetChildById(L"XuiQuickMenuList", &m_quickmenulist);
diff --git a/360/menu.h b/360/menu.h
index feaa272a30..fed2d54ca8 100644
--- a/360/menu.h
+++ b/360/menu.h
@@ -29,7 +29,8 @@ enum
SETTING_SHADER_2,
SETTING_HW_TEXTURE_FILTER,
SETTING_HW_TEXTURE_FILTER_2,
- SETTING_SCALE_ENABLED
+ SETTING_SCALE_ENABLED,
+ SETTING_SCALE_FACTOR
};
enum
@@ -180,9 +181,11 @@ protected:
public:
HRESULT OnInit( XUIMessageInit* pInitData, int & bHandled );
HRESULT OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled );
+ HRESULT OnControlNavigate(XUIMessageControlNavigate *pControlNavigateData, BOOL& bHandled);
XUI_BEGIN_MSG_MAP()
XUI_ON_XM_INIT( OnInit)
+ XUI_ON_XM_CONTROL_NAVIGATE( OnControlNavigate )
XUI_ON_XM_NOTIFY_PRESS( OnNotifyPress )
XUI_END_MSG_MAP();
diff --git a/360/xdk360_video.cpp b/360/xdk360_video.cpp
index 47cc3e0c5a..60490793c9 100644
--- a/360/xdk360_video.cpp
+++ b/360/xdk360_video.cpp
@@ -395,7 +395,7 @@ void xdk360_set_fbo_enable (bool enable)
vid->fbo_enabled = enable;
}
-static void xdk360_gfx_init_fbo(xdk360_video_t *vid)
+void xdk360_gfx_init_fbo(xdk360_video_t *vid)
{
if (vid->lpTexture_ot)
{
diff --git a/360/xdk360_video.h b/360/xdk360_video.h
index 6e661c1d04..c94e62fe61 100644
--- a/360/xdk360_video.h
+++ b/360/xdk360_video.h
@@ -24,6 +24,9 @@
#define DFONT_MAX 4096
#define PRIM_FVF (D3DFVF_XYZRHW | D3DFVF_TEX1)
+#define MIN_SCALING_FACTOR (1.0f)
+#define MAX_SCALING_FACTOR (2.0f)
+
typedef struct
{
float x;
@@ -63,6 +66,7 @@ void xdk360_video_init (void);
void xdk360_video_deinit (void);
void xdk360_video_set_vsync (bool vsync);
void xdk360_set_fbo_enable (bool enable);
+void xdk360_gfx_init_fbo(xdk360_video_t *vid);
void set_viewport(bool force_full);
extern void *g_d3d;