From 52f52bc253f639d1709ca46dfe81c3455034d324 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 19 Nov 2012 04:46:48 +0100 Subject: [PATCH] (360) Build fixes --- 360/frontend-xdk/menu.cpp | 60 +++++++-------- gfx/context/xdk_ctx.c | 157 +++++++++++++++++++------------------- gfx/gfx_context.h | 2 +- xdk/xdk_d3d.cpp | 12 +-- xdk/xdk_d3d.h | 2 +- 5 files changed, 115 insertions(+), 118 deletions(-) diff --git a/360/frontend-xdk/menu.cpp b/360/frontend-xdk/menu.cpp index 7271ccab4e..3c29c75f72 100644 --- a/360/frontend-xdk/menu.cpp +++ b/360/frontend-xdk/menu.cpp @@ -38,7 +38,6 @@ HXUIOBJ hCur; filebrowser_t browser; filebrowser_t tmp_browser; uint32_t set_shader = 0; -static const rmenu_context_t *context; wchar_t strw_buffer[PATH_MAX]; char str_buffer[PATH_MAX]; @@ -384,7 +383,7 @@ HRESULT CRetroArchSettings::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) m_settingslist.SetText(SETTING_GAMMA_CORRECTION_ENABLED, g_extern.console.screen.gamma_correction ? 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_settings.video.fbo.enable ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF"); + m_settingslist.SetText(SETTING_SCALE_ENABLED, g_settings.video.render_to_texture ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF"); rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_SHADER, sizeof(strw_buffer)); m_settingslist.SetText(SETTING_SHADER, strw_buffer); m_settingslist.SetText(SETTING_COLOR_FORMAT, g_settings.video.color_format ? L"Color format: 32bit ARGB" : L"Color format: 16bit RGBA"); @@ -400,6 +399,7 @@ HRESULT CRetroArchSettings::OnInit(XUIMessageInit * pInitData, BOOL& bHandled) HRESULT CRetroArchSettings::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) { + xdk_d3d_video_t *device_ptr = (xdk_d3d_video_t*)driver.video_data; int current_index; HRESULT hr; @@ -472,9 +472,9 @@ HRESULT CRetroArchSettings::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled 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"); break; case SETTING_SCALE_ENABLED: - g_settings.video.fbo.enable = !g_settings.video.fbo.enable; - m_settingslist.SetText(SETTING_SCALE_ENABLED, g_settings.video.fbo.enable ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF"); - context->set_fbo_enable(g_settings.video.fbo.enable); + g_settings.video.render_to_texture = !g_settings.video.render_to_texture; + m_settingslist.SetText(SETTING_SCALE_ENABLED, g_settings.video.render_to_texture ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF"); + device_ptr->ctx_driver->set_fbo(g_settings.video.render_to_texture); break; case SETTING_ZIP_EXTRACT: if(g_extern.file_state.zip_extract_mode < ZIP_EXTRACT_TO_CACHE_DIR) @@ -494,7 +494,7 @@ HRESULT CRetroArchSettings::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled HRESULT CRetroArchSettings::OnControlNavigate(XUIMessageControlNavigate *pControlNavigateData, BOOL& bHandled) { int current_index; - xdk_d3d_video_t *vid = (xdk_d3d_video_t*)driver.video_data; + xdk_d3d_video_t *device_ptr = (xdk_d3d_video_t*)driver.video_data; current_index = m_settingslist.GetCurSel(); @@ -531,7 +531,7 @@ HRESULT CRetroArchSettings::OnControlNavigate(XUIMessageControlNavigate *pContro rarch_settings_msg(S_MSG_RESTART_RARCH, S_DELAY_180); break; case SETTING_SCALE_FACTOR: - if(vid->fbo_enabled) + if(device_ptr->fbo_inited) { if((g_settings.video.fbo.scale_x > MIN_SCALING_FACTOR)) { @@ -557,9 +557,9 @@ HRESULT CRetroArchSettings::OnControlNavigate(XUIMessageControlNavigate *pContro 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"); break; case SETTING_SCALE_ENABLED: - g_settings.video.fbo.enable = !g_settings.video.fbo.enable; - m_settingslist.SetText(SETTING_SCALE_ENABLED, g_settings.video.fbo.enable ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF"); - context->set_fbo_enable(g_settings.video.fbo.enable); + g_settings.video.render_to_texture = !g_settings.video.render_to_texture; + m_settingslist.SetText(SETTING_SCALE_ENABLED, g_settings.video.render_to_texture ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF"); + device_ptr->ctx_driver->set_fbo(g_settings.video.render_to_texture); break; default: break; @@ -596,7 +596,7 @@ HRESULT CRetroArchSettings::OnControlNavigate(XUIMessageControlNavigate *pContro rarch_settings_msg(S_MSG_RESTART_RARCH, S_DELAY_180); break; case SETTING_SCALE_FACTOR: - if(vid->fbo_enabled) + if(device_ptr->fbo_inited) { if((g_settings.video.fbo.scale_x < MAX_SCALING_FACTOR)) { @@ -622,9 +622,9 @@ HRESULT CRetroArchSettings::OnControlNavigate(XUIMessageControlNavigate *pContro 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"); break; case SETTING_SCALE_ENABLED: - g_settings.video.fbo.enable = !g_settings.video.fbo.enable; - m_settingslist.SetText(SETTING_SCALE_ENABLED, g_settings.video.fbo.enable ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF"); - context->set_fbo_enable(g_settings.video.fbo.enable); + g_settings.video.render_to_texture = !g_settings.video.render_to_texture; + m_settingslist.SetText(SETTING_SCALE_ENABLED, g_settings.video.render_to_texture ? L"Custom Scaling/Dual Shaders: ON" : L"Custom Scaling/Dual Shaders: OFF"); + device_ptr->ctx_driver->set_fbo(g_settings.video.render_to_texture); break; default: break; @@ -739,7 +739,7 @@ HRESULT CRetroArchQuickMenu::OnControlNavigate(XUIMessageControlNavigate *pContr if(aspectratio_changed) { - context->set_aspect_ratio(g_settings.video.aspect_ratio_idx); + driver.video->set_aspect_ratio(driver.video_data, g_settings.video.aspect_ratio_idx); rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_ASPECT_RATIO, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_KEEP_ASPECT_RATIO, strw_buffer); } @@ -763,7 +763,7 @@ HRESULT CRetroArchQuickMenu::OnControlNavigate(XUIMessageControlNavigate *pContr HRESULT CRetroArchQuickMenu::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled ) { - xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; + xdk_d3d_video_t *device_ptr = (xdk_d3d_video_t*)driver.video_data; int current_index; if ( hObjPressed == m_quickmenulist) @@ -788,7 +788,7 @@ HRESULT CRetroArchQuickMenu::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled break; case MENU_ITEM_KEEP_ASPECT_RATIO: rarch_settings_default(S_DEF_ASPECT_RATIO); - context->set_aspect_ratio(g_settings.video.aspect_ratio_idx); + driver.video->set_aspect_ratio(driver.video_data, g_settings.video.aspect_ratio_idx); rarch_settings_create_menu_item_label_w(strw_buffer, S_LBL_ASPECT_RATIO, sizeof(strw_buffer)); m_quickmenulist.SetText(MENU_ITEM_KEEP_ASPECT_RATIO, strw_buffer); break; @@ -814,7 +814,7 @@ HRESULT CRetroArchQuickMenu::OnNotifyPress( HXUIOBJ hObjPressed, int & bHandled break; case MENU_ITEM_SCREENSHOT_MODE: if (g_extern.console.rmenu.state.msg_info.enable) - gfx_ctx_xdk_screenshot_dump(NULL); + device_ptr->ctx_driver->rmenu_screenshot_dump(NULL); break; case MENU_ITEM_RESET: if (g_extern.console.emulator_initialized) @@ -1042,13 +1042,11 @@ void menu_init (void) { HRESULT hr; - context = (rmenu_context_t*)&rmenu_ctx_xdk; - - xdk_d3d_video_t *vid = (xdk_d3d_video_t*)driver.video_data; + xdk_d3d_video_t *device_ptr = (xdk_d3d_video_t*)driver.video_data; bool hdmenus_allowed = g_extern.console.rmenu.state.rmenu_hd.enable; - hr = app.InitShared(vid->d3d_render_device, &vid->d3dpp, XuiPNGTextureLoader); + hr = app.InitShared(device_ptr->d3d_render_device, &device_ptr->d3dpp, XuiPNGTextureLoader); if (hr < 0) { @@ -1131,11 +1129,11 @@ static void ingame_menu_resize (void) void menu_loop(void) { HRESULT hr; - xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; + xdk_d3d_video_t *device_ptr = (xdk_d3d_video_t*)driver.video_data; g_extern.console.rmenu.state.rmenu.enable = true; - d3d->block_swap = true; + device_ptr->block_swap = true; g_extern.console.rmenu.input_loop = INPUT_LOOP_MENU; @@ -1145,8 +1143,8 @@ void menu_loop(void) rarch_render_cached_frame(); else { - d3d->d3d_render_device->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0, 0, 0, 0), 1.0f, 0); - d3d->frame_count++; + device_ptr->ctx_driver->clear(); + device_ptr->frame_count++; } XINPUT_STATE state; @@ -1154,7 +1152,7 @@ void menu_loop(void) g_extern.console.rmenu.state.rmenu.enable = !((state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB) && (state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) && (g_extern.console.emulator_initialized) - && IS_TIMER_EXPIRED(d3d)); + && IS_TIMER_EXPIRED(device_ptr)); g_extern.console.rmenu.mode = g_extern.console.rmenu.state.rmenu.enable ? MODE_MENU : MODE_EMULATION; @@ -1186,20 +1184,20 @@ void menu_loop(void) if(g_extern.console.rmenu.mode == MODE_EMULATION && !g_extern.console.screen.state.frame_advance.enable) { - SET_TIMER_EXPIRATION(d3d, 30); + SET_TIMER_EXPIRATION(device_ptr, 30); } const char *message = msg_queue_pull(g_extern.msg_queue); if (message) { - xdk_render_msg(d3d, message); + xdk_render_msg(device_ptr, message); } - context->swap_buffers(); + device_ptr->ctx_driver->swap_buffers(); }while(g_extern.console.rmenu.state.rmenu.enable); - d3d->block_swap = false; + device_ptr->block_swap = false; g_extern.console.rmenu.state.ingame_menu.enable = false; } diff --git a/gfx/context/xdk_ctx.c b/gfx/context/xdk_ctx.c index 5329f9bf54..c103207f69 100644 --- a/gfx/context/xdk_ctx.c +++ b/gfx/context/xdk_ctx.c @@ -82,8 +82,8 @@ texture_image m_menuMainRomSelectPanel; texture_image m_menuMainBG; // Rom list coords -int m_menuMainRomListPos_x; -int m_menuMainRomListPos_y; +unsigned m_menuMainRomListPos_x; +unsigned m_menuMainRomListPos_y; #endif bool rmenu_inited = false; @@ -131,6 +131,53 @@ static void gfx_ctx_xdk_check_window(bool *quit, static void gfx_ctx_xdk_set_resize(unsigned width, unsigned height) { } +static bool gfx_ctx_xdk_menu_init(void) +{ +#ifdef _XBOX1 + xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; + + int width = d3d->d3dpp.BackBufferWidth; + + // Load background image + if(width == 640) + { + texture_image_load("D:\\Media\\main-menu_480p.png", &m_menuMainBG); + m_menuMainRomListPos_x = 60; + m_menuMainRomListPos_y = 80; + } + else if(width == 1280) + { + texture_image_load("D:\\Media\\main-menu_720p.png", &m_menuMainBG); + m_menuMainRomListPos_x = 360; + m_menuMainRomListPos_y = 130; + } + + // Load rom selector panel + texture_image_load("D:\\Media\\menuMainRomSelectPanel.png", &m_menuMainRomSelectPanel); + + //Display some text + //Center the text (hardcoded) + xpos = width == 640 ? 65 : 400; + ypos = width == 640 ? 430 : 670; +#endif + + rmenu_inited = false; + return true; +} + +static void gfx_ctx_xdk_menu_frame(void* data) +{ + (void)data; +} + +static void gfx_ctx_xdk_menu_free(void) +{ +#ifdef _XBOX1 + texture_image_free(&m_menuMainBG); + texture_image_free(&m_menuMainRomSelectPanel); +#endif +} + static void gfx_ctx_menu_enable(bool enable) { if (enable) @@ -176,48 +223,6 @@ static bool gfx_ctx_xdk_window_has_focus(void) return true; } -static bool gfx_ctx_xdk_menu_init(void) -{ -#ifdef _XBOX1 - xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; - - int width = d3d->d3dpp.BackBufferWidth; - - // Load background image - if(width == 640) - { - texture_image_load("D:\\Media\\main-menu_480p.png", &m_menuMainBG); - m_menuMainRomListPos_x = 60; - m_menuMainRomListPos_y = 80; - } - else if(width == 1280) - { - texture_image_load("D:\\Media\\main-menu_720p.png", &m_menuMainBG); - m_menuMainRomListPos_x = 360; - m_menuMainRomListPos_y = 130; - } - - // Load rom selector panel - texture_image_load("D:\\Media\\menuMainRomSelectPanel.png", &m_menuMainRomSelectPanel); - - //Display some text - //Center the text (hardcoded) - xpos = width == 640 ? 65 : 400; - ypos = width == 640 ? 430 : 670; -#endif - - rmenu_inited = false; - return true; -} - -static void gfx_ctx_xdk_menu_free(void) -{ -#ifdef _XBOX1 - texture_image_free(&m_menuMainBG); - texture_image_free(&m_menuMainRomSelectPanel); -#endif -} - static void gfx_ctx_xdk_menu_draw_bg(rarch_position_t *position) { #ifdef _XBOX1 @@ -277,7 +282,29 @@ static void gfx_ctx_xdk_menu_screenshot_enable(bool enable) static void gfx_ctx_xdk_menu_screenshot_dump(void *data) { - gfx_ctx_xdk_screenshot_dump(NULL); + xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; + HRESULT ret = S_OK; + char filename[PATH_MAX]; + char shotname[PATH_MAX]; + + screenshot_generate_filename(shotname, sizeof(shotname)); + snprintf(filename, sizeof(filename), "%s\\%s", default_paths.screenshots_dir, shotname); + +#if defined(_XBOX1) + D3DSurface *surf = NULL; + d3d->d3d_render_device->GetBackBuffer(-1, D3DBACKBUFFER_TYPE_MONO, &surf); + ret = XGWriteSurfaceToFile(surf, filename); + surf->Release(); +#elif defined(_XBOX360) + ret = 1; //false + //ret = D3DXSaveTextureToFile(filename, D3DXIFF_BMP, d3d->lpTexture, NULL); +#endif + + if(ret == S_OK) + { + RARCH_LOG("Screenshot saved: %s.\n", filename); + msg_queue_push(g_extern.msg_queue, "Screenshot saved.", 1, 30); + } } static const char *gfx_ctx_xdk_menu_drive_mapping_previous(void) @@ -626,48 +653,18 @@ static void gfx_ctx_xdk_destroy(void) static void gfx_ctx_xdk_input_driver(const input_driver_t **input, void **input_data) { } -static void gfx_ctx_xdk_set_filtering(unsigned index, bool set_smooth) -{ - /* TODO: implement */ -} +static void gfx_ctx_xdk_set_filtering(unsigned index, bool set_smooth) { } -static void gfx_ctx_xdk_set_fbo(bool enable) +static void gfx_ctx_xdk_set_fbo(unsigned enable) { #ifdef HAVE_FBO /* TODO: implement properly */ - xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; + xdk_d3d_video_t *device_ptr = (xdk_d3d_video_t*)driver.video_data; - d3d->fbo_enabled = enable; + device_ptr->fbo_inited = enable; #endif } -void gfx_ctx_xdk_screenshot_dump(void *data) -{ - xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data; - HRESULT ret = S_OK; - char filename[PATH_MAX]; - char shotname[PATH_MAX]; - - screenshot_generate_filename(shotname, sizeof(shotname)); - snprintf(filename, sizeof(filename), "%s\\%s", default_paths.screenshots_dir, shotname); - -#if defined(_XBOX1) - D3DSurface *surf = NULL; - d3d->d3d_render_device->GetBackBuffer(-1, D3DBACKBUFFER_TYPE_MONO, &surf); - ret = XGWriteSurfaceToFile(surf, filename); - surf->Release(); -#elif defined(_XBOX360) - ret = 1; //false - //ret = D3DXSaveTextureToFile(filename, D3DXIFF_BMP, d3d->lpTexture, NULL); -#endif - - if(ret == S_OK) - { - RARCH_LOG("Screenshot saved: %s.\n", filename); - msg_queue_push(g_extern.msg_queue, "Screenshot saved.", 1, 30); - } -} - static bool gfx_ctx_xdk_bind_api(enum gfx_ctx_api api) { #if defined(_XBOX1) @@ -735,6 +732,7 @@ const gfx_ctx_driver_t gfx_ctx_xdk = { gfx_ctx_xdk_check_resolution, gfx_ctx_xdk_set_fbo, +#if defined(HAVE_RMENU) || defined(_XBOX360) gfx_ctx_xdk_menu_init, gfx_ctx_xdk_menu_frame, gfx_ctx_xdk_menu_free, @@ -747,4 +745,5 @@ const gfx_ctx_driver_t gfx_ctx_xdk = { gfx_ctx_xdk_menu_screenshot_dump, gfx_ctx_xdk_menu_drive_mapping_previous, gfx_ctx_xdk_menu_drive_mapping_next +#endif }; diff --git a/gfx/gfx_context.h b/gfx/gfx_context.h index a53d76338c..7870c22ad1 100644 --- a/gfx/gfx_context.h +++ b/gfx/gfx_context.h @@ -113,7 +113,7 @@ typedef struct gfx_ctx_driver void (*set_fbo)(unsigned); #endif -#ifdef HAVE_RMENU +#if defined(HAVE_RMENU) || defined(_XBOX360) bool (*rmenu_init)(void); void (*rmenu_frame)(void *data); void (*rmenu_free)(void); diff --git a/xdk/xdk_d3d.cpp b/xdk/xdk_d3d.cpp index 67405f4004..45a46344e5 100644 --- a/xdk/xdk_d3d.cpp +++ b/xdk/xdk_d3d.cpp @@ -321,7 +321,7 @@ static void xdk_d3d_init_fbo(xdk_d3d_video_t *d3d) d3d->lpTexture_ot_as16srgb = *d3d->lpTexture_ot; xdk_convert_texture_to_as16_srgb(d3d->lpTexture); xdk_convert_texture_to_as16_srgb(&d3d->lpTexture_ot_as16srgb); - d3d->fbo_enabled = 1; + d3d->fbo_inited = 1; } #endif @@ -343,9 +343,9 @@ static void *xdk_d3d_init(const video_info_t *video, const input_driver_t **inpu #if defined(_XBOX1) d3d->driver = gfx_ctx_init_first(GFX_CTX_DIRECT3D8_API); #elif defined(_XBOX360) - d3d->driver = gfx_ctx_init_first(GFX_CTX_DIRECT3D9_API); + d3d->ctx_driver = gfx_ctx_init_first(GFX_CTX_DIRECT3D9_API); #endif - if (!d3d->driver) + if (!d3d->ctx_driver) { free(d3d); return NULL; @@ -467,7 +467,7 @@ static bool xdk_d3d_frame(void *data, const void *frame, } #ifdef HAVE_FBO - if (d3d->fbo_enabled) + if (d3d->fbo_inited) { d3d->d3d_render_device->GetRenderTarget(0, &pRenderTarget0); d3d->d3d_render_device->SetRenderTarget(0, d3d->lpSurface); @@ -490,7 +490,7 @@ static bool xdk_d3d_frame(void *data, const void *frame, #endif #ifdef HAVE_FBO - if(d3d->fbo_enabled) + if(d3d->fbo_inited) { #ifdef HAVE_HLSL hlsl_set_params(width, height, 512, 512, g_settings.video.fbo.scale_x * width, @@ -560,7 +560,7 @@ static bool xdk_d3d_frame(void *data, const void *frame, #endif #ifdef HAVE_FBO - if(d3d->fbo_enabled) + if(d3d->fbo_inited) { d3d->d3d_render_device->Resolve(D3DRESOLVE_RENDERTARGET0, NULL, d3d->lpTexture_ot, NULL, 0, 0, NULL, 0, 0, NULL); diff --git a/xdk/xdk_d3d.h b/xdk/xdk_d3d.h index 2f67c4f72c..4158cb9c7a 100644 --- a/xdk/xdk_d3d.h +++ b/xdk/xdk_d3d.h @@ -57,7 +57,7 @@ typedef struct xdk_d3d_video const gfx_ctx_driver_t *ctx_driver; bool block_swap; #ifdef HAVE_FBO - bool fbo_enabled; + bool fbo_inited; #endif bool should_resize; bool quitting;