diff --git a/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp b/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp index b1c36229..e606d0a9 100644 --- a/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp @@ -1403,41 +1403,9 @@ int UIScene_LoadCreateJoinMenu::KeyboardCompleteWorldNameCallback(LPVOID lpParam // check the name is valid if(ui16Text[0]!=0) { -#if (defined __PS3__ || defined __ORBIS__ || defined _DURANGO || defined(__PSVITA__)) +#if (defined __PS3__ || defined __ORBIS__ || defined _DURANGO || defined(__PSVITA__)) // defined(_WINDOWS64) TODO: RenameSaveData need to be implemented // open the save and overwrite the metadata StorageManager.RenameSaveData(pClass->m_iSaveListIndex - pClass->m_iDefaultButtonsC, ui16Text,&UIScene_LoadCreateJoinMenu::RenameSaveDataReturned,pClass); -#elif defined(_WINDOWS64) - { - int listPos = pClass->m_iSaveListIndex - pClass->m_iDefaultButtonsC; - - // Convert the ui16Text input to a wide string - wchar_t wNewName[128] = {}; - for (int k = 0; k < 127 && ui16Text[k]; k++) - wNewName[k] = static_cast(ui16Text[k]); - - // Convert to narrow for storage and in-memory update - char narrowName[128] = {}; - wcstombs_s(nullptr, narrowName, sizeof(narrowName), wNewName, _TRUNCATE); - - // Build the sidecar path: Windows64\GameHDD\{folder}\worldname.txt - wchar_t wFilename[MAX_SAVEFILENAME_LENGTH] = {}; - mbstowcs_s(nullptr, wFilename, MAX_SAVEFILENAME_LENGTH, pClass->m_saveDetails[listPos].UTF8SaveFilename, _TRUNCATE); - wstring sidecarPath = wstring(L"Windows64\\GameHDD\\") + wstring(wFilename) + wstring(L"\\worldname.txt"); - - FILE *fw = nullptr; - if (_wfopen_s(&fw, sidecarPath.c_str(), L"w") == 0 && fw) - { - fputs(narrowName, fw); - fclose(fw); - } - - // Update the in-memory display name so the list reflects it immediately - strncpy_s(pClass->m_saveDetails[listPos].UTF8SaveName, narrowName, 127); - pClass->m_saveDetails[listPos].UTF8SaveName[127] = '\0'; - - // Reuse the existing callback to trigger the list repopulate - UIScene_LoadCreateJoinMenu::RenameSaveDataReturned(pClass, true); - } #endif } else @@ -2254,8 +2222,6 @@ void UIScene_LoadCreateJoinMenu::LoadSaveFromDisk(File *saveFile, ESavePlatform fis.read(ba); fis.close(); - - bool isClientSide = false; bool isPrivate = false; int maxPlayers = MINECRAFT_NET_MAX_PLAYERS; diff --git a/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp b/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp index 3b00fa1d..9a087be5 100644 --- a/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_LoadMenu.cpp @@ -945,7 +945,6 @@ void UIScene_LoadMenu::handleSliderMove(F64 sliderId, F64 currentValue) swprintf_s( (WCHAR *)TempString, 256, L"%ls: %ls", app.GetString( IDS_SLIDER_GAMEMODE ),app.GetString(m_iGamemodeTitleSettingA[value])); m_sliderGamemode.setLabel(TempString); - break; } } diff --git a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp index 28b13986..3067d43a 100644 --- a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp +++ b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp @@ -3,7 +3,6 @@ #include "stdafx.h" -#include #include #include #include @@ -823,48 +822,30 @@ HRESULT InitDevice() }; UINT numFeatureLevels = ARRAYSIZE( featureLevels ); - for( UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++ ) - { - g_driverType = driverTypes[driverTypeIndex]; - hr = D3D11CreateDevice( nullptr, g_driverType, nullptr, createDeviceFlags, featureLevels, - numFeatureLevels, D3D11_SDK_VERSION, &g_pd3dDevice, - &g_featureLevel, &g_pImmediateContext ); - if( SUCCEEDED( hr ) ) - break; - } - if( FAILED( hr ) ) - return hr; - - Microsoft::WRL::ComPtr dxgiDevice; - Microsoft::WRL::ComPtr dxgiAdapter; - Microsoft::WRL::ComPtr dxgiFactory; - - hr = g_pd3dDevice->QueryInterface(IID_PPV_ARGS(&dxgiDevice)); - if (FAILED(hr)) return hr; - - dxgiDevice->SetMaximumFrameLatency(1); - - hr = dxgiDevice->GetParent(IID_PPV_ARGS(&dxgiAdapter)); - if (FAILED(hr)) return hr; - hr = dxgiAdapter->GetParent(IID_PPV_ARGS(&dxgiFactory)); - if (FAILED(hr)) return hr; - - DXGI_SWAP_CHAIN_DESC1 sd = {}; - sd.BufferCount = 2; - sd.Width = width; - sd.Height = height; - sd.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + DXGI_SWAP_CHAIN_DESC sd; + ZeroMemory( &sd, sizeof( sd ) ); + sd.BufferCount = 1; + sd.BufferDesc.Width = width; + sd.BufferDesc.Height = height; + sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + sd.BufferDesc.RefreshRate.Numerator = 60; + sd.BufferDesc.RefreshRate.Denominator = 1; sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_SHADER_INPUT; + sd.OutputWindow = g_hWnd; sd.SampleDesc.Count = 1; sd.SampleDesc.Quality = 0; - sd.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; - sd.Flags = DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT | DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;; + sd.Windowed = TRUE; - IDXGISwapChain1* pNewSwapChain1 = nullptr; - hr = dxgiFactory->CreateSwapChainForHwnd(g_pd3dDevice, g_hWnd, &sd, nullptr, nullptr, &pNewSwapChain1); - if (FAILED(hr)) return hr; - - g_pSwapChain = pNewSwapChain1; + for( UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++ ) + { + g_driverType = driverTypes[driverTypeIndex]; + hr = D3D11CreateDeviceAndSwapChain( nullptr, g_driverType, nullptr, createDeviceFlags, featureLevels, numFeatureLevels, + D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &g_featureLevel, &g_pImmediateContext ); + if( HRESULT_SUCCEEDED( hr ) ) + break; + } + if( FAILED( hr ) ) + return hr; // Create a render target view Microsoft::WRL::ComPtr pBackBuffer; @@ -872,12 +853,9 @@ HRESULT InitDevice() if( FAILED( hr ) ) return hr; - hr = g_pd3dDevice->CreateRenderTargetView( pBackBuffer.Get(), nullptr, &g_pRenderTargetView ); - if( FAILED( hr ) ) - return hr; - // Create a depth stencil buffer D3D11_TEXTURE2D_DESC descDepth = {}; + descDepth.Width = width; descDepth.Height = height; descDepth.MipLevels = 1; @@ -889,10 +867,7 @@ HRESULT InitDevice() descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL; descDepth.CPUAccessFlags = 0; descDepth.MiscFlags = 0; - hr = g_pd3dDevice->CreateTexture2D(&descDepth, nullptr, &g_pDepthStencilBuffer); - if( FAILED( hr ) ) - return hr; D3D11_DEPTH_STENCIL_VIEW_DESC descDSView = {}; descDSView.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; @@ -900,6 +875,8 @@ HRESULT InitDevice() descDSView.Texture2D.MipSlice = 0; hr = g_pd3dDevice->CreateDepthStencilView(g_pDepthStencilBuffer, &descDSView, &g_pDepthStencilView); + + hr = g_pd3dDevice->CreateRenderTargetView( pBackBuffer.Get(), nullptr, &g_pRenderTargetView ); if( FAILED( hr ) ) return hr; @@ -916,6 +893,7 @@ HRESULT InitDevice() g_pImmediateContext->RSSetViewports( 1, &vp ); RenderManager.Initialise(g_pd3dDevice, g_pSwapChain); + PostProcesser::GetInstance().Init(); return S_OK; @@ -931,7 +909,7 @@ void Render() g_pImmediateContext->ClearRenderTargetView( g_pRenderTargetView, ClearColor ); g_pImmediateContext->Flush(); - g_pSwapChain->Present(0, DXGI_PRESENT_DO_NOT_WAIT); + g_pSwapChain->Present( 0, DXGI_PRESENT_DO_NOT_WAIT ); } //-------------------------------------------------------------------------------------- @@ -1013,106 +991,98 @@ static bool ResizeD3D(int newW, int newH) bool success = false; HRESULT hr; - Microsoft::WRL::ComPtr dxgiDevice; + Microsoft::WRL::ComPtr dxgiDevice; Microsoft::WRL::ComPtr dxgiAdapter; - Microsoft::WRL::ComPtr dxgiFactory; + Microsoft::WRL::ComPtr dxgiFactory; hr = g_pd3dDevice->QueryInterface(IID_PPV_ARGS(&dxgiDevice)); if (FAILED(hr)) goto postReset; - - dxgiDevice->SetMaximumFrameLatency(1); - hr = dxgiDevice->GetParent(IID_PPV_ARGS(&dxgiAdapter)); if (FAILED(hr)) goto postReset; hr = dxgiAdapter->GetParent(IID_PPV_ARGS(&dxgiFactory)); if (FAILED(hr)) goto postReset; // Create new swap chain at backbuffer size + DXGI_SWAP_CHAIN_DESC sd = {}; + sd.BufferCount = 1; + sd.BufferDesc.Width = bbW; + sd.BufferDesc.Height = bbH; + sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + sd.BufferDesc.RefreshRate.Numerator = 60; + sd.BufferDesc.RefreshRate.Denominator = 1; + sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_SHADER_INPUT; + sd.OutputWindow = g_hWnd; + sd.SampleDesc.Count = 1; + sd.SampleDesc.Quality = 0; + sd.Windowed = TRUE; + + IDXGISwapChain* pNewSwapChain = nullptr; + hr = dxgiFactory->CreateSwapChain(g_pd3dDevice, &sd, &pNewSwapChain); + + if (FAILED(hr) || pNewSwapChain == nullptr) { - DXGI_SWAP_CHAIN_DESC1 sd = {}; - sd.BufferCount = 2; - sd.Width = bbW; - sd.Height = bbH; - sd.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_SHADER_INPUT; - sd.SampleDesc.Count = 1; - sd.SampleDesc.Quality = 0; - sd.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; - sd.Flags = DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT | DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; - - IDXGISwapChain1* pNewSwapChain1 = nullptr; - hr = dxgiFactory->CreateSwapChainForHwnd(g_pd3dDevice, g_hWnd, &sd, nullptr, nullptr, &pNewSwapChain1); - - if (FAILED(hr) || pNewSwapChain1 == nullptr) - { - app.DebugPrintf("[RESIZE] CreateSwapChain FAILED hr=0x%08X — keeping old swap chain\n", (unsigned)hr); - goto postReset; - } - - // New swap chain created successfully — NOW destroy the old one. - // The Renderer's internal RTV/SRV still reference the old backbuffer — - // those COM objects become orphaned (tiny leak, harmless). We DON'T - // release them because unknown code may also hold refs. - pOldSwapChain->Release(); - g_pSwapChain = pNewSwapChain1; + app.DebugPrintf("[RESIZE] CreateSwapChain FAILED hr=0x%08X — keeping old swap chain\n", (unsigned)hr); + goto postReset; } + // New swap chain created successfully — NOW destroy the old one. + // The Renderer's internal RTV/SRV still reference the old backbuffer — + // those COM objects become orphaned (tiny leak, harmless). We DON'T + // release them because unknown code may also hold refs. + pOldSwapChain->Release(); + g_pSwapChain = pNewSwapChain; + // Patch Renderer's swap chain pointer *ppRM_SC = g_pSwapChain; // Create render target views from new backbuffer + ID3D11Texture2D* pBackBuffer = nullptr; + hr = g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer)); + if (FAILED(hr)) goto postReset; + + // Our RTV + hr = g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &g_pRenderTargetView); + if (FAILED(hr)) { pBackBuffer->Release(); goto postReset; } + + // Renderer's internal RTV (offset 0x28) + hr = g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, ppRM_RTV); + if (FAILED(hr)) { pBackBuffer->Release(); goto postReset; } + + // Renderer's SRV: separate texture matching backbuffer dims (used by CaptureThumbnail) + D3D11_TEXTURE2D_DESC backDesc = {}; + pBackBuffer->GetDesc(&backDesc); + pBackBuffer->Release(); + + D3D11_TEXTURE2D_DESC srvDesc = backDesc; + srvDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE; + ID3D11Texture2D* srvTexture = nullptr; + hr = g_pd3dDevice->CreateTexture2D(&srvDesc, nullptr, &srvTexture); + if (SUCCEEDED(hr)) { - ID3D11Texture2D* pBackBuffer = nullptr; - hr = g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer)); - if (FAILED(hr)) goto postReset; - - // Our RTV - hr = g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &g_pRenderTargetView); - if (FAILED(hr)) { pBackBuffer->Release(); goto postReset; } - - // Renderer's internal RTV (offset 0x28) - hr = g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, ppRM_RTV); - if (FAILED(hr)) { pBackBuffer->Release(); goto postReset; } - - // Renderer's SRV: separate texture matching backbuffer dims (used by CaptureThumbnail) - D3D11_TEXTURE2D_DESC backDesc = {}; - pBackBuffer->GetDesc(&backDesc); - pBackBuffer->Release(); - - D3D11_TEXTURE2D_DESC srvDesc = backDesc; - srvDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE; - ID3D11Texture2D* srvTexture = nullptr; - hr = g_pd3dDevice->CreateTexture2D(&srvDesc, nullptr, &srvTexture); - if (SUCCEEDED(hr)) - { - hr = g_pd3dDevice->CreateShaderResourceView(srvTexture, nullptr, ppRM_SRV); - srvTexture->Release(); - } - - if (FAILED(hr)) goto postReset; + hr = g_pd3dDevice->CreateShaderResourceView(srvTexture, nullptr, ppRM_SRV); + srvTexture->Release(); } + if (FAILED(hr)) goto postReset; // Recreate depth stencil at backbuffer size - { - D3D11_TEXTURE2D_DESC descDepth = {}; - descDepth.Width = bbW; - descDepth.Height = bbH; - descDepth.MipLevels = 1; - descDepth.ArraySize = 1; - descDepth.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; - descDepth.SampleDesc.Count = 1; - descDepth.SampleDesc.Quality = 0; - descDepth.Usage = D3D11_USAGE_DEFAULT; - descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL; - hr = g_pd3dDevice->CreateTexture2D(&descDepth, nullptr, &g_pDepthStencilBuffer); - if (FAILED(hr)) goto postReset; + D3D11_TEXTURE2D_DESC descDepth = {}; + descDepth.Width = bbW; + descDepth.Height = bbH; + descDepth.MipLevels = 1; + descDepth.ArraySize = 1; + descDepth.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; + descDepth.SampleDesc.Count = 1; + descDepth.SampleDesc.Quality = 0; + descDepth.Usage = D3D11_USAGE_DEFAULT; + descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL; + hr = g_pd3dDevice->CreateTexture2D(&descDepth, nullptr, &g_pDepthStencilBuffer); + if (FAILED(hr)) goto postReset; - D3D11_DEPTH_STENCIL_VIEW_DESC descDSView = {}; - descDSView.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; - descDSView.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; - hr = g_pd3dDevice->CreateDepthStencilView(g_pDepthStencilBuffer, &descDSView, &g_pDepthStencilView); - if (FAILED(hr)) goto postReset; - } + D3D11_DEPTH_STENCIL_VIEW_DESC descDSView = {}; + descDSView.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; + descDSView.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; + hr = g_pd3dDevice->CreateDepthStencilView(g_pDepthStencilBuffer, &descDSView, &g_pDepthStencilView); + if (FAILED(hr)) goto postReset; // Patch Renderer's DSV (AddRef because both we and the Renderer reference it) g_pDepthStencilView->AddRef(); @@ -1203,7 +1173,6 @@ postReset: gdraw_D3D11_SetRendertargetSize(g_rScreenWidth, g_rScreenHeight); if (success) IggyFlushInstalledFonts(); - RenderManager.Resume(); if (success)