X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=vid_wgl.c;h=af3475f79decdcd3942264db43ede83463dcbdcc;hb=6f70db9469c5c8f71d354ac82e2f855a81608e67;hp=99235ff2a63aa44fe5ff60e50d9e68f942778113;hpb=a9786962ae7078339dabc99b92befe9c8c4caf0b;p=xonotic%2Fdarkplaces.git diff --git a/vid_wgl.c b/vid_wgl.c index 99235ff2..af3475f7 100644 --- a/vid_wgl.c +++ b/vid_wgl.c @@ -79,10 +79,11 @@ static DEVMODE gdevmode; static qboolean vid_initialized = false; static qboolean vid_wassuspended = false; static int vid_usingmouse; -extern qboolean mouseactive; // from in_win.c static HICON hIcon; HWND mainwindow; +static HDC baseDC; +static HGLRC baseRC; //HWND WINAPI InitializeWindow (HINSTANCE hInstance, int nCmdShow); @@ -145,7 +146,7 @@ HRESULT (WINAPI *pDirectInputCreate)(HINSTANCE hinst, DWORD dwVersion, int mouse_buttons; int mouse_oldbuttonstate; POINT current_pos; -int mouse_x, mouse_y, old_mouse_x, old_mouse_y, mx_accum, my_accum; +int mouse_x, mouse_y, old_mouse_x, old_mouse_y; static qboolean restore_spi; static int originalmouseparms[3], newmouseparms[3] = {0, 0, 1}; @@ -303,7 +304,6 @@ void VID_GetWindowSize (int *x, int *y, int *width, int *height) void VID_Finish (void) { - HDC hdc; int vid_usemouse; static int old_vsync = -1; @@ -311,16 +311,15 @@ void VID_Finish (void) { old_vsync = bound(0, vid_vsync.integer, 1); Cvar_SetValueQuick(&vid_vsync, old_vsync); - qwglSwapIntervalEXT (old_vsync); + if (gl_videosyncavailable) + qwglSwapIntervalEXT (old_vsync); } if (r_render.integer && !scr_skipupdate) { if (r_speeds.integer || gl_finish.integer) qglFinish(); - hdc = GetDC(mainwindow); - SwapBuffers(hdc); - ReleaseDC(mainwindow, hdc); + SwapBuffers(baseDC); } // handle the mouse state when windowed if that's changed @@ -377,7 +376,7 @@ MapKey Map from windows to quake keynums ======= */ -int MapKey (int key, int virtualkey) +static int MapKey (int key, int virtualkey) { int result; int modified = (key >> 16) & 255; @@ -789,7 +788,6 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp) }; int pixelformat; DWORD WindowStyle, ExWindowStyle; - HGLRC baseRC; int CenterX, CenterY; const char *gldrivername; int depth; @@ -810,6 +808,7 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp) } gldrivername = "opengl32.dll"; +// COMMANDLINEOPTION: Windows WGL: -gl_driver selects a GL driver library, default is opengl32.dll, useful only for 3dfxogl.dll or 3dfxvgl.dll, if you don't know what this is for, you don't need it i = COM_CheckParm("-gl_driver"); if (i && i < com_argc - 1) gldrivername = com_argv[i + 1]; @@ -933,19 +932,19 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp) // fix the leftover Alt from any Alt-Tab or the like that switched us away ClearAllStates (); - hdc = GetDC(mainwindow); + baseDC = GetDC(mainwindow); - if ((pixelformat = ChoosePixelFormat(hdc, &pfd)) == 0) + if ((pixelformat = ChoosePixelFormat(baseDC, &pfd)) == 0) { VID_Shutdown(); - Con_Printf("ChoosePixelFormat(%d, %p) failed\n", hdc, &pfd); + Con_Printf("ChoosePixelFormat(%d, %p) failed\n", baseDC, &pfd); return false; } - if (SetPixelFormat(hdc, pixelformat, &pfd) == false) + if (SetPixelFormat(baseDC, pixelformat, &pfd) == false) { VID_Shutdown(); - Con_Printf("SetPixelFormat(%d, %d, %p) failed\n", hdc, pixelformat, &pfd); + Con_Printf("SetPixelFormat(%d, %d, %p) failed\n", baseDC, pixelformat, &pfd); return false; } @@ -956,17 +955,17 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp) return false; } - baseRC = qwglCreateContext(hdc); + baseRC = qwglCreateContext(baseDC); if (!baseRC) { VID_Shutdown(); Con_Print("Could not initialize GL (wglCreateContext failed).\n\nMake sure you are in 65536 color mode, and try running -window.\n"); return false; } - if (!qwglMakeCurrent(hdc, baseRC)) + if (!qwglMakeCurrent(baseDC, baseRC)) { VID_Shutdown(); - Con_Printf("wglMakeCurrent(%d, %d) failed\n", hdc, baseRC); + Con_Printf("wglMakeCurrent(%d, %d) failed\n", baseDC, baseRC); return false; } @@ -985,11 +984,14 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp) gl_platform = "WGL"; gl_platformextensions = ""; + gl_videosyncavailable = false; + if (qwglGetExtensionsStringARB) - gl_platformextensions = qwglGetExtensionsStringARB(hdc); + gl_platformextensions = qwglGetExtensionsStringARB(baseDC); - gl_videosyncavailable = GL_CheckExtension("WGL_EXT_swap_control", wglswapintervalfuncs, NULL, false); - ReleaseDC(mainwindow, hdc); +// COMMANDLINEOPTION: Windows WGL: -novideosync disables WGL_EXT_swap_control + gl_videosyncavailable = GL_CheckExtension("WGL_EXT_swap_control", wglswapintervalfuncs, "-novideosync", false); + //ReleaseDC(mainwindow, hdc); GL_Init (); @@ -1016,9 +1018,6 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp) static void IN_Shutdown(void); void VID_Shutdown (void) { - HGLRC hRC = 0; - HDC hDC = 0; - if(vid_initialized == false) return; @@ -1026,18 +1025,14 @@ void VID_Shutdown (void) vid_initialized = false; IN_Shutdown(); - if (qwglGetCurrentContext) - hRC = qwglGetCurrentContext(); - if (qwglGetCurrentDC) - hDC = qwglGetCurrentDC(); if (qwglMakeCurrent) qwglMakeCurrent(NULL, NULL); - if (hRC && qwglDeleteContext) - qwglDeleteContext(hRC); + if (baseRC && qwglDeleteContext) + qwglDeleteContext(baseRC); // close the library before we get rid of the window GL_CloseLibrary(); - if (hDC && mainwindow) - ReleaseDC(mainwindow, hDC); + if (baseDC && mainwindow) + ReleaseDC(mainwindow, baseDC); AppActivate(false, false); if (mainwindow) DestroyWindow(mainwindow); @@ -1266,7 +1261,8 @@ void IN_StartupMouse (void) mouseinitialized = true; - if (COM_CheckParm ("-dinput")) +// COMMANDLINEOPTION: Windows Input: -nodinput disables DirectInput for mouse/joystick input, gl_finish 1 mode recommended if this option is used as otherwise it tends to stutter due to input backlog. + if (!COM_CheckParm ("-nodinput")) { dinput = IN_InitDInput (); @@ -1286,15 +1282,18 @@ void IN_StartupMouse (void) if (mouseparmsvalid) { +// COMMANDLINEOPTION: Windows GDI Input: -noforcemspd disables setting of mouse speed (-nodinput only, windows only) if ( COM_CheckParm ("-noforcemspd") ) newmouseparms[2] = originalmouseparms[2]; +// COMMANDLINEOPTION: Windows GDI Input: -noforcemaccel disables setting of mouse acceleration (-nodinput only, windows only) if ( COM_CheckParm ("-noforcemaccel") ) { newmouseparms[0] = originalmouseparms[0]; newmouseparms[1] = originalmouseparms[1]; } +// COMMANDLINEOPTION: Windows GDI Input: -noforcemparms disables setting of mouse parameters (-nodinput only, windows only) if ( COM_CheckParm ("-noforcemparms") ) { newmouseparms[0] = originalmouseparms[0]; @@ -1444,10 +1443,8 @@ void IN_MouseMove (usercmd_t *cmd) else { GetCursorPos (¤t_pos); - mx = current_pos.x - window_center_x + mx_accum; - my = current_pos.y - window_center_y + my_accum; - mx_accum = 0; - my_accum = 0; + mx = current_pos.x - window_center_x; + my = current_pos.y - window_center_y; } IN_Mouse(cmd, mx, my); @@ -1473,29 +1470,6 @@ void IN_Move (usercmd_t *cmd) } -/* -=========== -IN_Accumulate -=========== -*/ -void IN_Accumulate (void) -{ - if (mouseactive) - { - if (!dinput) - { - GetCursorPos (¤t_pos); - - mx_accum += current_pos.x - window_center_x; - my_accum += current_pos.y - window_center_y; - - // force the mouse to the center, so there's room to move - SetCursorPos (window_center_x, window_center_y); - } - } -} - - /* =================== IN_ClearStates @@ -1504,11 +1478,7 @@ IN_ClearStates void IN_ClearStates (void) { if (mouseactive) - { - mx_accum = 0; - my_accum = 0; mouse_oldbuttonstate = 0; - } } @@ -1528,6 +1498,7 @@ void IN_StartupJoystick (void) joy_avail = false; // abort startup if user requests no joystick +// COMMANDLINEOPTION: Windows Input: -nojoy disables joystick support, may be a small speed increase if (COM_CheckParm ("-nojoy") || COM_CheckParm("-safe")) return;