diff --git a/360/menu.cpp b/360/menu.cpp index 603862c3fa..b5ac655153 100644 --- a/360/menu.cpp +++ b/360/menu.cpp @@ -206,7 +206,7 @@ HRESULT CSSNESQuickMenu::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) else g_console.aspect_ratio_index = 0; - xdk360_set_aspect_ratio(g_console.aspect_ratio_index); + video_xdk360.set_aspect_ratio(NULL, g_console.aspect_ratio_index); char aspectratio_label[32]; sprintf(aspectratio_label, "Aspect Ratio: %s", g_console.aspect_ratio_name); unsigned long dwNum = MultiByteToWideChar(CP_ACP, 0, aspectratio_label, -1, NULL, 0); diff --git a/360/xdk360_video.cpp b/360/xdk360_video.cpp index d1428c1714..9633d5ae32 100644 --- a/360/xdk360_video.cpp +++ b/360/xdk360_video.cpp @@ -21,6 +21,7 @@ #include "../driver.h" #include "xdk360_video.h" #include "xdk360_video_resources.h" +#include "../console/console_ext.h" #include "../general.h" #include "../message.h" #include "shared.h" @@ -301,18 +302,39 @@ static void xdk360_set_orientation(void * data, uint32_t orientation) hlsl_program.modelViewProj = XMMatrixRotationZ(angle); } -void xdk360_set_aspect_ratio(uint32_t aspectratio_index) +static void xdk360_set_aspect_ratio(void * data, uint32_t aspectratio_index) { + (void)data; switch(aspectratio_index) { case ASPECT_RATIO_4_3: g_settings.video.aspect_ratio = 1.33333333333; strlcpy(g_console.aspect_ratio_name, "4:3", sizeof(g_console.aspect_ratio_name)); break; + case ASPECT_RATIO_4_4: + g_settings.video.aspect_ratio = 1.0; + strlcpy(g_console.aspect_ratio_name, "4:4", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_4_1: + g_settings.video.aspect_ratio = 4.0; + strlcpy(g_console.aspect_ratio_name, "4:1", sizeof(g_console.aspect_ratio_name)); + break; case ASPECT_RATIO_5_4: g_settings.video.aspect_ratio = 1.25; strlcpy(g_console.aspect_ratio_name, "5:4", sizeof(g_console.aspect_ratio_name)); break; + case ASPECT_RATIO_6_5: + g_settings.video.aspect_ratio = 1.2; + strlcpy(g_console.aspect_ratio_name, "6:5", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_7_9: + g_settings.video.aspect_ratio = 0.77777777777; + strlcpy(g_console.aspect_ratio_name, "7:9", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_8_3: + g_settings.video.aspect_ratio = 2.66666666666; + strlcpy(g_console.aspect_ratio_name, "8:3", sizeof(g_console.aspect_ratio_name)); + break; case ASPECT_RATIO_8_7: g_settings.video.aspect_ratio = 1.14287142857; strlcpy(g_console.aspect_ratio_name, "8:7", sizeof(g_console.aspect_ratio_name)); @@ -329,10 +351,22 @@ void xdk360_set_aspect_ratio(uint32_t aspectratio_index) g_settings.video.aspect_ratio = 3.2; strlcpy(g_console.aspect_ratio_name, "16:15", sizeof(g_console.aspect_ratio_name)); break; + case ASPECT_RATIO_19_12: + g_settings.video.aspect_ratio = 1.58333333333; + strlcpy(g_console.aspect_ratio_name, "19:12", sizeof(g_console.aspect_ratio_name)); + break; case ASPECT_RATIO_19_14: - g_settings.video.aspect_ratio = 1.36; + g_settings.video.aspect_ratio = 1.35714285714; strlcpy(g_console.aspect_ratio_name, "19:14", sizeof(g_console.aspect_ratio_name)); break; + case ASPECT_RATIO_30_17: + g_settings.video.aspect_ratio = 1.76470588235; + strlcpy(g_console.aspect_ratio_name, "30:17", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_32_9: + g_settings.video.aspect_ratio = 3.55555555555; + strlcpy(g_console.aspect_ratio_name, "32:9", sizeof(g_console.aspect_ratio_name)); + break; case ASPECT_RATIO_2_1: g_settings.video.aspect_ratio = 2.0; strlcpy(g_console.aspect_ratio_name, "2:1", sizeof(g_console.aspect_ratio_name)); @@ -342,7 +376,7 @@ void xdk360_set_aspect_ratio(uint32_t aspectratio_index) strlcpy(g_console.aspect_ratio_name, "3:2", sizeof(g_console.aspect_ratio_name)); break; case ASPECT_RATIO_3_4: - g_settings.video.aspect_ratio = 1.5; + g_settings.video.aspect_ratio = 0.75; strlcpy(g_console.aspect_ratio_name, "3:4", sizeof(g_console.aspect_ratio_name)); break; case ASPECT_RATIO_1_1: @@ -676,5 +710,6 @@ const video_driver_t video_xdk360 = { "xdk360", xdk360_set_swap_block_swap, xdk360_swap, - xdk360_set_orientation -}; \ No newline at end of file + xdk360_set_orientation, + xdk360_set_aspect_ratio +}; diff --git a/360/xdk360_video.h b/360/xdk360_video.h index 5ce3db5e9e..60d3b0d3fa 100644 --- a/360/xdk360_video.h +++ b/360/xdk360_video.h @@ -23,17 +23,18 @@ #include "fonts.h" #include "xdk360_video_general.h" -typedef struct { - float x; - float y; - float z; - float rhw; - float u; - float v; -} primitive_t; - #define DFONT_MAX 4096 -#define PRIM_FVF (D3DFVF_XYZRHW | D3DFVF_TEX1) +#define PRIM_FVF (D3DFVF_XYZRHW | D3DFVF_TEX1) + +typedef struct +{ + float x; + float y; + float z; + float rhw; + float u; + float v; +} primitive_t; typedef struct DrawVerticeFormats { @@ -43,9 +44,10 @@ typedef struct DrawVerticeFormats typedef struct xdk360_video { - bool block_swap; - bool vsync; - unsigned last_width, last_height; + bool block_swap; + bool vsync; + unsigned last_width; + unsigned last_height; IDirect3D9* xdk360_device; IDirect3DDevice9* xdk360_render_device; IDirect3DVertexShader9 *pVertexShader; @@ -57,27 +59,9 @@ typedef struct xdk360_video XVIDEO_MODE video_mode; } xdk360_video_t; -enum -{ - ASPECT_RATIO_4_3, - ASPECT_RATIO_5_4, - ASPECT_RATIO_8_7, - ASPECT_RATIO_16_9, - ASPECT_RATIO_16_10, - ASPECT_RATIO_16_15, - ASPECT_RATIO_19_14, - ASPECT_RATIO_2_1, - ASPECT_RATIO_3_2, - ASPECT_RATIO_3_4, - ASPECT_RATIO_1_1, - ASPECT_RATIO_AUTO, - ASPECT_RATIO_CUSTOM -}; - void xdk360_video_init(void); void xdk360_video_deinit(void); void xdk360_video_set_vsync(bool vsync); -void xdk360_set_aspect_ratio(uint32_t aspectratio_index); extern void *g_d3d; diff --git a/console/console_ext.h b/console/console_ext.h index 3fedf3a95b..e65366239d 100644 --- a/console/console_ext.h +++ b/console/console_ext.h @@ -19,6 +19,33 @@ #ifndef ROM_EXT_H__ #define ROM_EXT_H__ +enum +{ + ASPECT_RATIO_4_3, + ASPECT_RATIO_4_4, + ASPECT_RATIO_4_1, + ASPECT_RATIO_5_4, + ASPECT_RATIO_6_5, + ASPECT_RATIO_7_9, + ASPECT_RATIO_8_3, + ASPECT_RATIO_8_7, + ASPECT_RATIO_16_9, + ASPECT_RATIO_16_10, + ASPECT_RATIO_16_15, + ASPECT_RATIO_19_12, + ASPECT_RATIO_19_14, + ASPECT_RATIO_30_17, + ASPECT_RATIO_32_9, + ASPECT_RATIO_2_1, + ASPECT_RATIO_3_2, + ASPECT_RATIO_3_4, + ASPECT_RATIO_1_1, + ASPECT_RATIO_AUTO, + ASPECT_RATIO_CUSTOM +}; + +#define LAST_ASPECT_RATIO ASPECT_RATIO_CUSTOM + #include "console_ext_input.h" /*============================================================ diff --git a/console/griffin/hook.h b/console/griffin/hook.h index 92ce2106f8..4e00018cf4 100644 --- a/console/griffin/hook.h +++ b/console/griffin/hook.h @@ -40,6 +40,7 @@ #define video_xml_shader_func(path) driver.video->xml_shader(driver.video_data, path) #define video_free_func() gl_free(driver.video_data) #define video_set_rotation_func(orientation) ps3graphics_set_orientation(driver.video_data, orientation) +#define video_set_aspect_ratio_func(aspectratio_idx) ps3graphics_set_aspect_ratio(driver.video_data, aspectratio_idx) #define input_init_func() ps3_input_initialize() #define input_poll_func() ps3_input_poll(driver.input_data) @@ -64,6 +65,7 @@ #define video_xml_shader_func(path) driver.video->xml_shader(driver.video_data, path) #define video_free_func() xdk360_gfx_free(driver.video_data) #define video_set_rotation_func(orientation) xdk360_set_orientation(driver.video_data, orientation) +#define video_set_aspect_ratio_func(aspectratio_idx) xdk360_set_aspect_ratio(driver.video_data, aspectratio_idx) #define input_init_func() xdk360_input_initialize() #define input_poll_func() xdk360_input_poll(driver.input_data) diff --git a/driver.h b/driver.h index f28f59058d..4bd0caaec9 100644 --- a/driver.h +++ b/driver.h @@ -157,6 +157,7 @@ typedef struct video_driver void (*swap)(void *data); // Explicitly swap buffers. Only useful when set_swap_block_state() is set to true. #endif void (*set_rotation)(void *data, unsigned rotation); + void (*set_aspect_ratio)(void *data, unsigned aspectratio_idx); } video_driver_t; typedef struct driver @@ -236,6 +237,7 @@ extern const input_driver_t input_xdk360; #define video_focus_func() driver.video->focus(driver.video_data) #define video_xml_shader_func(path) driver.video->xml_shader(driver.video_data, path) #define video_set_rotation_func(rotate) driver.video->set_rotation(driver.video_data, rotate) +#define video_set_aspect_ratio_func(aspect_idx) driver.video->set_aspect_ratio(driver.video_data, aspect_idx) #define video_free_func() driver.video->free(driver.video_data) #define input_init_func() driver.input->init() diff --git a/ps3/menu.c b/ps3/menu.c index a694514085..150855724a 100644 --- a/ps3/menu.c +++ b/ps3/menu.c @@ -1304,7 +1304,7 @@ static void producesettingentry(menu * menu_obj, uint64_t switchvalue) if(g_console.aspect_ratio_index > 0) { g_console.aspect_ratio_index--; - ps3graphics_set_aspect_ratio(g_console.aspect_ratio_index); + video_gl.set_aspect_ratio(NULL, g_console.aspect_ratio_index); set_delay = DELAY_SMALL; } } @@ -1313,14 +1313,14 @@ static void producesettingentry(menu * menu_obj, uint64_t switchvalue) if(g_console.aspect_ratio_index < LAST_ASPECT_RATIO) { g_console.aspect_ratio_index++; - ps3graphics_set_aspect_ratio(g_console.aspect_ratio_index); + video_gl.set_aspect_ratio(NULL, g_console.aspect_ratio_index); set_delay = DELAY_SMALL; } } if(CTRL_START(state)) { g_console.aspect_ratio_index = ASPECT_RATIO_4_3; - ps3graphics_set_aspect_ratio(g_console.aspect_ratio_index); + video_gl.set_aspect_ratio(NULL, g_console.aspect_ratio_index); } break; case SETTING_HW_TEXTURE_FILTER: @@ -2122,7 +2122,7 @@ static void ingame_menu(uint32_t menu_id) if(g_console.aspect_ratio_index > 0) { g_console.aspect_ratio_index--; - ps3graphics_set_aspect_ratio(g_console.aspect_ratio_index); + video_gl.set_aspect_ratio(NULL, g_console.aspect_ratio_index); set_delay = DELAY_LONG; } } @@ -2131,14 +2131,14 @@ static void ingame_menu(uint32_t menu_id) if(g_console.aspect_ratio_index < LAST_ASPECT_RATIO) { g_console.aspect_ratio_index++; - ps3graphics_set_aspect_ratio(g_console.aspect_ratio_index); + video_gl.set_aspect_ratio(NULL, g_console.aspect_ratio_index); set_delay = DELAY_LONG; } } if(CTRL_START(state)) { g_console.aspect_ratio_index = ASPECT_RATIO_4_3; - ps3graphics_set_aspect_ratio(g_console.aspect_ratio_index); + video_gl.set_aspect_ratio(NULL, g_console.aspect_ratio_index); } strcpy(comment, "Press LEFT or RIGHT to change the [Aspect Ratio].\nPress START to reset back to default values."); break; @@ -2249,7 +2249,7 @@ static void ingame_menu(uint32_t menu_id) if(CTRL_CROSS(state)) { g_console.aspect_ratio_index = ASPECT_RATIO_CUSTOM; - ps3graphics_set_aspect_ratio(g_console.aspect_ratio_index); + video_gl.set_aspect_ratio(NULL, g_console.aspect_ratio_index); while(stuck_in_loop && g_console.ingame_menu_enable) { state = cell_pad_input_poll_device(0); diff --git a/ps3/ps3_video_psgl.c b/ps3/ps3_video_psgl.c index 0fec0aeb97..a3f7bf0d4e 100644 --- a/ps3/ps3_video_psgl.c +++ b/ps3/ps3_video_psgl.c @@ -2176,6 +2176,101 @@ static void ps3graphics_swap(void * data) cellSysutilCheckCallback(); } +static void ps3graphics_set_aspect_ratio(void * data, uint32_t aspectratio_index) +{ + (void)data; + gl_t * gl = g_gl; + + switch(aspectratio_index) + { + case ASPECT_RATIO_4_3: + g_settings.video.aspect_ratio = 1.33333333333; + strlcpy(g_console.aspect_ratio_name, "4:3", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_4_4: + g_settings.video.aspect_ratio = 1.0; + strlcpy(g_console.aspect_ratio_name, "4:4", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_4_1: + g_settings.video.aspect_ratio = 4.0; + strlcpy(g_console.aspect_ratio_name, "4:1", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_5_4: + g_settings.video.aspect_ratio = 1.25; + strlcpy(g_console.aspect_ratio_name, "5:4", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_6_5: + g_settings.video.aspect_ratio = 1.2; + strlcpy(g_console.aspect_ratio_name, "6:5", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_7_9: + g_settings.video.aspect_ratio = 0.77777777777; + strlcpy(g_console.aspect_ratio_name, "7:9", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_8_3: + g_settings.video.aspect_ratio = 2.66666666666; + strlcpy(g_console.aspect_ratio_name, "8:3", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_8_7: + g_settings.video.aspect_ratio = 1.14287142857; + strlcpy(g_console.aspect_ratio_name, "8:7", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_16_9: + g_settings.video.aspect_ratio = 1.777778; + strlcpy(g_console.aspect_ratio_name, "16:9", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_16_10: + g_settings.video.aspect_ratio = 1.6; + strlcpy(g_console.aspect_ratio_name, "16:10", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_16_15: + g_settings.video.aspect_ratio = 3.2; + strlcpy(g_console.aspect_ratio_name, "16:15", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_19_12: + g_settings.video.aspect_ratio = 1.58333333333; + strlcpy(g_console.aspect_ratio_name, "19:12", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_19_14: + g_settings.video.aspect_ratio = 1.35714285714; + strlcpy(g_console.aspect_ratio_name, "19:14", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_30_17: + g_settings.video.aspect_ratio = 1.76470588235; + strlcpy(g_console.aspect_ratio_name, "30:17", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_32_9: + g_settings.video.aspect_ratio = 3.55555555555; + strlcpy(g_console.aspect_ratio_name, "32:9", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_2_1: + g_settings.video.aspect_ratio = 2.0; + strlcpy(g_console.aspect_ratio_name, "2:1", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_3_2: + g_settings.video.aspect_ratio = 1.5; + strlcpy(g_console.aspect_ratio_name, "3:2", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_3_4: + g_settings.video.aspect_ratio = 0.75; + strlcpy(g_console.aspect_ratio_name, "3:4", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_1_1: + g_settings.video.aspect_ratio = 1.0; + strlcpy(g_console.aspect_ratio_name, "1:1", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_AUTO: + strlcpy(g_console.aspect_ratio_name, "(Auto)", sizeof(g_console.aspect_ratio_name)); + break; + case ASPECT_RATIO_CUSTOM: + strlcpy(g_console.aspect_ratio_name, "(Custom)", sizeof(g_console.aspect_ratio_name)); + break; + } + g_settings.video.force_aspect = false; + gl->keep_aspect = true; + set_viewport(gl, gl->win_width, gl->win_height, false); +} + const video_driver_t video_gl = { .init = gl_init, @@ -2187,6 +2282,7 @@ const video_driver_t video_gl = .ident = "gl", .set_swap_block_state = ps3graphics_set_swap_block_swap, .set_rotation = ps3graphics_set_orientation, + .set_aspect_ratio = ps3graphics_set_aspect_ratio, .swap = ps3graphics_swap }; @@ -2371,67 +2467,6 @@ void ps3graphics_set_overscan(bool overscan_enable, float amount, bool recalcula set_viewport(gl, gl->win_width, gl->win_height, false); } -void ps3graphics_set_aspect_ratio(uint32_t aspectratio_index) -{ - gl_t * gl = g_gl; - - switch(aspectratio_index) - { - case ASPECT_RATIO_4_3: - g_settings.video.aspect_ratio = 1.33333333333; - strlcpy(g_console.aspect_ratio_name, "4:3", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_5_4: - g_settings.video.aspect_ratio = 1.25; - strlcpy(g_console.aspect_ratio_name, "5:4", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_8_7: - g_settings.video.aspect_ratio = 1.14287142857; - strlcpy(g_console.aspect_ratio_name, "8:7", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_16_9: - g_settings.video.aspect_ratio = 1.777778; - strlcpy(g_console.aspect_ratio_name, "16:9", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_16_10: - g_settings.video.aspect_ratio = 1.6; - strlcpy(g_console.aspect_ratio_name, "16:10", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_16_15: - g_settings.video.aspect_ratio = 3.2; - strlcpy(g_console.aspect_ratio_name, "16:15", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_19_14: - g_settings.video.aspect_ratio = 1.35714285714; - strlcpy(g_console.aspect_ratio_name, "19:14", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_2_1: - g_settings.video.aspect_ratio = 2.0; - strlcpy(g_console.aspect_ratio_name, "2:1", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_3_2: - g_settings.video.aspect_ratio = 1.5; - strlcpy(g_console.aspect_ratio_name, "3:2", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_3_4: - g_settings.video.aspect_ratio = 1.5; - strlcpy(g_console.aspect_ratio_name, "3:4", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_1_1: - g_settings.video.aspect_ratio = 1.0; - strlcpy(g_console.aspect_ratio_name, "1:1", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_AUTO: - strlcpy(g_console.aspect_ratio_name, "(Auto)", sizeof(g_console.aspect_ratio_name)); - break; - case ASPECT_RATIO_CUSTOM: - strlcpy(g_console.aspect_ratio_name, "(Custom)", sizeof(g_console.aspect_ratio_name)); - break; - } - g_settings.video.force_aspect = false; - gl->keep_aspect = true; - set_viewport(gl, gl->win_width, gl->win_height, false); -} /* PS3 needs a working graphics stack before SSNES even starts. diff --git a/ps3/ps3_video_psgl.h b/ps3/ps3_video_psgl.h index 22d06c5e7b..5c48bbee15 100644 --- a/ps3/ps3_video_psgl.h +++ b/ps3/ps3_video_psgl.h @@ -22,6 +22,7 @@ #include "../gfx/gl_common.h" #include "../gfx/gfx_common.h" #include "../gfx/image.h" +#include "../console/console_ext.h" #include #define FBO_DEINIT 0 @@ -43,25 +44,6 @@ #define SSNES_CG_MAX_SHADERS 16 #define SSNES_CG_MENU_SHADER_INDEX (SSNES_CG_MAX_SHADERS - 1) -enum -{ - ASPECT_RATIO_4_3, - ASPECT_RATIO_5_4, - ASPECT_RATIO_8_7, - ASPECT_RATIO_16_9, - ASPECT_RATIO_16_10, - ASPECT_RATIO_16_15, - ASPECT_RATIO_19_14, - ASPECT_RATIO_2_1, - ASPECT_RATIO_3_2, - ASPECT_RATIO_3_4, - ASPECT_RATIO_1_1, - ASPECT_RATIO_AUTO, - ASPECT_RATIO_CUSTOM -}; - -#define LAST_ASPECT_RATIO ASPECT_RATIO_CUSTOM - typedef struct gl { bool block_swap; @@ -133,7 +115,6 @@ void ps3_next_resolution (void); void ps3_set_filtering(unsigned index, bool set_smooth); void ps3_video_deinit(void); void ps3graphics_reinit_fbos (void); -void ps3graphics_set_aspect_ratio(uint32_t aspectratio_index); void ps3graphics_set_overscan(bool overscan_enable, float amount, bool recalculate_viewport); void ps3graphics_set_vsync(uint32_t vsync); void ps3graphics_video_init(bool get_all_resolutions);