]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - vid_wgl.c
cleaned up vid_glx.c somewhat, it can now quit properly when the close button is...
[xonotic/darkplaces.git] / vid_wgl.c
index 1cc9cb01bebbea522a384385b480a147b9748888..12de0903703f94fbe565f7872ee557ef85cca23d 100644 (file)
--- a/vid_wgl.c
+++ b/vid_wgl.c
@@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 See the GNU General Public License for more details.
 
@@ -62,47 +62,42 @@ const char *gl_renderer;
 const char *gl_version;
 const char *gl_extensions;
 
-qboolean               DDActive;
-qboolean               scr_skipupdate;
+qboolean scr_skipupdate;
 
-static vmode_t modelist[MAX_MODE_LIST];
-static int             nummodes;
-static vmode_t *pcurrentmode;
-static vmode_t badmode;
+static vmode_t modelist[MAX_MODE_LIST];
+static int nummodes;
+static vmode_t badmode;
 
-static DEVMODE gdevmode;
-static qboolean        vid_initialized = false;
-static qboolean        windowed, leavecurrentmode;
+static DEVMODE gdevmode;
+static qboolean vid_initialized = false;
+static qboolean windowed, leavecurrentmode;
 static qboolean vid_canalttab = false;
 static qboolean vid_wassuspended = false;
-static int             usingmouse;
-extern qboolean        mouseactive;  // from in_win.c
-static HICON   hIcon;
+static int vid_usingmouse;
+extern qboolean mouseactive;  // from in_win.c
+static HICON hIcon;
 
-int                    DIBWidth, DIBHeight;
-RECT           WindowRect;
-DWORD          WindowStyle, ExWindowStyle;
+int DIBWidth, DIBHeight;
+RECT WindowRect;
+DWORD WindowStyle, ExWindowStyle;
 
-HWND   mainwindow;
+HWND mainwindow;
 
-int                    vid_modenum = NO_MODE;
-int                    vid_realmode;
-int                    vid_default = MODE_WINDOWED;
-static int     windowed_default;
-unsigned char  vid_curpal[256*3];
+int vid_modenum = NO_MODE;
+int vid_realmode;
+int vid_default = MODE_WINDOWED;
+static int windowed_default;
+unsigned char vid_curpal[256*3];
 
-HGLRC  baseRC;
-HDC            maindc;
-
-glvert_t glv;
+HGLRC baseRC;
+HDC maindc;
 
 HWND WINAPI InitializeWindow (HINSTANCE hInstance, int nCmdShow);
 
-viddef_t       vid;                            // global video state
-
-float          gldepthmin, gldepthmax;
+// global video state
+viddef_t vid;
 
-modestate_t    modestate = MS_UNINIT;
+modestate_t modestate = MS_UNINIT;
 
 void VID_MenuDraw (void);
 void VID_MenuKey (int key);
@@ -115,19 +110,14 @@ void VID_UpdateWindowStatus (void);
 
 //====================================
 
-// Note that 0 is MODE_WINDOWED
-//cvar_t               _vid_default_mode = {"_vid_default_mode","0", true};
-// Note that 3 is MODE_FULLSCREEN_DEFAULT
-//cvar_t               _vid_default_mode_win = {"_vid_default_mode_win","3", true};
-
-int                    window_center_x, window_center_y, window_x, window_y, window_width, window_height;
-RECT           window_rect;
+int window_center_x, window_center_y, window_x, window_y, window_width, window_height;
+RECT window_rect;
 
 // direct draw software compatability stuff
 
 void CenterWindow(HWND hWndCenter, int width, int height, BOOL lefttopjustify)
 {
-    int     CenterX, CenterY;
+       int CenterX, CenterY;
 
        CenterX = (GetSystemMetrics(SM_CXSCREEN) - width) / 2;
        CenterY = (GetSystemMetrics(SM_CYSCREEN) - height) / 2;
@@ -141,8 +131,8 @@ void CenterWindow(HWND hWndCenter, int width, int height, BOOL lefttopjustify)
 
 qboolean VID_SetWindowedMode (int modenum)
 {
-       int                             lastmodestate, width, height;
-       RECT                    rect;
+       int lastmodestate, width, height;
+       RECT rect;
 
        lastmodestate = modestate;
 
@@ -164,7 +154,7 @@ qboolean VID_SetWindowedMode (int modenum)
        height = rect.bottom - rect.top;
 
        // Create the DIB window
-       mainwindow = CreateWindowEx (ExWindowStyle, "DarkPlaces", "DarkPlacesGL", WindowStyle, rect.left, rect.top, width, height, NULL, NULL, global_hInstance, NULL);
+       mainwindow = CreateWindowEx (ExWindowStyle, gamename, gamename, WindowStyle, rect.left, rect.top, width, height, NULL, NULL, global_hInstance, NULL);
 
        if (!mainwindow)
                Sys_Error ("Couldn't create DIB window");
@@ -181,8 +171,6 @@ qboolean VID_SetWindowedMode (int modenum)
                vid.conheight = modelist[modenum].height;
        if (vid.conwidth > modelist[modenum].width)
                vid.conwidth = modelist[modenum].width;
-       vid.width = vid.conwidth;
-       vid.height = vid.conheight;
 
        SendMessage (mainwindow, WM_SETICON, (WPARAM)true, (LPARAM)hIcon);
        SendMessage (mainwindow, WM_SETICON, (WPARAM)false, (LPARAM)hIcon);
@@ -193,15 +181,14 @@ qboolean VID_SetWindowedMode (int modenum)
 
 qboolean VID_SetFullDIBMode (int modenum)
 {
-       int                             lastmodestate, width, height;
-       RECT                    rect;
+       int lastmodestate, width, height;
+       RECT rect;
 
        if (!leavecurrentmode)
        {
                gdevmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
                gdevmode.dmBitsPerPel = modelist[modenum].bpp;
-               gdevmode.dmPelsWidth = modelist[modenum].width <<
-                                                          modelist[modenum].halfscreen;
+               gdevmode.dmPelsWidth = modelist[modenum].width << modelist[modenum].halfscreen;
                gdevmode.dmPelsHeight = modelist[modenum].height;
                gdevmode.dmSize = sizeof (gdevmode);
 
@@ -230,7 +217,7 @@ qboolean VID_SetFullDIBMode (int modenum)
        height = rect.bottom - rect.top;
 
        // Create the DIB window
-       mainwindow = CreateWindowEx (ExWindowStyle, "DarkPlaces", "DarkPlacesGL", WindowStyle, rect.left, rect.top, width, height, NULL, NULL, global_hInstance, NULL);
+       mainwindow = CreateWindowEx (ExWindowStyle, gamename, gamename, WindowStyle, rect.left, rect.top, width, height, NULL, NULL, global_hInstance, NULL);
 
        if (!mainwindow)
                Sys_Error ("Couldn't create DIB window");
@@ -242,8 +229,6 @@ qboolean VID_SetFullDIBMode (int modenum)
                vid.conheight = modelist[modenum].height;
        if (vid.conwidth > modelist[modenum].width)
                vid.conwidth = modelist[modenum].width;
-       vid.width = vid.conwidth;
-       vid.height = vid.conheight;
 
 // needed because we're not getting WM_MOVE messages fullscreen on NT
        window_x = 0;
@@ -258,17 +243,13 @@ qboolean VID_SetFullDIBMode (int modenum)
 
 int VID_SetMode (int modenum)
 {
-       int                             original_mode, temp;
-       qboolean                stat;
-    MSG                                msg;
+       int original_mode;
+       qboolean stat = 0;
+       MSG msg;
 
        if ((windowed && (modenum != 0)) || (!windowed && (modenum < 1)) || (!windowed && (modenum >= nummodes)))
                Sys_Error ("Bad video mode\n");
 
-// so Con_Printfs don't mess us up by forcing vid and snd updates
-       temp = scr_disabled_for_loading;
-       scr_disabled_for_loading = true;
-
        CDAudio_Pause ();
 
        if (vid_modenum == NO_MODE)
@@ -278,30 +259,9 @@ int VID_SetMode (int modenum)
 
        // Set either the fullscreen or windowed mode
        if (modelist[modenum].type == MS_WINDOWED)
-       {
-//             if (vid_mouse.value && key_dest == key_game)
-//             {
-//                     stat = VID_SetWindowedMode(modenum);
-//                     usingmouse = true;
-//                     IN_ActivateMouse ();
-//                     IN_HideMouse ();
-//             }
-//             else
-//             {
-//                     usingmouse = false;
-//                     IN_DeactivateMouse ();
-//                     IN_ShowMouse ();
-//                     stat = VID_SetWindowedMode(modenum);
-//             }
                stat = VID_SetWindowedMode(modenum);
-       }
        else if (modelist[modenum].type == MS_FULLDIB)
-       {
                stat = VID_SetFullDIBMode(modenum);
-//             usingmouse = true;
-//             IN_ActivateMouse ();
-//             IN_HideMouse ();
-       }
        else
                Sys_Error ("VID_SetMode: Bad mode type in modelist");
 
@@ -310,7 +270,6 @@ int VID_SetMode (int modenum)
        VID_UpdateWindowStatus ();
 
        CDAudio_Resume ();
-       scr_disabled_for_loading = temp;
 
        if (!stat)
                Sys_Error ("Couldn't set video mode");
@@ -327,8 +286,8 @@ int VID_SetMode (int modenum)
 
        while (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
        {
-       TranslateMessage (&msg);
-       DispatchMessage (&msg);
+               TranslateMessage (&msg);
+               DispatchMessage (&msg);
        }
 
        Sleep (100);
@@ -343,8 +302,6 @@ int VID_SetMode (int modenum)
        if (!msg_suppress_1)
                Con_SafePrintf ("Video mode %s initialized.\n", VID_GetModeDescription (vid_modenum));
 
-       vid.recalc_refdef = 1;
-
        return true;
 }
 
@@ -356,7 +313,6 @@ VID_UpdateWindowStatus
 */
 void VID_UpdateWindowStatus (void)
 {
-
        window_rect.left = window_x;
        window_rect.top = window_y;
        window_rect.right = window_x + window_width;
@@ -370,104 +326,50 @@ void VID_UpdateWindowStatus (void)
 
 //====================================
 
-void VID_CheckMultitexture(void) 
-{
-       qglMTexCoord2f = NULL;
-       qglSelectTexture = NULL;
-       gl_mtexable = false;
-       // Check to see if multitexture is disabled
-       if (COM_CheckParm("-nomtex"))
-       {
-               Con_Printf("...multitexture disabled\n");
-               return;
-       }
-       // Test for ARB_multitexture
-       if (!COM_CheckParm("-SGISmtex") && strstr(gl_extensions, "GL_ARB_multitexture "))
-       {
-               Con_Printf("...using GL_ARB_multitexture\n");
-               qglMTexCoord2f = (void *) wglGetProcAddress("glMultiTexCoord2fARB");
-               qglSelectTexture = (void *) wglGetProcAddress("glActiveTextureARB");
-               gl_mtexable = true;
-               gl_mtex_enum = GL_TEXTURE0_ARB;
-       }
-       else if (strstr(gl_extensions, "GL_SGIS_multitexture ")) // Test for SGIS_multitexture (if ARB_multitexture not found)
-       {
-               Con_Printf("...using GL_SGIS_multitexture\n");
-               qglMTexCoord2f = (void *) wglGetProcAddress("glMTexCoord2fSGIS");
-               qglSelectTexture = (void *) wglGetProcAddress("glSelectTextureSGIS");
-               gl_mtexable = true;
-               gl_mtex_enum = TEXTURE0_SGIS;
-       }
-       else
-               Con_Printf("...multitexture disabled (not detected)\n");
-}
-
-void VID_CheckCVA(void)
-{
-       qglLockArraysEXT = NULL;
-       qglUnlockArraysEXT = NULL;
-       gl_supportslockarrays = false;
-       if (COM_CheckParm("-nocva"))
-       {
-               Con_Printf("...compiled vertex arrays disabled\n");
-               return;
-       }
-       if (strstr(gl_extensions, "GL_EXT_compiled_vertex_array"))
-       {
-               Con_Printf("...using compiled vertex arrays\n");
-               qglLockArraysEXT = (void *) wglGetProcAddress("glLockArraysEXT");
-               qglUnlockArraysEXT = (void *) wglGetProcAddress("glUnlockArraysEXT");
-               gl_supportslockarrays = true;
-       }
-}
-
 /*
 =================
-GL_BeginRendering
-
+VID_GetWindowSize
 =================
 */
-void GL_BeginRendering (int *x, int *y, int *width, int *height)
+void VID_GetWindowSize (int *x, int *y, int *width, int *height)
 {
        *x = *y = 0;
        *width = WindowRect.right - WindowRect.left;
        *height = WindowRect.bottom - WindowRect.top;
-
-//     if (!wglMakeCurrent( maindc, baseRC ))
-//             Sys_Error ("wglMakeCurrent failed");
-
-//     glViewport (*x, *y, *width, *height);
 }
 
 
-void GL_EndRendering (void)
+void VID_Finish (void)
 {
-       int usemouse;
-       if (r_render.value && !scr_skipupdate)
+       int vid_usemouse;
+       if (r_render.integer && !scr_skipupdate)
+       {
+               qglFinish();
                SwapBuffers(maindc);
+       }
 
 // handle the mouse state when windowed if that's changed
-       usemouse = false;
-       if (vid_mouse.value && key_dest == key_game)
-               usemouse = true;
+       vid_usemouse = false;
+       if (vid_mouse.integer && key_dest == key_game)
+               vid_usemouse = true;
        if (modestate == MS_FULLDIB)
-               usemouse = true;
-       if (!ActiveApp)
-               usemouse = false;
-       if (usemouse)
+               vid_usemouse = true;
+       if (!vid_activewindow)
+               vid_usemouse = false;
+       if (vid_usemouse)
        {
-               if (!usingmouse)
+               if (!vid_usingmouse)
                {
-                       usingmouse = true;
+                       vid_usingmouse = true;
                        IN_ActivateMouse ();
                        IN_HideMouse();
                }
        }
        else
        {
-               if (usingmouse)
+               if (vid_usingmouse)
                {
-                       usingmouse = false;
+                       vid_usingmouse = false;
                        IN_DeactivateMouse ();
                        IN_ShowMouse();
                }
@@ -481,10 +383,10 @@ void VID_SetDefaultMode (void)
 
 void VID_RestoreSystemGamma(void);
 
-void   VID_Shutdown (void)
+void VID_Shutdown (void)
 {
-       HGLRC hRC;
-       HDC       hDC;
+       HGLRC hRC;
+       HDC hDC;
        int i;
        GLuint temp[8192];
 
@@ -492,17 +394,17 @@ void      VID_Shutdown (void)
        {
                vid_canalttab = false;
                hRC = wglGetCurrentContext();
-       hDC = wglGetCurrentDC();
+               hDC = wglGetCurrentDC();
 
-       wglMakeCurrent(NULL, NULL);
+               wglMakeCurrent(NULL, NULL);
 
                // LordHavoc: free textures before closing (may help NVIDIA)
                for (i = 0;i < 8192;i++)
                        temp[i] = i+1;
-               glDeleteTextures(8192, temp);
+               qglDeleteTextures(8192, temp);
 
-       if (hRC)
-           wglDeleteContext(hRC);
+               if (hRC)
+                       wglDeleteContext(hRC);
 
                if (hDC && mainwindow)
                        ReleaseDC(mainwindow, hDC);
@@ -525,7 +427,7 @@ void        VID_Shutdown (void)
 
 BOOL bSetupPixelFormat(HDC hDC)
 {
-    static PIXELFORMATDESCRIPTOR pfd = {
+       static PIXELFORMATDESCRIPTOR pfd = {
        sizeof(PIXELFORMATDESCRIPTOR),  // size of this pfd
        1,                              // version number
        PFD_DRAW_TO_WINDOW              // support window
@@ -538,33 +440,33 @@ BOOL bSetupPixelFormat(HDC hDC)
        0,                              // shift bit ignored
        0,                              // no accumulation buffer
        0, 0, 0, 0,                     // accum bits ignored
-       32,                             // 32-bit z-buffer      
+       32,                             // 32-bit z-buffer
        0,                              // no stencil buffer
        0,                              // no auxiliary buffer
        PFD_MAIN_PLANE,                 // main layer
        0,                              // reserved
        0, 0, 0                         // layer masks ignored
-    };
-    int pixelformat;
-
-    if ( (pixelformat = ChoosePixelFormat(hDC, &pfd)) == 0 )
-    {
-        MessageBox(NULL, "ChoosePixelFormat failed", "Error", MB_OK);
-        return false;
-    }
-
-    if (SetPixelFormat(hDC, pixelformat, &pfd) == false)
-    {
-        MessageBox(NULL, "SetPixelFormat failed", "Error", MB_OK);
-        return false;
-    }
-
-    return true;
+       };
+       int pixelformat;
+
+       if ( (pixelformat = ChoosePixelFormat(hDC, &pfd)) == 0 )
+       {
+               MessageBox(NULL, "ChoosePixelFormat failed", "Error", MB_OK);
+               return false;
+       }
+
+       if (SetPixelFormat(hDC, pixelformat, &pfd) == false)
+       {
+               MessageBox(NULL, "SetPixelFormat failed", "Error", MB_OK);
+               return false;
+       }
+
+       return true;
 }
 
 
 
-byte scantokey[128] =
+qbyte scantokey[128] =
 {
 //     0           1      2     3     4     5       6       7      8         9      A       B           C     D            E           F
        0          ,27    ,'1'  ,'2'  ,'3'  ,'4'    ,'5'    ,'6'   ,'7'      ,'8'   ,'9'    ,'0'        ,'-'  ,'='         ,K_BACKSPACE,9     , // 0
@@ -577,20 +479,6 @@ byte scantokey[128] =
        0          ,0     ,0    ,0    ,0    ,0      ,0      ,0     ,0        ,0     ,0      ,0          ,0    ,0           ,0          ,0       // 7
 };
 
-/*
-byte shiftscantokey[128] =
-{ 
-//     0           1      2     3     4     5       6       7      8         9      A       B           C    D            E           F 
-       0          ,27    ,'!'  ,'@'  ,'#'  ,'$'    ,'%'    ,'^'   ,'&'      ,'*'   ,'('    ,')'        ,'_' ,'+'         ,K_BACKSPACE,9    , // 0
-       'Q'        ,'W'   ,'E'  ,'R'  ,'T'  ,'Y'    ,'U'    ,'I'   ,'O'      ,'P'   ,'{'    ,'}'        ,13  ,K_CTRL      ,'A'        ,'S'  , // 1
-       'D'        ,'F'   ,'G'  ,'H'  ,'J'  ,'K'    ,'L'    ,':'   ,'"'      ,'~'   ,K_SHIFT,'|'        ,'Z' ,'X'         ,'C'        ,'V'  , // 2
-       'B'        ,'N'   ,'M'  ,'<'  ,'>'  ,'?'    ,K_SHIFT,'*'   ,K_ALT    ,' '   ,0      ,K_F1       ,K_F2,K_F3        ,K_F4       ,K_F5 , // 3
-       K_F6       ,K_F7  ,K_F8 ,K_F9 ,K_F10,K_PAUSE,0      ,K_HOME,K_UPARROW,K_PGUP,'_'    ,K_LEFTARROW,'%' ,K_RIGHTARROW,'+'        ,K_END, // 4
-       K_DOWNARROW,K_PGDN,K_INS,K_DEL,0    ,0      ,0      ,K_F11 ,K_F12    ,0     ,0      ,0          ,0   ,0           ,0          ,0    , // 5
-       0          ,0     ,0    ,0    ,0    ,0      ,0      ,0     ,0        ,0     ,0      ,0          ,0   ,0           ,0          ,0    , // 6
-       0          ,0     ,0    ,0    ,0    ,0      ,0      ,0     ,0        ,0     ,0      ,0          ,0   ,0           ,0          ,0      // 7 
-}; 
-*/
 
 /*
 =======
@@ -606,8 +494,6 @@ int MapKey (int key, int virtualkey)
                return 0;
        if (scantokey[key] == 0)
                Con_DPrintf("key 0x%02x has no translation\n", key);
-//     if (scantokey[key] >= 0x20 && scantokey[key] < 0x7F)
-//             return realchar;
        return scantokey[key];
 }
 
@@ -627,7 +513,7 @@ ClearAllStates
 void ClearAllStates (void)
 {
        int             i;
-       
+
 // send an up event for each key, to make sure the server clears them all
        for (i=0 ; i<256 ; i++)
        {
@@ -639,6 +525,7 @@ void ClearAllStates (void)
 }
 
 void VID_RestoreGameGamma(void);
+extern qboolean host_loopactive;
 
 void AppActivate(BOOL fActive, BOOL minimize)
 /****************************************************************************
@@ -654,16 +541,16 @@ void AppActivate(BOOL fActive, BOOL minimize)
 {
        static BOOL     sound_active;
 
-       ActiveApp = fActive;
+       vid_activewindow = fActive;
        Minimized = minimize;
 
 // enable/disable sound on focus gain/loss
-       if (!ActiveApp && sound_active)
+       if (!vid_activewindow && sound_active)
        {
                S_BlockSound ();
                sound_active = false;
        }
-       else if (ActiveApp && !sound_active)
+       else if (vid_activewindow && !sound_active)
        {
                S_UnblockSound ();
                sound_active = true;
@@ -673,9 +560,6 @@ void AppActivate(BOOL fActive, BOOL minimize)
        {
                if (modestate == MS_FULLDIB)
                {
-//                     usingmouse = true;
-//                     IN_ActivateMouse ();
-//                     IN_HideMouse ();
                        if (vid_canalttab && vid_wassuspended)
                        {
                                vid_wassuspended = false;
@@ -686,37 +570,20 @@ void AppActivate(BOOL fActive, BOOL minimize)
                        // LordHavoc: from dabb, fix for alt-tab bug in NVidia drivers
                        MoveWindow(mainwindow,0,0,gdevmode.dmPelsWidth,gdevmode.dmPelsHeight,false);
                }
-//             else if ((modestate == MS_WINDOWED) && vid_mouse.value && key_dest == key_game)
-//             {
-//                     usingmouse = true;
-//                     IN_ActivateMouse ();
-//                     IN_HideMouse ();
-//             }
-               VID_RestoreGameGamma();
+               if (host_loopactive)
+                       VID_RestoreGameGamma();
        }
 
        if (!fActive)
        {
-               usingmouse = false;
+               vid_usingmouse = false;
                IN_DeactivateMouse ();
                IN_ShowMouse ();
-               if (modestate == MS_FULLDIB)
+               if (modestate == MS_FULLDIB && vid_canalttab)
                {
-//                     usingmouse = false;
-//                     IN_DeactivateMouse ();
-//                     IN_ShowMouse ();
-                       if (vid_canalttab)
-                       { 
-                               ChangeDisplaySettings (NULL, 0);
-                               vid_wassuspended = true;
-                       }
+                       ChangeDisplaySettings (NULL, 0);
+                       vid_wassuspended = true;
                }
-//             else if ((modestate == MS_WINDOWED) && vid_mouse.value)
-//             {
-//                     usingmouse = false;
-//                     IN_DeactivateMouse ();
-//                     IN_ShowMouse ();
-//             }
                VID_RestoreSystemGamma();
        }
 }
@@ -726,15 +593,15 @@ LONG CDAudio_MessageHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 /* main window procedure */
 LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM  wParam, LPARAM lParam)
 {
-    LONG    lRet = 1;
+       LONG    lRet = 1;
        int             fActive, fMinimized, temp;
        extern unsigned int uiWheelMessage;
 
        if ( uMsg == uiWheelMessage )
                uMsg = WM_MOUSEWHEEL;
 
-    switch (uMsg)
-    {
+       switch (uMsg)
+       {
                case WM_KILLFOCUS:
                        if (modestate == MS_FULLDIB)
                                ShowWindow(mainwindow, SW_SHOWMINNOACTIVE);
@@ -753,7 +620,7 @@ LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM  wParam, LPARAM lParam)
                case WM_SYSKEYDOWN:
                        Key_Event (MapKey(lParam, wParam), true);
                        break;
-                       
+
                case WM_KEYUP:
                case WM_SYSKEYUP:
                        Key_Event (MapKey(lParam, wParam), false);
@@ -790,7 +657,7 @@ LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM  wParam, LPARAM lParam)
                // JACK: This is the mouse wheel with the Intellimouse
                // Its delta is either positive or neg, and we generate the proper
                // Event.
-               case WM_MOUSEWHEEL: 
+               case WM_MOUSEWHEEL:
                        if ((short) HIWORD(wParam) > 0) {
                                Key_Event(K_MWHEELUP, true);
                                Key_Event(K_MWHEELUP, false);
@@ -800,14 +667,14 @@ LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM  wParam, LPARAM lParam)
                        }
                        break;
 
-       case WM_SIZE:
-            break;
+               case WM_SIZE:
+                       break;
 
-           case WM_CLOSE:
+               case WM_CLOSE:
                        if (MessageBox (mainwindow, "Are you sure you want to quit?", "Confirm Exit", MB_YESNO | MB_SETFOREGROUND | MB_ICONQUESTION) == IDYES)
                                Sys_Quit ();
 
-               break;
+                       break;
 
                case WM_ACTIVATE:
                        fActive = LOWORD(wParam);
@@ -819,27 +686,27 @@ LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM  wParam, LPARAM lParam)
 
                        break;
 
-           case WM_DESTROY:
-        {
+               case WM_DESTROY:
+               {
                        if (mainwindow)
                                DestroyWindow (mainwindow);
 
-            PostQuitMessage (0);
-        }
-        break;
+                       PostQuitMessage (0);
+               }
+               break;
 
                case MM_MCINOTIFY:
-            lRet = CDAudio_MessageHandler (hWnd, uMsg, wParam, lParam);
+                       lRet = CDAudio_MessageHandler (hWnd, uMsg, wParam, lParam);
                        break;
 
-       default:
-            /* pass all unhandled messages to DefWindowProc */
-            lRet = DefWindowProc (hWnd, uMsg, wParam, lParam);
-        break;
-    }
+               default:
+                       /* pass all unhandled messages to DefWindowProc */
+                       lRet = DefWindowProc (hWnd, uMsg, wParam, lParam);
+               break;
+       }
 
-    /* return 1 if handled message, 0 if not */
-    return lRet;
+       /* return 1 if handled message, 0 if not */
+       return lRet;
 }
 
 
@@ -853,7 +720,7 @@ int VID_NumModes (void)
        return nummodes;
 }
 
-       
+
 /*
 =================
 VID_GetModePtr
@@ -946,7 +813,6 @@ VID_NumModes_f
 */
 void VID_NumModes_f (void)
 {
-
        if (nummodes == 1)
                Con_Printf ("%d video mode is available\n", nummodes);
        else
@@ -962,7 +828,7 @@ VID_DescribeMode_f
 void VID_DescribeMode_f (void)
 {
        int             t, modenum;
-       
+
        modenum = atoi (Cmd_Argv(1));
 
        t = leavecurrentmode;
@@ -1031,49 +897,20 @@ void VID_InitDIB (HINSTANCE hInstance)
        WNDCLASS                wc;
 
        // Register the frame class
-    wc.style         = 0;
-    wc.lpfnWndProc   = (WNDPROC)MainWndProc;
-    wc.cbClsExtra    = 0;
-    wc.cbWndExtra    = 0;
-    wc.hInstance     = hInstance;
-    wc.hIcon         = 0;
-    wc.hCursor       = LoadCursor (NULL,IDC_ARROW);
+       wc.style         = 0;
+       wc.lpfnWndProc   = (WNDPROC)MainWndProc;
+       wc.cbClsExtra    = 0;
+       wc.cbWndExtra    = 0;
+       wc.hInstance     = hInstance;
+       wc.hIcon         = 0;
+       wc.hCursor       = LoadCursor (NULL,IDC_ARROW);
        wc.hbrBackground = NULL;
-    wc.lpszMenuName  = 0;
-    wc.lpszClassName = "DarkPlaces";
+       wc.lpszMenuName  = 0;
+       wc.lpszClassName = gamename;
 
-    if (!RegisterClass (&wc) )
+       if (!RegisterClass (&wc) )
                Sys_Error ("Couldn't register window class");
 
-       /*
-       modelist[0].type = MS_WINDOWED;
-
-       if (COM_CheckParm("-width"))
-               modelist[0].width = atoi(com_argv[COM_CheckParm("-width")+1]);
-       else
-               modelist[0].width = 640;
-
-       if (modelist[0].width < 320)
-               modelist[0].width = 320;
-
-       if (COM_CheckParm("-height"))
-               modelist[0].height= atoi(com_argv[COM_CheckParm("-height")+1]);
-       else
-               modelist[0].height = modelist[0].width * 240/320;
-
-       if (modelist[0].height < 240)
-               modelist[0].height = 240;
-
-       sprintf (modelist[0].modedesc, "%dx%d", modelist[0].width, modelist[0].height);
-
-       modelist[0].modenum = MODE_WINDOWED;
-       modelist[0].dib = 1;
-       modelist[0].fullscreen = 0;
-       modelist[0].halfscreen = 0;
-       modelist[0].bpp = 0;
-
-       nummodes = 1;
-       */
        if (COM_CheckParm("-width"))
                w = atoi(com_argv[COM_CheckParm("-width")+1]);
        else
@@ -1102,10 +939,8 @@ VID_InitFullDIB
 void VID_InitFullDIB (HINSTANCE hInstance)
 {
        DEVMODE devmode;
-//     int             i;
        int             modenum;
        int             originalnummodes;
-//     int             existingmode;
        int             numlowresmodes;
        int             j;
        int             bpp;
@@ -1132,41 +967,6 @@ void VID_InitFullDIB (HINSTANCE hInstance)
                                        VID_AddMode(MS_FULLDIB, devmode.dmPelsWidth >> 1, devmode.dmPelsHeight, 0, 1, 1, 1, devmode.dmBitsPerPel);
                                else
                                        VID_AddMode(MS_FULLDIB, devmode.dmPelsWidth, devmode.dmPelsHeight, 0, 0, 1, 1, devmode.dmBitsPerPel);
-                               /*
-                               modelist[nummodes].type = MS_FULLDIB;
-                               modelist[nummodes].width = devmode.dmPelsWidth;
-                               modelist[nummodes].height = devmode.dmPelsHeight;
-                               modelist[nummodes].modenum = 0;
-                               modelist[nummodes].halfscreen = 0;
-                               modelist[nummodes].dib = 1;
-                               modelist[nummodes].fullscreen = 1;
-                               modelist[nummodes].bpp = devmode.dmBitsPerPel;
-                               sprintf (modelist[nummodes].modedesc, "%dx%dx%d", devmode.dmPelsWidth, devmode.dmPelsHeight, devmode.dmBitsPerPel);
-
-                       // if the width is more than twice the height, reduce it by half because this
-                       // is probably a dual-screen monitor
-                               if (!COM_CheckParm("-noadjustaspect"))
-                               {
-                                       if (modelist[nummodes].width > (modelist[nummodes].height << 1))
-                                       {
-                                               modelist[nummodes].width >>= 1;
-                                               modelist[nummodes].halfscreen = 1;
-                                               sprintf (modelist[nummodes].modedesc, "%dx%dx%d", modelist[nummodes].width, modelist[nummodes].height, modelist[nummodes].bpp);
-                                       }
-                               }
-
-                               for (i=originalnummodes, existingmode = 0 ; i<nummodes ; i++)
-                               {
-                                       if ((modelist[nummodes].width == modelist[i].width) && (modelist[nummodes].height == modelist[i].height) && (modelist[nummodes].bpp == modelist[i].bpp))
-                                       {
-                                               existingmode = 1;
-                                               break;
-                                       }
-                               }
-
-                               if (!existingmode)
-                                       nummodes++;
-                               */
                        }
                }
 
@@ -1190,31 +990,6 @@ void VID_InitFullDIB (HINSTANCE hInstance)
 
                        if (ChangeDisplaySettings (&devmode, CDS_TEST | CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL)
                                VID_AddMode(MS_FULLDIB, devmode.dmPelsWidth, devmode.dmPelsHeight, 0, 0, 1, 1, devmode.dmBitsPerPel);
-                       /*
-                       {
-                               modelist[nummodes].type = MS_FULLDIB;
-                               modelist[nummodes].width = devmode.dmPelsWidth;
-                               modelist[nummodes].height = devmode.dmPelsHeight;
-                               modelist[nummodes].modenum = 0;
-                               modelist[nummodes].halfscreen = 0;
-                               modelist[nummodes].dib = 1;
-                               modelist[nummodes].fullscreen = 1;
-                               modelist[nummodes].bpp = devmode.dmBitsPerPel;
-                               sprintf (modelist[nummodes].modedesc, "%dx%dx%d", devmode.dmPelsWidth, devmode.dmPelsHeight, devmode.dmBitsPerPel);
-
-                               for (i=originalnummodes, existingmode = 0 ; i<nummodes ; i++)
-                               {
-                                       if ((modelist[nummodes].width == modelist[i].width) && (modelist[nummodes].height == modelist[i].height) && (modelist[nummodes].bpp == modelist[i].bpp))
-                                       {
-                                               existingmode = 1;
-                                               break;
-                                       }
-                               }
-
-                               if (!existingmode)
-                                       nummodes++;
-                       }
-                       */
                }
                switch (bpp)
                {
@@ -1237,7 +1012,7 @@ void VID_InitFullDIB (HINSTANCE hInstance)
                Con_SafePrintf ("No fullscreen DIB modes found\n");
 }
 
-static int grabsysgamma = true;
+//static int grabsysgamma = true;
 WORD systemgammaramps[3][256], currentgammaramps[3][256];
 
 int VID_SetGamma(float prescale, float gamma, float scale, float base)
@@ -1286,19 +1061,15 @@ void VID_RestoreSystemGamma(void)
 VID_Init
 ===================
 */
-void   VID_Init (void)
+void VID_Init (void)
 {
-       int             i;
-//     int             existingmode;
-       int             basenummodes, width, height, bpp, findbpp, done;
-       HDC             hdc;
-       DEVMODE devmode;
+       int i;
+       int basenummodes, width, height = 0, bpp, findbpp, done;
+       HDC hdc;
+       DEVMODE devmode;
 
        memset(&devmode, 0, sizeof(devmode));
 
-//     Cvar_RegisterVariable (&_vid_default_mode);
-//     Cvar_RegisterVariable (&_vid_default_mode_win);
-
        Cmd_AddCommand ("vid_nummodes", VID_NumModes_f);
        Cmd_AddCommand ("vid_describecurrentmode", VID_DescribeCurrentMode_f);
        Cmd_AddCommand ("vid_describemode", VID_DescribeMode_f);
@@ -1370,31 +1141,6 @@ void     VID_Init (void)
                        // if they want to force it, add the specified mode to the list
                                if (COM_CheckParm("-force") && (nummodes < MAX_MODE_LIST))
                                        VID_AddMode(MS_FULLDIB, width, height, 0, 0, 1, 1, bpp);
-                               /*
-                               {
-                                       modelist[nummodes].type = MS_FULLDIB;
-                                       modelist[nummodes].width = width;
-                                       modelist[nummodes].height = height;
-                                       modelist[nummodes].modenum = 0;
-                                       modelist[nummodes].halfscreen = 0;
-                                       modelist[nummodes].dib = 1;
-                                       modelist[nummodes].fullscreen = 1;
-                                       modelist[nummodes].bpp = bpp;
-                                       sprintf (modelist[nummodes].modedesc, "%dx%dx%d", devmode.dmPelsWidth, devmode.dmPelsHeight, devmode.dmBitsPerPel);
-
-                                       for (i=nummodes, existingmode = 0 ; i<nummodes ; i++)
-                                       {
-                                               if ((modelist[nummodes].width == modelist[i].width) && (modelist[nummodes].height == modelist[i].height) && (modelist[nummodes].bpp == modelist[i].bpp))
-                                               {
-                                                       existingmode = 1;
-                                                       break;
-                                               }
-                                       }
-
-                                       if (!existingmode)
-                                               nummodes++;
-                               }
-                               */
 
                                done = 0;
 
@@ -1493,9 +1239,6 @@ void      VID_Init (void)
        if (strncasecmp(gl_renderer,"Matrox G200 Direct3D",20)==0) // a D3D driver for GL? sigh...
                isG200 = true;
 
-//     sprintf (gldir, "%s/glquake", com_gamedir);
-//     Sys_mkdir (gldir);
-
        vid_realmode = vid_modenum;
 
        vid_menudrawfn = VID_MenuDraw;
@@ -1503,6 +1246,8 @@ void      VID_Init (void)
 
        strcpy (badmode.modedesc, "Bad mode");
        vid_canalttab = true;
+
+       vid_hidden = false;
 }
 
 
@@ -1511,25 +1256,25 @@ void    VID_Init (void)
 //========================================================
 
 extern void M_Menu_Options_f (void);
-extern void M_Print (int cx, int cy, char *str);
-extern void M_PrintWhite (int cx, int cy, char *str);
-extern void M_DrawCharacter (int cx, int line, int num);
-extern void M_DrawPic (int x, int y, qpic_t *pic);
+extern void M_Print (float cx, float cy, char *str);
+extern void M_PrintWhite (float cx, float cy, char *str);
+extern void M_DrawCharacter (float cx, float cy, int num);
+extern void M_DrawPic (float cx, float cy, char *picname);
 
-static int     vid_line, vid_wmodes;
+static int vid_wmodes;
 
 typedef struct
 {
-       int             modenum;
-       char    *desc;
-       int             iscur;
+       int modenum;
+       char *desc;
+       int iscur;
 } modedesc_t;
 
 #define MAX_COLUMN_SIZE                9
 #define MODE_AREA_HEIGHT       (MAX_COLUMN_SIZE + 2)
 #define MAX_MODEDESCS          (MAX_COLUMN_SIZE*3)
 
-static modedesc_t      modedescs[MAX_MODEDESCS];
+static modedesc_t modedescs[MAX_MODEDESCS];
 
 /*
 ================
@@ -1538,17 +1283,17 @@ VID_MenuDraw
 */
 void VID_MenuDraw (void)
 {
-       qpic_t          *p;
-       char            *ptr;
-       int                     lnummodes, i, k, column, row;
-       vmode_t         *pv;
+       cachepic_t *p;
+       char *ptr;
+       int lnummodes, i, k, column, row;
+       vmode_t *pv;
 
        p = Draw_CachePic ("gfx/vidmodes.lmp");
-       M_DrawPic ( (320-p->width)/2, 4, p);
+       M_DrawPic ( (320-p->width)/2, 4, "gfx/vidmodes.lmp");
 
        vid_wmodes = 0;
        lnummodes = VID_NumModes ();
-       
+
        for (i=1 ; (i<lnummodes) && (vid_wmodes < MAX_MODEDESCS) ; i++)
        {
                ptr = VID_GetModeDescription (i);
@@ -1616,3 +1361,4 @@ void VID_MenuKey (int key)
                break;
        }
 }
+