diff --git a/360/menu.cpp b/360/menu.cpp index c7d1e80b34..debcc29afb 100644 --- a/360/menu.cpp +++ b/360/menu.cpp @@ -242,6 +242,7 @@ HRESULT CSSNESQuickMenu::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) g_console.force_resize_enable = true; break; } + xdk360_set_orientation(g_console.screen_orientation); break; case MENU_ITEM_RESIZE_MODE: break; diff --git a/360/xdk360_video.cpp b/360/xdk360_video.cpp index 78580dce4a..877c715e35 100644 --- a/360/xdk360_video.cpp +++ b/360/xdk360_video.cpp @@ -121,6 +121,31 @@ static void set_viewport(bool force_full) //} } +void xdk360_set_orientation(uint32_t orientation) +{ + xdk360_video_t *vid = (xdk360_video_t*)g_d3d; + + XMMATRIX matWorld; + FLOAT angle; + + switch(orientation) + { + case ORIENTATION_NORMAL: + angle = M_PI * 0 / 180; + break; + case ORIENTATION_VERTICAL: + angle = M_PI * 90 / 180; + break; + case ORIENTATION_FLIPPED: + angle = M_PI * 180 / 180; + break; + case ORIENTATION_FLIPPED_ROTATED: + angle = M_PI * 270 / 180; + break; + } + vid->modelViewProj = XMMatrixRotationZ(angle); +} + void xdk360_set_aspect_ratio(uint32_t aspectratio_index) { switch(aspectratio_index) @@ -319,11 +344,7 @@ static void *xdk360_gfx_init(const video_info_t *video, const input_driver_t **i vp.MaxZ = 1.0f; D3DDevice_SetViewport(vid->xdk360_render_device, &vp); - // World matrix - XMMATRIX matWorld = XMMatrixIdentity(); - - // World*view*projection - vid->modelViewProj = matWorld; + vid->modelViewProj = XMMatrixIdentity(); return vid; } @@ -348,56 +369,6 @@ static bool xdk360_gfx_frame(void *data, const void *frame, float tex_w = width / 512.0f; float tex_h = height / 512.0f; - //normal - const DrawVerticeFormats vertexes_normal[] = { - { -1.0f, -1.0f, 0.0f, tex_h }, - { 1.0f, -1.0f, tex_w, tex_h }, - { -1.0f, 1.0f, 0.0f, 0.0f }, - { 1.0f, 1.0f, tex_w, 0.0f }, - }; - - //vertical - const DrawVerticeFormats vertexes_vertical[] = { - { 1.0f, -1.0f, tex_w, 0.0f }, - { 1.0f, 1.0f, 0.0f, 0.0f }, - { -1.0f, -1.0f, tex_w, tex_h }, - { -1.0f, 1.0f, 0.0f, tex_h }, - }; - - //flipped - const DrawVerticeFormats vertexes_flipped[] = { - { -1.0f, 1.0f, 0.0f, tex_h }, - { 1.0f, 1.0f, tex_w, tex_h }, - { -1.0f, -1.0f, 0.0f, 0.0f }, - { 1.0f, -1.0f, tex_w, 0.0f }, - }; - - // flipped vertical - const DrawVerticeFormats vertexes_flipped_vertical[] = { - { -1.0f, -1.0f, 0.0f, 0.0f }, - { -1.0f, 1.0f, tex_w, 0.0f }, - { 1.0f, -1.0f, 0.0f, tex_h }, - { 1.0f, 1.0f, tex_w, tex_h }, - }; - - void *verts_ptr = (BYTE*)D3DVertexBuffer_Lock(vid->vertex_buf, 0, 0, 0); - switch(g_console.screen_orientation) - { - case ORIENTATION_NORMAL: - memcpy(verts_ptr, vertexes_normal, sizeof(vertexes_normal)); - break; - case ORIENTATION_VERTICAL: - memcpy(verts_ptr, vertexes_vertical, sizeof(vertexes_vertical)); - break; - case ORIENTATION_FLIPPED: - memcpy(verts_ptr, vertexes_flipped, sizeof(vertexes_flipped)); - break; - case ORIENTATION_FLIPPED_ROTATED: - memcpy(verts_ptr, vertexes_flipped_vertical, sizeof(vertexes_flipped_vertical)); - break; - } - D3DVertexBuffer_Unlock(vid->vertex_buf); - vid->last_width = width; vid->last_height = height; g_console.force_resize_enable = false; diff --git a/360/xdk360_video.h b/360/xdk360_video.h index 53cc3b22fb..bce415757c 100644 --- a/360/xdk360_video.h +++ b/360/xdk360_video.h @@ -86,6 +86,7 @@ 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); +void xdk360_set_orientation(uint32_t orientation); extern unsigned g_frame_count; extern void *g_d3d;