diff --git a/Source/Core/Core/Src/Core.cpp b/Source/Core/Core/Src/Core.cpp index 327fa3b3c3..fc3a26716b 100644 --- a/Source/Core/Core/Src/Core.cpp +++ b/Source/Core/Core/Src/Core.cpp @@ -553,10 +553,10 @@ static inline std::string GenerateScreenshotName() std::string tempname, name; tempname = FULL_SCREENSHOTS_DIR + GetStartupParameter().GetUniqueID(); - name = StringFromFormat("%s-%d.bmp", tempname.c_str(), index); + name = StringFromFormat("%s-%d.png", tempname.c_str(), index); while(File::Exists(name.c_str())) - name = StringFromFormat("%s-%d.bmp", tempname.c_str(), ++index); + name = StringFromFormat("%s-%d.png", tempname.c_str(), ++index); return name; } diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp index 9bb7212ea1..72493d8555 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp @@ -330,7 +330,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, u32 _BufferIn, struct sockaddr_in address; int Return = accept(S, (struct sockaddr *)&address, &addrlen); GC_sockaddr_in *addr = (GC_sockaddr_in*)Memory::GetPointer(BufferOut); - addr->sin_family = address.sin_family; + addr->sin_family = (u8)address.sin_family; addr->sin_addr.s_addr_ = address.sin_addr.s_addr; addr->sin_port = address.sin_port; socklen_t *Len = (socklen_t *)Memory::GetPointer(BufferOut + 0x04); diff --git a/Source/Core/DiscIO/Src/BannerLoader.cpp b/Source/Core/DiscIO/Src/BannerLoader.cpp index 3288e1e848..b18fc61dc8 100644 --- a/Source/Core/DiscIO/Src/BannerLoader.cpp +++ b/Source/Core/DiscIO/Src/BannerLoader.cpp @@ -30,14 +30,14 @@ namespace DiscIO { -bool IBannerLoader::CopyToStringAndCheck(std::string& _rDestination, const char* _src) +void IBannerLoader::CopyToStringAndCheck(std::string& _rDestination, const char* _src) { static bool bValidChars[256]; static bool bInitialized = false; if (!bInitialized) { - for (int i = 0; i < 256; i++) + for (int i = 0; i < 0x20; i++) { bValidChars[i] = false; } @@ -55,7 +55,6 @@ bool IBannerLoader::CopyToStringAndCheck(std::string& _rDestination, const char* bInitialized = true; } - bool bResult = true; char destBuffer[2048] = {0}; char* dest = destBuffer; const char* src = _src; @@ -69,8 +68,8 @@ bool IBannerLoader::CopyToStringAndCheck(std::string& _rDestination, const char* if (bValidChars[c] == false) { - bResult = false; - break; + src++; + continue; } *dest = c; @@ -79,19 +78,9 @@ bool IBannerLoader::CopyToStringAndCheck(std::string& _rDestination, const char* } // finalize the string - if (bResult) - { - *dest = 0x00; - } - else - { - dest[0] = ' '; - dest[1] = 0x00; - } + *dest = 0x00; _rDestination = destBuffer; - - return(bResult); } bool IBannerLoader::CopyBeUnicodeToString( std::string& _rDestination, const u16* _src, int length ) diff --git a/Source/Core/DiscIO/Src/BannerLoader.h b/Source/Core/DiscIO/Src/BannerLoader.h index 40f48b7135..02d60858e4 100644 --- a/Source/Core/DiscIO/Src/BannerLoader.h +++ b/Source/Core/DiscIO/Src/BannerLoader.h @@ -47,7 +47,7 @@ class IBannerLoader protected: - bool CopyToStringAndCheck(std::string& _rDestination, const char* _src); + void CopyToStringAndCheck(std::string& _rDestination, const char* _src); bool CopyBeUnicodeToString(std::string& _rDestination, const u16* _src, int length); private: diff --git a/Source/Core/DiscIO/Src/BannerLoaderGC.cpp b/Source/Core/DiscIO/Src/BannerLoaderGC.cpp index 459a082093..2270c91ce0 100644 --- a/Source/Core/DiscIO/Src/BannerLoaderGC.cpp +++ b/Source/Core/DiscIO/Src/BannerLoaderGC.cpp @@ -57,7 +57,7 @@ CBannerLoaderGC::~CBannerLoaderGC() bool CBannerLoaderGC::IsValid() { - return(m_IsValid); + return m_IsValid; } @@ -66,13 +66,13 @@ CBannerLoaderGC::GetBanner(u32* _pBannerImage) { if (!IsValid()) { - return(false); + return false; } DVDBanner2* pBanner = (DVDBanner2*)m_pBannerFile; decode5A3image(_pBannerImage, pBanner->image, DVD_BANNER_WIDTH, DVD_BANNER_HEIGHT); - return(true); + return true; } @@ -83,7 +83,7 @@ CBannerLoaderGC::GetName(std::string _rName[]) if (!IsValid()) { - return(false); + return false; } // find Banner type @@ -151,12 +151,9 @@ CBannerLoaderGC::GetCompany(std::string& _rCompany) DVDBanner2* pBanner = (DVDBanner2*)m_pBannerFile; - if (!CopyToStringAndCheck(_rCompany, pBanner->comment[0].shortMaker)) - { - return(false); - } + CopyToStringAndCheck(_rCompany, pBanner->comment[0].shortMaker); - return(true); + return true; } @@ -167,7 +164,7 @@ CBannerLoaderGC::GetDescription(std::string* _rDescription) if (!IsValid()) { - return(false); + return false; } // find Banner type diff --git a/Source/Dolphin.sln b/Source/Dolphin.sln index 949e51ba49..4bb6db3dc9 100644 --- a/Source/Dolphin.sln +++ b/Source/Dolphin.sln @@ -42,6 +42,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Plugin_VideoOGL", "Plugins\ ProjectSection(ProjectDependencies) = postProject {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} = {C7E5D50A-2916-464B-86A7-E10B3CC88ADA} {11F55366-12EC-4C44-A8CB-1D4E315D61ED} = {11F55366-12EC-4C44-A8CB-1D4E315D61ED} + {3E03C179-8251-46E4-81F4-466F114BAC63} = {3E03C179-8251-46E4-81F4-466F114BAC63} {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} = {E5D1F0C0-AA07-4841-A4EB-4CF4DAA6B0FA} {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} = {1C8436C9-DBAF-42BE-83BC-CF3EC9175ABE} @@ -447,22 +448,6 @@ Global {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|Win32.Build.0 = Release|Win32 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.ActiveCfg = Release|x64 {8D612734-FAA5-4B8A-804F-4DEA2367D495}.Release|x64.Build.0 = Release|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Debug|Win32.ActiveCfg = Debug|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Debug|Win32.Build.0 = Debug|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Debug|x64.ActiveCfg = Debug|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Debug|x64.Build.0 = Debug|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.DebugFast|Win32.ActiveCfg = DebugFast|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.DebugFast|Win32.Build.0 = DebugFast|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.DebugFast|x64.ActiveCfg = DebugFast|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.DebugFast|x64.Build.0 = DebugFast|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release_JITIL|Win32.ActiveCfg = Release|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release_JITIL|Win32.Build.0 = Release|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release_JITIL|x64.ActiveCfg = Release|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release_JITIL|x64.Build.0 = Release|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release|Win32.ActiveCfg = Release|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release|Win32.Build.0 = Release|Win32 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release|x64.ActiveCfg = Release|x64 - {ADF64291-57ED-4B7A-AB76-37B4A991504B}.Release|x64.Build.0 = Release|x64 {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|Win32.ActiveCfg = Debug|Win32 {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|Win32.Build.0 = Debug|Win32 {C7E5D50A-2916-464B-86A7-E10B3CC88ADA}.Debug|x64.ActiveCfg = Debug|x64 diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/MailHandler.cpp b/Source/Plugins/Plugin_DSP_HLE/Src/MailHandler.cpp index f54e67f06a..8dbb416dcc 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/MailHandler.cpp +++ b/Source/Plugins/Plugin_DSP_HLE/Src/MailHandler.cpp @@ -58,7 +58,7 @@ u16 CMailHandler::ReadDSPMailboxLow() Update(); - return(result); + return result; } return 0x00; diff --git a/Source/Plugins/Plugin_VideoDX9/Src/main.cpp b/Source/Plugins/Plugin_VideoDX9/Src/main.cpp index 15d8951220..786cb0e7ff 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/main.cpp @@ -320,7 +320,7 @@ HRESULT ScreenShot(const char *File) RECT rect; ::GetWindowRect(EmuWindow::GetWnd(), &rect); - if (FAILED(D3DXSaveSurfaceToFile(File, D3DXIFF_JPG, surf, NULL, &rect))) + if (FAILED(D3DXSaveSurfaceToFile(File, D3DXIFF_PNG, surf, NULL, &rect))) { surf->Release(); return S_FALSE; diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp index fa3cb86003..3392dc6153 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Render.cpp @@ -1282,18 +1282,10 @@ void Renderer::SetScreenshot(const char *filename) bool Renderer::SaveRenderTarget(const char *filename, int W, int H, int YOffset) { - // The height seemed to often be one less than the setting (but sometimes not), - // perhaps the source is the (bpmem.copyTexSrcWH.y + 1) in BPStructs.cpp that I'm guessing - // is there because of how some GL function works. But the buffer we are reading from here - // seems to have the necessary pixels for a complete height so we use the complete height - // from the settings. - if (!(g_Config.bNativeResolution || g_Config.b2xResolution)) - sscanf(g_Config.iInternalRes, "%dx%d", &W, &H); - - u8 *data = (u8 *)malloc(3 * W * H); glPixelStorei(GL_PACK_ALIGNMENT, 1); - glReadPixels(0, YOffset, W, H, GL_RGB, GL_UNSIGNED_BYTE, data); + + glReadPixels(0, Renderer::GetTargetHeight() - H + YOffset, W, H, GL_RGB, GL_UNSIGNED_BYTE, data); // Show failure message if (glGetError() != GL_NO_ERROR) @@ -1306,51 +1298,45 @@ bool Renderer::SaveRenderTarget(const char *filename, int W, int H, int YOffset) FlipImageData(data, W, H); #if defined(HAVE_WX) && HAVE_WX + //Enable support for PNG file type. + wxImage::AddHandler( new wxPNGHandler ); + // Create wxImage wxImage a(W, H, data); - // --------------------------------------------------------------------- - // To get past the problem of non-4:3 and non-16:9 native resolution pictures (for example - // in RE1 some pictures have non-4:3 resolutions like 640 x 448 and 512 x 448 and such that - // are meant to be rescaled to 4:3, and most Wii games use 640 x 480 even for the 16:9 mode) - // we let the user use the keep aspect ratio functions to control the resulting aspect ratio. - // ŻŻŻŻŻŻŻŻŻŻŻŻŻ - // We don't adjust non-native resolutions to avoid blurring the picture. - // ŻŻŻŻŻŻŻŻŻŻŻŻŻ - float Ratio = (float)W / (float)(H), TargetRatio; - if ((g_Config.bNativeResolution || g_Config.b2xResolution) && (g_Config.bKeepAR169 || g_Config.bKeepAR43) - && Ratio != 4.0/3.0 && Ratio != 16.0/9.0) - { - if (g_Config.bKeepAR43) - TargetRatio = 4.0/3.0; - else - TargetRatio = 16.0/9.0; - // Check if the height or width should be changed (we only increase the picture size, not - // the other way around) - if (Ratio < TargetRatio) - { - float fW = (float)H * TargetRatio; - W = (int)fW; - } - else - { - float fH = (float)W * (1 / TargetRatio); - H = (int)fH; - } - a.Rescale(W, H, wxIMAGE_QUALITY_HIGH); - } - // --------------------------------------------------------------------- + // These will contain the final image size + float FloatW = (float)W; + float FloatH = (float)H; - a.SaveFile(wxString::FromAscii(filename), wxBITMAP_TYPE_BMP); + // Handle aspect ratio for the final screenshot to look exactly like what's on screen. + if (g_Config.bKeepAR43 || g_Config.bKeepAR169) + { + float Ratio = (FloatW / FloatH) / (g_Config.bKeepAR43 ? (4.0f / 3.0f) : (16.0f / 9.0f)); + + // If ratio > 1 the picture is too wide and we have to limit the width. + if (Ratio > 1) + FloatW /= Ratio; + // ratio == 1 or the image is too high, we have to limit the height. + else + FloatH *= Ratio; + + a.Rescale((int)FloatW, (int)FloatH, wxIMAGE_QUALITY_HIGH); + } + + a.SaveFile(wxString::FromAscii(filename), wxBITMAP_TYPE_PNG); bool result = true; // Show success messages - OSD::AddMessage(StringFromFormat("Saved %i x %i %s\n", W, H, s_sScreenshotName.c_str()).c_str(), 2000); + OSD::AddMessage(StringFromFormat("Saved %i x %i %s\n", (int)FloatW, (int)FloatH, s_sScreenshotName.c_str()).c_str(), 2000); + // Finally kill the wxImage object + a.Destroy(); #else bool result = SaveTGA(filename, W, H, data); - free(data); #endif + // Do not forget to release the data... + free(data); + return result; } diff --git a/Source/Plugins/Plugin_nJoy_SDL/Src/Rumble.cpp b/Source/Plugins/Plugin_nJoy_SDL/Src/Rumble.cpp index 02cfbc939d..a394afe080 100644 --- a/Source/Plugins/Plugin_nJoy_SDL/Src/Rumble.cpp +++ b/Source/Plugins/Plugin_nJoy_SDL/Src/Rumble.cpp @@ -258,10 +258,10 @@ HRESULT InitRumble(HWND hWnd) // Create the prepared effect if (FAILED(hr = pRumble[i].g_pDevice->CreateEffect(GUID_ConstantForce, &pRumble[i].eff, &pRumble[i].g_pEffect, NULL))) - return hr; + continue; if (pRumble[i].g_pEffect == NULL) - return E_FAIL; + continue; } } @@ -367,10 +367,8 @@ VOID FreeDirectInput() for (int i=0; i<4; i++) // Free all pads { - if (pRumble[i].g_pDevice) { - pRumble[i].g_pEffect->Stop(); + if (pRumble[i].g_pDevice) pRumble[i].g_pDevice->Unacquire(); - } SAFE_RELEASE(pRumble[i].g_pEffect); SAFE_RELEASE(pRumble[i].g_pDevice);