diff --git a/Minecraft.Client/Common/UI/UIScene_AnvilMenu.cpp b/Minecraft.Client/Common/UI/UIScene_AnvilMenu.cpp index a3fb0d2d..e9be9a89 100644 --- a/Minecraft.Client/Common/UI/UIScene_AnvilMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_AnvilMenu.cpp @@ -339,20 +339,15 @@ int UIScene_AnvilMenu::KeyboardCompleteCallback(LPVOID lpParam,bool bRes) if (bRes) { + uint16_t pchText[128] = {}; #ifdef _WINDOWS64 - uint16_t pchText[128]; - ZeroMemory(pchText, 128 * sizeof(uint16_t)); Win64_GetKeyboardText(pchText, 128); +#else + InputManager.GetText(pchText); + pClass->setEditNameValue(reinterpret_cast(pchText)); pClass->m_itemName = reinterpret_cast(pchText); pClass->updateItemName(); -#else - uint16_t pchText[128]; - ZeroMemory(pchText, 128 * sizeof(uint16_t) ); - InputManager.GetText(pchText); - pClass->setEditNameValue((wchar_t *)pchText); - pClass->m_itemName = (wchar_t *)pchText; - pClass->updateItemName(); #endif } return 0; diff --git a/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.cpp b/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.cpp index c576a044..64dc60c0 100644 --- a/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_CreateWorldMenu.cpp @@ -781,8 +781,7 @@ int UIScene_CreateWorldMenu::KeyboardCompleteWorldNameCallback(LPVOID lpParam,bo // 4J HEG - No reason to set value if keyboard was cancelled if (bRes) { - uint16_t pchText[128]; - ZeroMemory(pchText, 128 * sizeof(uint16_t) ); + uint16_t pchText[128] = {}; #ifdef _WINDOWS64 Win64_GetKeyboardText(pchText, 128); #else diff --git a/Minecraft.Client/Common/UI/UIScene_DebugCreateSchematic.cpp b/Minecraft.Client/Common/UI/UIScene_DebugCreateSchematic.cpp index d698b51f..b8b9a387 100644 --- a/Minecraft.Client/Common/UI/UIScene_DebugCreateSchematic.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DebugCreateSchematic.cpp @@ -239,13 +239,10 @@ int UIScene_DebugCreateSchematic::KeyboardCompleteCallback(LPVOID lpParam,bool b { UIScene_DebugCreateSchematic *pClass=static_cast(lpParam); + uint16_t pchText[128] = {}; #ifdef _WINDOWS64 - uint16_t pchText[128]; - ZeroMemory(pchText, 128 * sizeof(uint16_t)); Win64_GetKeyboardText(pchText, 128); #else - uint16_t pchText[128]; - ZeroMemory(pchText, 128 * sizeof(uint16_t) ); InputManager.GetText(pchText); #endif diff --git a/Minecraft.Client/Common/UI/UIScene_DebugSetCamera.cpp b/Minecraft.Client/Common/UI/UIScene_DebugSetCamera.cpp index 51eab5aa..35d5d18d 100644 --- a/Minecraft.Client/Common/UI/UIScene_DebugSetCamera.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DebugSetCamera.cpp @@ -193,12 +193,10 @@ void UIScene_DebugSetCamera::handleCheckboxToggled(F64 controlId, bool selected) int UIScene_DebugSetCamera::KeyboardCompleteCallback(LPVOID lpParam,bool bRes) { UIScene_DebugSetCamera *pClass=static_cast(lpParam); - uint16_t pchText[2048]; - ZeroMemory(pchText, 2048 * sizeof(uint16_t)); + uint16_t pchText[2048] = {}; #ifdef _WINDOWS64 Win64_GetKeyboardText(pchText, 2048); #else ->>>>>>> origin/main InputManager.GetText(pchText); #endif diff --git a/Minecraft.Client/Common/UI/UIScene_JoinMenu.cpp b/Minecraft.Client/Common/UI/UIScene_JoinMenu.cpp index 3608437e..dd469856 100644 --- a/Minecraft.Client/Common/UI/UIScene_JoinMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_JoinMenu.cpp @@ -775,12 +775,11 @@ int UIScene_JoinMenu::EditServerKeyboardCallback(LPVOID lpParam, bool bRes) return 0; } - uint16_t ui16Text[256]; - ZeroMemory(ui16Text, sizeof(ui16Text)); - Win64_GetKeyboardText(ui16Text, 256); + uint16_t ui16Text[128] = {}; + Win64_GetKeyboardText(ui16Text, 128); - wchar_t wBuf[256] = {}; - for (int k = 0; k < 255 && ui16Text[k]; k++) + wchar_t wBuf[128] = {}; + for (int k = 0; k < 127 && ui16Text[k]; k++) wBuf[k] = (wchar_t)ui16Text[k]; if (wBuf[0] == 0) diff --git a/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp index 1832e40c..8d50cbe2 100644 --- a/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_LaunchMoreOptionsMenu.cpp @@ -554,18 +554,15 @@ int UIScene_LaunchMoreOptionsMenu::KeyboardCompleteSeedCallback(LPVOID lpParam,b if (bRes) { #ifdef _WINDOWS64 - uint16_t pchText[128]; - ZeroMemory(pchText, 128 * sizeof(uint16_t)); + uint16_t pchText[128] = {}; Win64_GetKeyboardText(pchText, 128); pClass->m_editSeed.setLabel(reinterpret_cast(pchText)); pClass->m_params->seed = static_cast(reinterpret_cast(pchText)); #else #ifdef __PSVITA__ - uint16_t pchText[2048]; - ZeroMemory(pchText, 2048 * sizeof(uint16_t) ); + uint16_t pchText[2048] = {}; #else - uint16_t pchText[128]; - ZeroMemory(pchText, 128 * sizeof(uint16_t) ); + uint16_t pchText[128] = {}; #endif InputManager.GetText(pchText); pClass->m_editSeed.setLabel((wchar_t *)pchText); diff --git a/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp b/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp index 6eee2c1a..66787589 100644 --- a/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_LoadCreateJoinMenu.cpp @@ -2567,15 +2567,8 @@ int UIScene_LoadCreateJoinMenu::KeyboardCompleteWorldNameCallback(LPVOID lpParam if (bRes) { - uint16_t ui16Text[128]; - - ZeroMemory(ui16Text, 128 * sizeof(uint16_t)); - -#ifdef _WINDOWS64 + uint16_t ui16Text[128] = {}; Win64_GetKeyboardText(ui16Text, 128); -#else - InputManager.GetText(ui16Text); -#endif // check the name is valid if (ui16Text[0] != 0) @@ -6038,14 +6031,13 @@ int UIScene_LoadCreateJoinMenu::AddServerKeyboardCallback(LPVOID lpParam, bool b return 0; } - uint16_t ui16Text[256]; - ZeroMemory(ui16Text, sizeof(ui16Text)); + uint16_t ui16Text[128] = {}; - Win64_GetKeyboardText(ui16Text, 256); + Win64_GetKeyboardText(ui16Text, 128); - wchar_t wBuf[256] = {}; + wchar_t wBuf[128] = {}; - for (int k = 0; k < 255 && ui16Text[k]; k++) + for (int k = 0; k < 127 && ui16Text[k]; k++) wBuf[k] = static_cast(ui16Text[k]); if (wBuf[0] == 0) diff --git a/Minecraft.Client/Common/UI/UIScene_SignEntryMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SignEntryMenu.cpp index df7048da..0d9c8ea4 100644 --- a/Minecraft.Client/Common/UI/UIScene_SignEntryMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SignEntryMenu.cpp @@ -316,17 +316,13 @@ int UIScene_SignEntryMenu::KeyboardCompleteCallback(LPVOID lpParam,bool bRes) pClass->m_bIgnoreInput = false; if (bRes) { + uint16_t pchText[128] = {}; #ifdef _WINDOWS64 - uint16_t pchText[128]; - ZeroMemory(pchText, 128 * sizeof(uint16_t)); Win64_GetKeyboardText(pchText, 128); - pClass->m_textInputLines[pClass->m_iEditingLine].setLabel(reinterpret_cast(pchText)); #else - uint16_t pchText[128]; - ZeroMemory(pchText, 128 * sizeof(uint16_t) ); InputManager.GetText(pchText); - pClass->m_textInputLines[pClass->m_iEditingLine].setLabel((wchar_t *)pchText); #endif + pClass->m_textInputLines[pClass->m_iEditingLine].setLabel(reinterpret_cast(pchText)); } return 0; } diff --git a/Minecraft.Client/LevelRenderer.cpp b/Minecraft.Client/LevelRenderer.cpp index 9b440e44..a05dbc0e 100644 --- a/Minecraft.Client/LevelRenderer.cpp +++ b/Minecraft.Client/LevelRenderer.cpp @@ -688,6 +688,45 @@ void LevelRenderer::resortChunks(int xc, int yc, int zc) if (zz < zMinChunk) zMinChunk = zz; if (zz > zMaxChunk) zMaxChunk = zz; +#ifdef __AVX__ //SSE4.2 + __m128i vYMin = _mm_set1_epi32(yMinChunk); + __m128i vYMax = _mm_set1_epi32(yMaxChunk); + __m128i vChunkSize = _mm_set1_epi32(CHUNK_SIZE); + __m128i vStep = _mm_set_epi32(3, 2, 1, 0); + + for (int y = 0; y <= yChunks - 4; y += 4) + { + __m128i vCurrentY = _mm_add_epi32(_mm_set1_epi32(y), vStep); + __m128i vYY = _mm_mullo_epi32(vCurrentY, vChunkSize); + + vYMin = _mm_min_epi32(vYMin, vYY); + vYMax = _mm_max_epi32(vYMax, vYY); + + for (int i = 0; i < 4; ++i) + { + int finalYY = (y + i) * CHUNK_SIZE; + chunks[playerIndex][(z * yChunks + (y + i)) * xChunks + x].chunk->setPos(xx, finalYY, zz); + } + } + + alignas(16) int resMin[4], resMax[4]; + _mm_store_si128((__m128i*)resMin, vYMin); + _mm_store_si128((__m128i*)resMax, vYMax); + for(int i = 0; i < 4; i++) + { + if (resMin[i] < yMinChunk) yMinChunk = resMin[i]; + if (resMax[i] > yMaxChunk) yMaxChunk = resMax[i]; + } + + for (int y = 0; y < yChunks; y++) + { + int yy = y * CHUNK_SIZE; + if (yy < yMinChunk) yMinChunk = yy; + if (yy > yMaxChunk) yMaxChunk = yy; + chunks[playerIndex][(z * yChunks + y) * xChunks + x].chunk->setPos(xx, yy, zz); + } + } +#endif for (int y = 0; y < yChunks; y++) { int yy = y * CHUNK_SIZE; diff --git a/Minecraft.Client/Windows64/4JLibs/inc/4J_Storage.h b/Minecraft.Client/Windows64/4JLibs/inc/4J_Storage.h index 57edb217..fd965022 100644 --- a/Minecraft.Client/Windows64/4JLibs/inc/4J_Storage.h +++ b/Minecraft.Client/Windows64/4JLibs/inc/4J_Storage.h @@ -292,7 +292,7 @@ public: // Load the save. Need to call GetSaveData once the callback is called ESaveGameState LoadSaveData(PSAVE_INFO pSaveInfo, int (*Func)(LPVOID lpParam, bool, bool), LPVOID lpParam); ESaveGameState DeleteSaveData(PSAVE_INFO pSaveInfo, int (*Func)(LPVOID lpParam, bool), LPVOID lpParam); - ESaveGameState RenameSaveData(PSAVE_INFO pSaveInfo, uint16_t ui16Text, int (*Func)(LPVOID lpParam, bool), LPVOID lpParam); + ESaveGameState RenameSaveData(PSAVE_INFO pSaveInfo, uint16_t* ui16Text, int (*Func)(LPVOID lpParam, bool), LPVOID lpParam); // DLC void RegisterMarketplaceCountsCallback(int (*Func)(LPVOID lpParam, DLC_TMS_DETAILS*, int), LPVOID lpParam); diff --git a/Minecraft.Client/Windows64/4JLibs/libs/4J_Input.lib b/Minecraft.Client/Windows64/4JLibs/libs/4J_Input.lib index 6e446cf4..7c15caa2 100644 Binary files a/Minecraft.Client/Windows64/4JLibs/libs/4J_Input.lib and b/Minecraft.Client/Windows64/4JLibs/libs/4J_Input.lib differ diff --git a/Minecraft.Client/Windows64/4JLibs/libs/4J_Input_d.lib b/Minecraft.Client/Windows64/4JLibs/libs/4J_Input_d.lib index e01c1cdd..ef8bfabc 100644 Binary files a/Minecraft.Client/Windows64/4JLibs/libs/4J_Input_d.lib and b/Minecraft.Client/Windows64/4JLibs/libs/4J_Input_d.lib differ diff --git a/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile.lib b/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile.lib index 235805da..0a8c7b20 100644 Binary files a/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile.lib and b/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile.lib differ diff --git a/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile_d.lib b/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile_d.lib index 292e6ce4..b2f8b4de 100644 Binary files a/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile_d.lib and b/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile_d.lib differ diff --git a/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC.lib b/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC.lib index 4f4e3cd9..8c1be31d 100644 Binary files a/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC.lib and b/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC.lib differ diff --git a/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC_d.lib b/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC_d.lib index 84c4c843..c3efebf9 100644 Binary files a/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC_d.lib and b/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC_d.lib differ diff --git a/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage.lib b/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage.lib index edd80c31..ee4335ed 100644 Binary files a/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage.lib and b/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage.lib differ diff --git a/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage_d.lib b/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage_d.lib index 2f38b5d2..0b72f145 100644 Binary files a/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage_d.lib and b/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage_d.lib differ diff --git a/Minecraft.World/C4JThread.cpp b/Minecraft.World/C4JThread.cpp index 5b67b55a..1add41c4 100644 --- a/Minecraft.World/C4JThread.cpp +++ b/Minecraft.World/C4JThread.cpp @@ -194,6 +194,14 @@ C4JThread::~C4JThread() } LeaveCriticalSection(&ms_threadListCS); + +#ifdef _WINDOWS64 + if (m_threadHandle != nullptr && m_threadHandle != (HANDLE)-2) + { + CloseHandle(m_threadHandle); + m_threadHandle = nullptr; + } +#endif } #ifdef __PS3__ @@ -638,6 +646,19 @@ C4JThread::EventArray::EventArray( int size, EMode mode/* = e_modeAutoClear*/) #endif // __PS3__ } +C4JThread::EventArray::~EventArray() +{ +#ifdef _WINDOWS64 + if (m_events) { + for (int i = 0; i < m_size; i++) { + if (m_events[i] != nullptr) { + CloseHandle(m_events[i]); + } + } + delete[] m_events; + } +#endif +} void C4JThread::EventArray::Set(int index) { diff --git a/Minecraft.World/C4JThread.h b/Minecraft.World/C4JThread.h index b05660c0..cde74ec3 100644 --- a/Minecraft.World/C4JThread.h +++ b/Minecraft.World/C4JThread.h @@ -120,6 +120,8 @@ public: }; EventArray(int size, EMode mode = e_modeAutoClear); + ~EventArray(); + void Set(int index); void Clear(int index);