X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=vid_shared.c;h=2b1b370cdd695d52a8699165d1244d5cc2bb6b0d;hb=a2abf4addfa875d01c2775098277fea38ee99e24;hp=8c05f3648444fd0f184ef41e75ccea2f80fd5294;hpb=3c54a56b01dd702976ba0edcace302609b26a617;p=xonotic%2Fdarkplaces.git diff --git a/vid_shared.c b/vid_shared.c index 8c05f364..2b1b370c 100644 --- a/vid_shared.c +++ b/vid_shared.c @@ -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)) {