]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - vid_shared.c
Elric's changes:
[xonotic/darkplaces.git] / vid_shared.c
index 8c05f3648444fd0f184ef41e75ccea2f80fd5294..2b1b370cdd695d52a8699165d1244d5cc2bb6b0d 100644 (file)
@@ -18,7 +18,7 @@ int gl_supportslockarrays = false;
 int gl_videosyncavailable = false;
 // stencil available
 int gl_stencil = false;
-// GL_EXT_texture3D
+// 3D textures available
 int gl_texture3d = false;
 // GL_ARB_texture_cubemap
 int gl_texturecubemap = false;
@@ -146,9 +146,10 @@ void (GLAPIENTRY *qglStencilMask)(GLuint mask);
 void (GLAPIENTRY *qglStencilOp)(GLenum fail, GLenum zfail, GLenum zpass);
 void (GLAPIENTRY *qglClearStencil)(GLint s);
 
-//void (GLAPIENTRY *qglTexEnvf)(GLenum target, GLenum pname, GLfloat param);
+void (GLAPIENTRY *qglTexEnvf)(GLenum target, GLenum pname, GLfloat param);
 void (GLAPIENTRY *qglTexEnvi)(GLenum target, GLenum pname, GLint param);
-//void (GLAPIENTRY *qglTexParameterf)(GLenum target, GLenum pname, GLfloat param);
+void (GLAPIENTRY *qglTexParameterf)(GLenum target, GLenum pname, GLfloat param);
+void (GLAPIENTRY *qglTexParameterfv)(GLenum target, GLenum pname, GLfloat *params);
 void (GLAPIENTRY *qglTexParameteri)(GLenum target, GLenum pname, GLint param);
 
 void (GLAPIENTRY *qglGenTextures)(GLsizei n, GLuint *textures);
@@ -174,15 +175,18 @@ void (GLAPIENTRY *qglDrawRangeElementsEXT)(GLenum mode, GLuint start, GLuint end
 
 //void (GLAPIENTRY *qglColorTableEXT)(int, int, int, int, int, const void *);
 
-void (GLAPIENTRY *qglTexImage3DEXT)(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
-void (GLAPIENTRY *qglTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
-void (GLAPIENTRY *qglCopyTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+void (GLAPIENTRY *qglTexImage3D)(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+void (GLAPIENTRY *qglTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+void (GLAPIENTRY *qglCopyTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
 
+void (GLAPIENTRY *qglScissor)(GLint x, GLint y, GLsizei width, GLsizei height);
 
-int GL_CheckExtension(const char *name, const gl_extensionfunctionlist_t *funcs, const char *disableparm, int silent)
+void (GLAPIENTRY *qglPolygonOffset)(GLfloat factor, GLfloat units);
+
+int GL_CheckExtension(const char *name, const dllfunction_t *funcs, const char *disableparm, int silent)
 {
        int failed = false;
-       const gl_extensionfunctionlist_t *func;
+       const dllfunction_t *func;
 
        Con_Printf("checking for %s...  ", name);
 
@@ -220,7 +224,7 @@ int GL_CheckExtension(const char *name, const gl_extensionfunctionlist_t *funcs,
        }
 }
 
-static gl_extensionfunctionlist_t opengl110funcs[] =
+static dllfunction_t opengl110funcs[] =
 {
        {"glClearColor", (void **) &qglClearColor},
        {"glClear", (void **) &qglClear},
@@ -281,9 +285,10 @@ static gl_extensionfunctionlist_t opengl110funcs[] =
        {"glStencilMask", (void **) &qglStencilMask},
        {"glStencilOp", (void **) &qglStencilOp},
        {"glClearStencil", (void **) &qglClearStencil},
-//     {"glTexEnvf", (void **) &qglTexEnvf},
+       {"glTexEnvf", (void **) &qglTexEnvf},
        {"glTexEnvi", (void **) &qglTexEnvi},
-//     {"glTexParameterf", (void **) &qglTexParameterf},
+       {"glTexParameterf", (void **) &qglTexParameterf},
+       {"glTexParameterfv", (void **) &qglTexParameterfv},
        {"glTexParameteri", (void **) &qglTexParameteri},
        {"glPixelStoref", (void **) &qglPixelStoref},
        {"glPixelStorei", (void **) &qglPixelStorei},
@@ -301,22 +306,24 @@ static gl_extensionfunctionlist_t opengl110funcs[] =
        {"glCopyTexImage2D", (void **) &qglCopyTexImage2D},
        {"glCopyTexSubImage1D", (void **) &qglCopyTexSubImage1D},
        {"glCopyTexSubImage2D", (void **) &qglCopyTexSubImage2D},
+       {"glScissor", (void **) &qglScissor},
+       {"glPolygonOffset", (void **) &qglPolygonOffset},
        {NULL, NULL}
 };
 
-static gl_extensionfunctionlist_t drawrangeelementsfuncs[] =
+static dllfunction_t drawrangeelementsfuncs[] =
 {
        {"glDrawRangeElements", (void **) &qglDrawRangeElements},
        {NULL, NULL}
 };
 
-static gl_extensionfunctionlist_t drawrangeelementsextfuncs[] =
+static dllfunction_t drawrangeelementsextfuncs[] =
 {
        {"glDrawRangeElementsEXT", (void **) &qglDrawRangeElementsEXT},
        {NULL, NULL}
 };
 
-static gl_extensionfunctionlist_t multitexturefuncs[] =
+static dllfunction_t multitexturefuncs[] =
 {
        {"glMultiTexCoord2fARB", (void **) &qglMultiTexCoord2f},
        {"glActiveTextureARB", (void **) &qglActiveTexture},
@@ -324,18 +331,18 @@ static gl_extensionfunctionlist_t multitexturefuncs[] =
        {NULL, NULL}
 };
 
-static gl_extensionfunctionlist_t compiledvertexarrayfuncs[] =
+static dllfunction_t compiledvertexarrayfuncs[] =
 {
        {"glLockArraysEXT", (void **) &qglLockArraysEXT},
        {"glUnlockArraysEXT", (void **) &qglUnlockArraysEXT},
        {NULL, NULL}
 };
 
-static gl_extensionfunctionlist_t texture3dfuncs[] =
+static dllfunction_t texture3dextfuncs[] =
 {
-       {"glTexImage3DEXT", (void **) &qglTexImage3DEXT},
-       {"glTexSubImage3DEXT", (void **) &qglTexSubImage3DEXT},
-       {"glCopyTexSubImage3DEXT", (void **) &qglCopyTexSubImage3DEXT},
+       {"glTexImage3DEXT", (void **) &qglTexImage3D},
+       {"glTexSubImage3DEXT", (void **) &qglTexSubImage3D},
+       {"glCopyTexSubImage3DEXT", (void **) &qglCopyTexSubImage3D},
        {NULL, NULL}
 };
 
@@ -369,7 +376,7 @@ void VID_CheckExtensions(void)
                        gl_dot3arb = GL_CheckExtension("GL_ARB_texture_env_dot3", NULL, "-nodot3", false);
        }
 
-       gl_texture3d = GL_CheckExtension("GL_EXT_texture3D", texture3dfuncs, "-notexture3d", false);
+       gl_texture3d = GL_CheckExtension("GL_EXT_texture3D", texture3dextfuncs, "-notexture3d", false);
        gl_texturecubemap = GL_CheckExtension("GL_ARB_texture_cube_map", NULL, "-nocubemap", false);
        gl_supportslockarrays = GL_CheckExtension("GL_EXT_compiled_vertex_array", compiledvertexarrayfuncs, "-nocva", false);
 
@@ -440,8 +447,6 @@ void IN_Mouse(usercmd_t *cmd, float mx, float my)
 
 void VID_Shared_Init(void)
 {
-       int i;
-
        Cvar_RegisterVariable(&vid_fullscreen);
        Cvar_RegisterVariable(&vid_width);
        Cvar_RegisterVariable(&vid_height);
@@ -454,22 +459,6 @@ void VID_Shared_Init(void)
        Cvar_RegisterVariable(&m_filter);
        Cmd_AddCommand("force_centerview", Force_CenterView_f);
        Cmd_AddCommand("vid_restart", VID_Restart_f);
-
-// interpret command-line parameters
-       if ((i = COM_CheckParm("-window")) != 0)
-               Cvar_SetValueQuick(&vid_fullscreen, false);
-       if ((i = COM_CheckParm("-fullscreen")) != 0)
-               Cvar_SetValueQuick(&vid_fullscreen, true);
-       if ((i = COM_CheckParm("-width")) != 0)
-               Cvar_SetQuick(&vid_width, com_argv[i+1]);
-       if ((i = COM_CheckParm("-height")) != 0)
-               Cvar_SetQuick(&vid_height, com_argv[i+1]);
-       if ((i = COM_CheckParm("-bpp")) != 0)
-               Cvar_SetQuick(&vid_bitsperpixel, com_argv[i+1]);
-       if ((i = COM_CheckParm("-nostencil")) != 0)
-               Cvar_SetValueQuick(&vid_stencil, 0);
-       if ((i = COM_CheckParm("-stencil")) != 0)
-               Cvar_SetValueQuick(&vid_stencil, 1);
 }
 
 int current_vid_fullscreen;
@@ -528,8 +517,36 @@ void VID_Restart_f(void)
        VID_OpenSystems();
 }
 
+int vid_commandlinecheck = true;
 void VID_Open(void)
 {
+       int i;
+       if (vid_commandlinecheck)
+       {
+               // interpret command-line parameters
+               vid_commandlinecheck = false;
+               if ((i = COM_CheckParm("-window")) != 0)
+                       Cvar_SetValueQuick(&vid_fullscreen, false);
+               if ((i = COM_CheckParm("-fullscreen")) != 0)
+                       Cvar_SetValueQuick(&vid_fullscreen, true);
+               if ((i = COM_CheckParm("-width")) != 0)
+                       Cvar_SetQuick(&vid_width, com_argv[i+1]);
+               if ((i = COM_CheckParm("-height")) != 0)
+                       Cvar_SetQuick(&vid_height, com_argv[i+1]);
+               if ((i = COM_CheckParm("-bpp")) != 0)
+                       Cvar_SetQuick(&vid_bitsperpixel, com_argv[i+1]);
+               if ((i = COM_CheckParm("-nostencil")) != 0)
+                       Cvar_SetValueQuick(&vid_stencil, 0);
+               if ((i = COM_CheckParm("-stencil")) != 0)
+                       Cvar_SetValueQuick(&vid_stencil, 1);
+       }
+
+       if (vid_stencil.integer && vid_bitsperpixel.integer != 32)
+       {
+               Con_Printf("vid_stencil not allowed without vid_bitsperpixel 32, turning off vid_stencil\n");
+               Cvar_SetValueQuick(&vid_stencil, 0);
+       }
+
        Con_Printf("Starting video system\n");
        if (!VID_Mode(vid_fullscreen.integer, vid_width.integer, vid_height.integer, vid_bitsperpixel.integer, vid_stencil.integer))
        {