From c712b07fc3d05a757042ff8f7c87b41280ca4f6b Mon Sep 17 00:00:00 2001 From: ABU008 Date: Fri, 6 Mar 2026 11:26:16 +0000 Subject: [PATCH] Uncap FPS, disable VSync, check for mouse input per frame and improve nanoTime precision. --- Minecraft.Client/Input.cpp | 26 +++++++++---------- Minecraft.Client/KeyboardMouseInput.h | 4 +++ Minecraft.Client/Options.cpp | 2 +- .../Windows64/Windows64_Minecraft.cpp | 5 ++-- Minecraft.World/system.cpp | 9 ++++++- 5 files changed, 27 insertions(+), 19 deletions(-) diff --git a/Minecraft.Client/Input.cpp b/Minecraft.Client/Input.cpp index b44e81b..d49c0c8 100644 --- a/Minecraft.Client/Input.cpp +++ b/Minecraft.Client/Input.cpp @@ -162,28 +162,26 @@ void Input::tick(LocalPlayer *player) tx = ty = 0.0f; } - float turnX = tx * abs(tx) * turnSpeed; - float turnY = ty * abs(ty) * turnSpeed; + player->interpolateTurn(tx* abs(tx)* turnSpeed, ty* abs(ty)* turnSpeed); #ifdef _WINDOWS64 if (iPad == 0 && g_KBMInput.IsMouseGrabbed() && g_KBMInput.IsKBMActive()) { - float mouseSensitivity = ((float)app.GetGameSettings(iPad,eGameSetting_Sensitivity_InGame)) / 100.0f; - float mouseLookScale = 5.0f; - float mx = g_KBMInput.GetLookX(mouseSensitivity * mouseLookScale); - float my = g_KBMInput.GetLookY(mouseSensitivity * mouseLookScale); - - if ( app.GetGameSettings(iPad,eGameSetting_ControlInvertLook) ) + int dx = g_KBMInput.GetRawDeltaX(); + int dy = g_KBMInput.GetRawDeltaY(); + g_KBMInput.ConsumeMouseDelta(); + if (dx != 0 || dy != 0) { - my = -my; + float mouseSensitivity = ((float)app.GetGameSettings(iPad, eGameSetting_Sensitivity_InGame)) / 100.0f; + float mouseLookScale = 5.0f; + float mdx = dx * mouseSensitivity * mouseLookScale; + float mdy = -dy * mouseSensitivity * mouseLookScale; + if (app.GetGameSettings(iPad, eGameSetting_ControlInvertLook)) + mdy = -mdy; + player->interpolateTurn(mdx, mdy); } - - turnX += mx; - turnY += my; } #endif - - player->interpolateTurn(turnX, turnY); //jumping = controller.isButtonPressed(0); diff --git a/Minecraft.Client/KeyboardMouseInput.h b/Minecraft.Client/KeyboardMouseInput.h index 3400b5f..b08c966 100644 --- a/Minecraft.Client/KeyboardMouseInput.h +++ b/Minecraft.Client/KeyboardMouseInput.h @@ -80,6 +80,10 @@ public: float GetLookX(float sensitivity) const; float GetLookY(float sensitivity) const; + int GetRawDeltaX() const { return m_mouseDeltaAccumX; } + int GetRawDeltaY() const { return m_mouseDeltaAccumY; } + void ConsumeMouseDelta() { m_mouseDeltaAccumX = 0; m_mouseDeltaAccumY = 0; } + private: bool m_keyDown[MAX_KEYS]; bool m_keyDownPrev[MAX_KEYS]; diff --git a/Minecraft.Client/Options.cpp b/Minecraft.Client/Options.cpp index 9952fc8..4eb2ada 100644 --- a/Minecraft.Client/Options.cpp +++ b/Minecraft.Client/Options.cpp @@ -116,7 +116,7 @@ void Options::init() bobView = true; anaglyph3d = false; advancedOpengl = false; - framerateLimit = 2; + framerateLimit = 0; fancyGraphics = true; ambientOcclusion = true; renderClouds = true; diff --git a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp index 072b143..6a6bfea 100644 --- a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp +++ b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp @@ -17,6 +17,7 @@ #include "..\..\Minecraft.World\Vec3.h" #include "..\..\Minecraft.World\Level.h" #include "..\..\Minecraft.World\net.minecraft.world.level.tile.h" +#include "..\MultiplayerLocalPlayer.h" #include "..\ClientConnection.h" #include "..\User.h" @@ -265,7 +266,7 @@ HRESULT InitD3D( IDirect3DDevice9 **ppDevice, pd3dPP->EnableAutoDepthStencil = TRUE; pd3dPP->AutoDepthStencilFormat = D3DFMT_D24S8; pd3dPP->SwapEffect = D3DSWAPEFFECT_DISCARD; - pd3dPP->PresentationInterval = D3DPRESENT_INTERVAL_ONE; + pd3dPP->PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; //pd3dPP->Flags = D3DPRESENTFLAG_NO_LETTERBOX; //ERR[D3D]: Can't set D3DPRESENTFLAG_NO_LETTERBOX when wide-screen is enabled // in the launcher/dashboard. @@ -760,8 +761,6 @@ void CleanupDevice() if( g_pd3dDevice ) g_pd3dDevice->Release(); } - - int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR lpCmdLine, diff --git a/Minecraft.World/system.cpp b/Minecraft.World/system.cpp index 72727e2..1514a40 100644 --- a/Minecraft.World/system.cpp +++ b/Minecraft.World/system.cpp @@ -52,7 +52,14 @@ void System::arraycopy(arrayWithLength src, unsigned int srcPos, arrayWithL //The current value of the system timer, in nanoseconds. __int64 System::nanoTime() { - return GetTickCount() * 1000000LL; + static LARGE_INTEGER s_frequency = { 0 }; + if (s_frequency.QuadPart == 0) + QueryPerformanceFrequency(&s_frequency); + + LARGE_INTEGER counter; + QueryPerformanceCounter(&counter); + + return (__int64)((double)counter.QuadPart * 1000000000.0 / (double)s_frequency.QuadPart); } //Returns the current time in milliseconds. Note that while the unit of time of the return value is a millisecond,