]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - vid_wgl.c
added EF_DOUBLESIDED (and internally RENDER_NOCULLFACE)
[xonotic/darkplaces.git] / vid_wgl.c
index e014659c7080e0a1f28a0a20b7cdba43f5358a9f..8cce143a75cf04f63b6b0f1f81ae8f2df3ceb8bf 100644 (file)
--- a/vid_wgl.c
+++ b/vid_wgl.c
@@ -19,6 +19,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
 // gl_vidnt.c -- NT GL vid component
 
+// we don't need a very new dinput
+#define DIRECTINPUT_VERSION 0x0300
+
 #include "quakedef.h"
 #include <windows.h>
 #include <dsound.h>
@@ -37,6 +40,8 @@ extern HINSTANCE global_hInstance;
 // Tell startup code that we have a client
 int cl_available = true;
 
+qboolean vid_supportrefreshrate = true;
+
 static int (WINAPI *qwglChoosePixelFormat)(HDC, CONST PIXELFORMATDESCRIPTOR *);
 static int (WINAPI *qwglDescribePixelFormat)(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR);
 //static int (WINAPI *qwglGetPixelFormat)(HDC);
@@ -291,7 +296,7 @@ void VID_Finish (void)
 
 
 
-static qbyte scantokey[128] =
+static unsigned char 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
@@ -466,6 +471,26 @@ void Sys_SendKeyEvents (void)
 
 LONG CDAudio_MessageHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 
+static keynum_t buttonremap[16] =
+{
+       K_MOUSE1,
+       K_MOUSE2,
+       K_MOUSE3,
+       K_MOUSE4,
+       K_MOUSE5,
+       K_MOUSE6,
+       K_MOUSE7,
+       K_MOUSE8,
+       K_MOUSE9,
+       K_MOUSE10,
+       K_MOUSE11,
+       K_MOUSE12,
+       K_MOUSE13,
+       K_MOUSE14,
+       K_MOUSE15,
+       K_MOUSE16,
+};
+
 /* main window procedure */
 LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM  wParam, LPARAM lParam)
 {
@@ -564,9 +589,9 @@ LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM  wParam, LPARAM lParam)
                        {
                                // perform button actions
                                int i;
-                               for (i=0 ; i<mouse_buttons ; i++)
+                               for (i=0 ; i<mouse_buttons && i < 16 ; i++)
                                        if ((temp ^ mouse_oldbuttonstate) & (1<<i))
-                                               Key_Event (K_MOUSE1 + i, 0, (temp & (1<<i)) != 0);
+                                               Key_Event (buttonremap[i], 0, (temp & (1<<i)) != 0);
                                mouse_oldbuttonstate = temp;
                        }
 
@@ -695,12 +720,12 @@ void VID_Init(void)
        wc.lpszClassName = "DarkPlacesWindowClass";
 
        if (!RegisterClass (&wc))
-               Sys_Error("Couldn't register window class\n");
+               Con_Printf ("Couldn't register window class\n");
 
        IN_Init();
 }
 
-int VID_InitMode (int fullscreen, int width, int height, int bpp)
+int VID_InitMode (int fullscreen, int width, int height, int bpp, int refreshrate)
 {
        int i;
        HDC hdc;
@@ -734,7 +759,7 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp)
        int depth;
 
        if (vid_initialized)
-               Sys_Error("VID_InitMode called when video is already initialised\n");
+               Sys_Error("VID_InitMode called when video is already initialised");
 
        // if stencil is enabled, ask for alpha too
        if (bpp >= 32)
@@ -764,10 +789,11 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp)
        vid_isfullscreen = false;
        if (fullscreen)
        {
-               gdevmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
+               gdevmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
                gdevmode.dmBitsPerPel = bpp;
                gdevmode.dmPelsWidth = width;
                gdevmode.dmPelsHeight = height;
+               gdevmode.dmDisplayFrequency = refreshrate;
                gdevmode.dmSize = sizeof (gdevmode);
                if (ChangeDisplaySettings (&gdevmode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
                {
@@ -906,14 +932,14 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp)
                return false;
        }
 
-       qglGetString = GL_GetProcAddress("glGetString");
-       qwglGetExtensionsStringARB = GL_GetProcAddress("wglGetExtensionsStringARB");
-       if (qglGetString == NULL)
+       if ((qglGetString = (const GLubyte* (GLAPIENTRY *)(GLenum name))GL_GetProcAddress("glGetString")) == NULL)
        {
                VID_Shutdown();
                Con_Print("glGetString not found\n");
                return false;
        }
+       if ((qwglGetExtensionsStringARB = (const char *(WINAPI *)(HDC hdc))GL_GetProcAddress("wglGetExtensionsStringARB")) == NULL)
+               Con_Print("wglGetExtensionsStringARB not found\n");
        gl_renderer = qglGetString(GL_RENDERER);
        gl_vendor = qglGetString(GL_VENDOR);
        gl_version = qglGetString(GL_VERSION);
@@ -951,6 +977,13 @@ int VID_InitMode (int fullscreen, int width, int height, int bpp)
        IN_StartupMouse ();
        IN_StartupJoystick ();
 
+       if (gl_videosyncavailable)
+       {
+               vid_usevsync = vid_vsync.integer;
+               vid_usingvsync = vid_vsync.integer;
+               qwglSwapIntervalEXT (vid_usevsync);
+       }
+
        return true;
 }
 
@@ -1255,9 +1288,9 @@ static void IN_MouseMove (void)
                }
 
                // perform button actions
-               for (i=0 ; i<mouse_buttons ; i++)
+               for (i=0 ; i<mouse_buttons && i < 16 ; i++)
                        if ((mstate_di ^ mouse_oldbuttonstate) & (1<<i))
-                               Key_Event (K_MOUSE1 + i, 0, (mstate_di & (1<<i)) != 0);
+                               Key_Event (buttonremap[i], 0, (mstate_di & (1<<i)) != 0);
                mouse_oldbuttonstate = mstate_di;
 
                in_mouse_x = mx;