aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client
diff options
context:
space:
mode:
authorFayaz Shaikh <61674751+fayaz12g@users.noreply.github.com>2026-03-02 18:04:53 -0500
committerGitHub <noreply@github.com>2026-03-03 06:04:53 +0700
commit41ded31af8767a6a0a0da2075d6bcd7d17078873 (patch)
treec9f529aee58998d37d2f1b6003f052d54f3e5299 /Minecraft.Client
parent2189da6f924c76938a54052429ae0f27613a6b4c (diff)
Add dynamic resolution (#203)
Diffstat (limited to 'Minecraft.Client')
-rw-r--r--Minecraft.Client/Windows64/Windows64_Minecraft.cpp86
-rw-r--r--Minecraft.Client/glWrapper.cpp6
2 files changed, 91 insertions, 1 deletions
diff --git a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp
index 7d38ff99..743da44b 100644
--- a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp
+++ b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp
@@ -84,6 +84,9 @@ BOOL g_bWidescreen = TRUE;
int g_iScreenWidth = 1920;
int g_iScreenHeight = 1080;
+UINT g_ScreenWidth = 1920;
+UINT g_ScreenHeight = 1080;
+
// Fullscreen toggle state
static bool g_isFullscreen = false;
static WINDOWPLACEMENT g_wpPrev = { sizeof(g_wpPrev) };
@@ -425,7 +428,90 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
return TRUE;
}
return DefWindowProc(hWnd, message, wParam, lParam);
+ case WM_SIZE:
+ {
+ if (wParam == SIZE_MINIMIZED)
+ return 0;
+
+ UINT width = LOWORD(lParam);
+ UINT height = HIWORD(lParam);
+
+ if (width == 0 || height == 0)
+ return 0;
+
+ g_ScreenWidth = width;
+ g_ScreenHeight = height;
+
+ if (g_pSwapChain)
+ {
+ g_pImmediateContext->OMSetRenderTargets(0, 0, 0);
+ g_pImmediateContext->ClearState();
+ g_pImmediateContext->Flush();
+
+ if (g_pRenderTargetView)
+ {
+ g_pRenderTargetView->Release();
+ g_pRenderTargetView = nullptr;
+ }
+
+ if (g_pDepthStencilView)
+ {
+ g_pDepthStencilView->Release();
+ g_pDepthStencilView = nullptr;
+ }
+ if (g_pDepthStencilBuffer)
+ {
+ g_pDepthStencilBuffer->Release();
+ g_pDepthStencilBuffer = nullptr;
+ }
+
+ HRESULT hr = g_pSwapChain->ResizeBuffers(
+ 0,
+ width,
+ height,
+ DXGI_FORMAT_UNKNOWN,
+ 0
+ );
+
+ if (FAILED(hr))
+ {
+ app.DebugPrintf("ResizeBuffers Failed! HRESULT: 0x%X\n", hr);
+ return 0;
+ }
+
+ ID3D11Texture2D* pBackBuffer = nullptr;
+ g_pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&pBackBuffer);
+
+ g_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, &g_pRenderTargetView);
+ pBackBuffer->Release();
+
+ D3D11_TEXTURE2D_DESC descDepth = {};
+ descDepth.Width = width;
+ descDepth.Height = height;
+ descDepth.MipLevels = 1;
+ descDepth.ArraySize = 1;
+ descDepth.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
+ descDepth.SampleDesc.Count = 1;
+ descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL;
+
+ g_pd3dDevice->CreateTexture2D(&descDepth, NULL, &g_pDepthStencilBuffer);
+ g_pd3dDevice->CreateDepthStencilView(g_pDepthStencilBuffer, NULL, &g_pDepthStencilView);
+
+ g_pImmediateContext->OMSetRenderTargets(1, &g_pRenderTargetView, g_pDepthStencilView);
+
+ D3D11_VIEWPORT vp = {};
+ vp.Width = (FLOAT)width;
+ vp.Height = (FLOAT)height;
+ vp.MinDepth = 0.0f;
+ vp.MaxDepth = 1.0f;
+ vp.TopLeftX = 0;
+ vp.TopLeftY = 0;
+
+ g_pImmediateContext->RSSetViewports(1, &vp);
+ }
+ }
+ break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
diff --git a/Minecraft.Client/glWrapper.cpp b/Minecraft.Client/glWrapper.cpp
index b120d30b..5e0fab2c 100644
--- a/Minecraft.Client/glWrapper.cpp
+++ b/Minecraft.Client/glWrapper.cpp
@@ -48,9 +48,13 @@ void glLoadIdentity()
RenderManager.MatrixSetIdentity();
}
+extern UINT g_ScreenWidth;
+extern UINT g_ScreenHeight;
+
void gluPerspective(float fovy, float aspect, float zNear, float zFar)
{
- RenderManager.MatrixPerspective(fovy,aspect,zNear,zFar);
+ float dynamicAspect = (float)g_ScreenWidth / (float)g_ScreenHeight;
+ RenderManager.MatrixPerspective(fovy, dynamicAspect, zNear, zFar);
}
void glOrtho(float left,float right,float bottom,float top,float zNear,float zFar)