Merge pull request #723 from myfreeweb/master

Fixes for Wayland (HiDPI and mouse lock) support, FreeBSD
This commit is contained in:
erorcun 2020-11-16 15:20:20 +03:00 committed by GitHub
commit 72c0a6a680
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 5 deletions

View File

@ -92,7 +92,10 @@ workspace "re3"
filter { "system:bsd" } filter { "system:bsd" }
platforms { platforms {
"bsd-amd64-librw_gl3_glfw-oal" "bsd-x86-librw_gl3_glfw-oal",
"bsd-amd64-librw_gl3_glfw-oal",
"bsd-arm-librw_gl3_glfw-oal",
"bsd-arm64-librw_gl3_glfw-oal"
} }
filter { "system:macosx" } filter { "system:macosx" }

View File

@ -244,8 +244,10 @@ double
psTimer(void) psTimer(void)
{ {
struct timespec start; struct timespec start;
#ifdef __linux__ #if defined(CLOCK_MONOTONIC_RAW)
clock_gettime(CLOCK_MONOTONIC_RAW, &start); clock_gettime(CLOCK_MONOTONIC_RAW, &start);
#elif defined(CLOCK_MONOTONIC_FAST)
clock_gettime(CLOCK_MONOTONIC_FAST, &start);
#else #else
clock_gettime(CLOCK_MONOTONIC, &start); clock_gettime(CLOCK_MONOTONIC, &start);
#endif #endif
@ -893,7 +895,7 @@ void psPostRWinit(void)
RwEngineGetVideoModeInfo(&vm, GcurSelVM); RwEngineGetVideoModeInfo(&vm, GcurSelVM);
glfwSetKeyCallback(PSGLOBAL(window), keypressCB); glfwSetKeyCallback(PSGLOBAL(window), keypressCB);
glfwSetWindowSizeCallback(PSGLOBAL(window), resizeCB); glfwSetFramebufferSizeCallback(PSGLOBAL(window), resizeCB);
glfwSetScrollCallback(PSGLOBAL(window), scrollCB); glfwSetScrollCallback(PSGLOBAL(window), scrollCB);
glfwSetCursorPosCallback(PSGLOBAL(window), cursorCB); glfwSetCursorPosCallback(PSGLOBAL(window), cursorCB);
glfwSetCursorEnterCallback(PSGLOBAL(window), cursorEnterCB); glfwSetCursorEnterCallback(PSGLOBAL(window), cursorEnterCB);
@ -1414,8 +1416,11 @@ _InputTranslateShiftKeyUpDown(RsKeyCodes *rs) {
// TODO this only works in frontend(and luckily only frontend use this). Fun fact: if I get pos manually in game, glfw reports that it's > 32000 // TODO this only works in frontend(and luckily only frontend use this). Fun fact: if I get pos manually in game, glfw reports that it's > 32000
void void
cursorCB(GLFWwindow* window, double xpos, double ypos) { cursorCB(GLFWwindow* window, double xpos, double ypos) {
FrontEndMenuManager.m_nMouseTempPosX = xpos; int bufw, bufh, winw, winh;
FrontEndMenuManager.m_nMouseTempPosY = ypos; glfwGetWindowSize(window, &winw, &winh);
glfwGetFramebufferSize(window, &bufw, &bufh);
FrontEndMenuManager.m_nMouseTempPosX = xpos * (bufw / winw);
FrontEndMenuManager.m_nMouseTempPosY = ypos * (bufh / winh);
} }
void void
@ -1643,6 +1648,8 @@ main(int argc, char *argv[])
#endif #endif
{ {
glfwPollEvents(); glfwPollEvents();
glfwSetInputMode(PSGLOBAL(window), GLFW_CURSOR,
(FrontEndMenuManager.m_bMenuActive && !PSGLOBAL(fullScreen)) ? GLFW_CURSOR_HIDDEN : GLFW_CURSOR_DISABLED);
if( ForegroundApp ) if( ForegroundApp )
{ {
switch ( gGameState ) switch ( gGameState )