diff --git a/console/rgui/rgui.c b/console/rgui/rgui.c index 408c0a27b2..06f4296b42 100644 --- a/console/rgui/rgui.c +++ b/console/rgui/rgui.c @@ -319,6 +319,13 @@ static void render_text(rgui_handle_t *rgui) case RGUI_SETTINGS_VIDEO_FILTER: snprintf(type_str, sizeof(type_str), g_settings.video.smooth ? "Bilinear filtering" : "Point filtering"); break; + case RGUI_SETTINGS_VIDEO_ROTATION: + { + char rotate_msg[64]; + rarch_settings_create_menu_item_label(rotate_msg, S_LBL_ROTATION, sizeof(rotate_msg)); + snprintf(type_str, sizeof(type_str), rotate_msg); + } + break; case RGUI_SETTINGS_AUDIO_MUTE: snprintf(type_str, sizeof(type_str), g_extern.audio_data.mute ? "ON" : "OFF"); break; @@ -382,6 +389,29 @@ static void rgui_settings_toggle_setting(rgui_file_type_t setting, rgui_action_t else rarch_settings_change(S_HW_TEXTURE_FILTER); break; + case RGUI_SETTINGS_VIDEO_ROTATION: + if (action == RGUI_ACTION_START) + { + rarch_settings_default(S_DEF_AUDIO_CONTROL_RATE); +#ifdef GEKKO + video_wii.set_rotation(NULL, g_console.screen_orientation); +#endif + } + else if (action == RGUI_ACTION_LEFT) + { + rarch_settings_change(S_ROTATION_DECREMENT); +#ifdef GEKKO + video_wii.set_rotation(NULL, g_console.screen_orientation); +#endif + } + else if (action == RGUI_ACTION_RIGHT) + { + rarch_settings_change(S_ROTATION_INCREMENT); +#ifdef GEKKO + video_wii.set_rotation(NULL, g_console.screen_orientation); +#endif + } + break; case RGUI_SETTINGS_AUDIO_MUTE: if (action == RGUI_ACTION_START) rarch_settings_default(S_DEF_AUDIO_MUTE); @@ -470,6 +500,7 @@ static void rgui_settings_populate_entries(rgui_handle_t *rgui) rgui_list_clear(rgui->folder_buf); RGUI_MENU_ITEM("Hardware filtering", RGUI_SETTINGS_VIDEO_FILTER); + RGUI_MENU_ITEM("Rotation", RGUI_SETTINGS_VIDEO_ROTATION); RGUI_MENU_ITEM("Mute Audio", RGUI_SETTINGS_AUDIO_MUTE); RGUI_MENU_ITEM("Audio Control Rate", RGUI_SETTINGS_AUDIO_CONTROL_RATE); RGUI_MENU_ITEM("Core", RGUI_SETTINGS_CORE); diff --git a/console/rgui/rgui.h b/console/rgui/rgui.h index c1875f0a6d..0f7a895300 100644 --- a/console/rgui/rgui.h +++ b/console/rgui/rgui.h @@ -34,6 +34,7 @@ typedef enum // settings options are done here too RGUI_SETTINGS_VIDEO_FILTER, + RGUI_SETTINGS_VIDEO_ROTATION, RGUI_SETTINGS_AUDIO_MUTE, RGUI_SETTINGS_AUDIO_CONTROL_RATE, RGUI_SETTINGS_CORE, diff --git a/gx/gx_video.c b/gx/gx_video.c index 6d491f2abe..968fa32a64 100644 --- a/gx/gx_video.c +++ b/gx/gx_video.c @@ -61,27 +61,29 @@ float tex_coords[8] ATTRIBUTE_ALIGN(32) = { 1, 0, }; -float vertexes_90[8] ATTRIBUTE_ALIGN(32) = { +float tex_coords_90[8] ATTRIBUTE_ALIGN(32) = { 0, 1, 1, 1, 1, 0, 0, 0 }; -float vertexes_180[8] ATTRIBUTE_ALIGN(32) = { +float tex_coords_180[8] ATTRIBUTE_ALIGN(32) = { 1, 1, 1, 0, 0, 0, 0, 1 }; -float vertexes_270[8] ATTRIBUTE_ALIGN(32) = { +float tex_coords_270[8] ATTRIBUTE_ALIGN(32) = { 1, 0, 0, 0, 0, 1, 1, 1 }; +float *vertex_ptr = tex_coords; + static void retrace_callback(u32 retrace_count) { (void)retrace_count; @@ -138,7 +140,7 @@ static void init_vtx(GXRModeObj *mode) GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GX_SetArray(GX_VA_POS, verts, 3 * sizeof(float)); - GX_SetArray(GX_VA_TEX0, tex_coords, 2 * sizeof(float)); + GX_SetArray(GX_VA_TEX0, vertex_ptr, 2 * sizeof(float)); GX_SetNumTexGens(1); GX_SetNumChans(0); @@ -485,7 +487,23 @@ static void wii_set_rotation(void * data, uint32_t orientation) (void)data; (void)orientation; - /* TODO */ + switch(orientation) + { + case ORIENTATION_NORMAL: + vertex_ptr = tex_coords; + break; + case ORIENTATION_VERTICAL: + vertex_ptr = tex_coords_90; + break; + case ORIENTATION_FLIPPED: + vertex_ptr = tex_coords_180; + break; + case ORIENTATION_FLIPPED_ROTATED: + vertex_ptr = tex_coords_270; + break; + } + + GX_SetArray(GX_VA_TEX0, vertex_ptr, 2 * sizeof(float)); } const video_driver_t video_wii = { diff --git a/xbox1/xdk_d3d8.cpp b/xbox1/xdk_d3d8.cpp index 0836d4f4a3..da8ae2b10a 100644 --- a/xbox1/xdk_d3d8.cpp +++ b/xbox1/xdk_d3d8.cpp @@ -153,19 +153,15 @@ static void xdk_d3d_set_rotation(void * data, unsigned orientation) { case ORIENTATION_NORMAL: angle = M_PI * 0 / 180; - RARCH_LOG("D3D8: Set rotation to ORIENTATION_NORMAL\n"); break; case ORIENTATION_VERTICAL: angle = M_PI * 270 / 180; - RARCH_LOG("D3D8: Set rotation to ORIENTATION_VERTICAL\n"); break; case ORIENTATION_FLIPPED: angle = M_PI * 180 / 180; - RARCH_LOG("D3D8: Set rotation to ORIENTATION_FLIPPED\n"); break; case ORIENTATION_FLIPPED_ROTATED: angle = M_PI * 90 / 180; - RARCH_LOG("D3D8: Set rotation to ORIENTATION_FLIPPED_ROTATED\n"); break; } }