int gl_support_var = false;
// GL_NV_vertex_array_range2
int gl_support_var2 = false;
+// GL_EXT_texture_filter_anisotropic
+int gl_support_anisotropy = false;
// LordHavoc: if window is hidden, don't update screen
int vid_hidden = true;
char gl_driver[256];
// GL_ARB_multitexture
-//void (GLAPIENTRY *qglMultiTexCoord2f) (GLenum, GLfloat, GLfloat);
+void (GLAPIENTRY *qglMultiTexCoord2f) (GLenum, GLfloat, GLfloat);
+void (GLAPIENTRY *qglMultiTexCoord3f) (GLenum, GLfloat, GLfloat, GLfloat);
void (GLAPIENTRY *qglActiveTexture) (GLenum);
void (GLAPIENTRY *qglClientActiveTexture) (GLenum);
//void (GLAPIENTRY *qglReadBuffer)(GLenum mode);
void (GLAPIENTRY *qglEnable)(GLenum cap);
void (GLAPIENTRY *qglDisable)(GLenum cap);
-//GLboolean GLAPIENTRY *qglIsEnabled)(GLenum cap);
+GLboolean (GLAPIENTRY *qglIsEnabled)(GLenum cap);
void (GLAPIENTRY *qglEnableClientState)(GLenum cap);
void (GLAPIENTRY *qglDisableClientState)(GLenum cap);
void (GLAPIENTRY *qglClearDepth)(GLclampd depth);
void (GLAPIENTRY *qglDepthFunc)(GLenum func);
void (GLAPIENTRY *qglDepthMask)(GLboolean flag);
-//void (GLAPIENTRY *qglDepthRange)(GLclampd near_val, GLclampd far_val);
+void (GLAPIENTRY *qglDepthRange)(GLclampd near_val, GLclampd far_val);
void (GLAPIENTRY *qglColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
void (GLAPIENTRY *qglDrawRangeElements)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
void (GLAPIENTRY *qglDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
void (GLAPIENTRY *qglVertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
-//void (GLAPIENTRY *qglNormalPointer)(GLenum type, GLsizei stride, const GLvoid *ptr);
+void (GLAPIENTRY *qglNormalPointer)(GLenum type, GLsizei stride, const GLvoid *ptr);
void (GLAPIENTRY *qglColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
void (GLAPIENTRY *qglTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
-//void (GLAPIENTRY *qglArrayElement)(GLint i);
+void (GLAPIENTRY *qglArrayElement)(GLint i);
void (GLAPIENTRY *qglColor4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
-//void (GLAPIENTRY *qglTexCoord2f)(GLfloat s, GLfloat t);
-//void (GLAPIENTRY *qglVertex2f)(GLfloat x, GLfloat y);
-//void (GLAPIENTRY *qglVertex3f)(GLfloat x, GLfloat y, GLfloat z);
-//void (GLAPIENTRY *qglBegin)(GLenum mode);
-//void (GLAPIENTRY *qglEnd)(void);
+void (GLAPIENTRY *qglTexCoord2f)(GLfloat s, GLfloat t);
+void (GLAPIENTRY *qglTexCoord2f)(GLfloat s, GLfloat t);
+void (GLAPIENTRY *qglTexCoord3f)(GLfloat s, GLfloat t, GLfloat r);
+void (GLAPIENTRY *qglVertex2f)(GLfloat x, GLfloat y);
+void (GLAPIENTRY *qglVertex3f)(GLfloat x, GLfloat y, GLfloat z);
+void (GLAPIENTRY *qglBegin)(GLenum mode);
+void (GLAPIENTRY *qglEnd)(void);
void (GLAPIENTRY *qglMatrixMode)(GLenum mode);
void (GLAPIENTRY *qglOrtho)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val);
//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);
int failed = false;
const dllfunction_t *func;
- Con_Printf("checking for %s... ", name);
+ Con_DPrintf("checking for %s... ", name);
for (func = funcs;func && func->name;func++)
*func->funcvariable = NULL;
if (disableparm && COM_CheckParm(disableparm))
{
- Con_Printf("disabled by commandline\n");
+ Con_DPrintf("disabled by commandline\n");
return false;
}
if (!(*func->funcvariable = (void *) GL_GetProcAddress(func->name)))
{
if (!silent)
- Con_Printf("missing function \"%s\" - broken driver!\n", func->name);
+ Con_Printf("OpenGL extension \"%s\" is missing function \"%s\" - broken driver!\n", name, func->name);
failed = true;
}
}
// delay the return so it prints all missing functions
if (failed)
return false;
- Con_Printf("enabled\n");
+ Con_DPrintf("enabled\n");
return true;
}
else
{
- Con_Printf("not detected\n");
+ Con_DPrintf("not detected\n");
return false;
}
}
// {"glReadBuffer", (void **) &qglReadBuffer},
{"glEnable", (void **) &qglEnable},
{"glDisable", (void **) &qglDisable},
-// {"glIsEnabled", (void **) &qglIsEnabled},
+ {"glIsEnabled", (void **) &qglIsEnabled},
{"glEnableClientState", (void **) &qglEnableClientState},
{"glDisableClientState", (void **) &qglDisableClientState},
// {"glGetBooleanv", (void **) &qglGetBooleanv},
{"glClearDepth", (void **) &qglClearDepth},
{"glDepthFunc", (void **) &qglDepthFunc},
{"glDepthMask", (void **) &qglDepthMask},
-// {"glDepthRange", (void **) &qglDepthRange},
+ {"glDepthRange", (void **) &qglDepthRange},
{"glDrawElements", (void **) &qglDrawElements},
{"glColorMask", (void **) &qglColorMask},
{"glVertexPointer", (void **) &qglVertexPointer},
-// {"glNormalPointer", (void **) &qglNormalPointer},
+ {"glNormalPointer", (void **) &qglNormalPointer},
{"glColorPointer", (void **) &qglColorPointer},
{"glTexCoordPointer", (void **) &qglTexCoordPointer},
-// {"glArrayElement", (void **) &qglArrayElement},
+ {"glArrayElement", (void **) &qglArrayElement},
{"glColor4f", (void **) &qglColor4f},
-// {"glTexCoord2f", (void **) &qglTexCoord2f},
-// {"glVertex2f", (void **) &qglVertex2f},
-// {"glVertex3f", (void **) &qglVertex3f},
-// {"glBegin", (void **) &qglBegin},
-// {"glEnd", (void **) &qglEnd},
+ {"glTexCoord2f", (void **) &qglTexCoord2f},
+ {"glTexCoord3f", (void **) &qglTexCoord3f},
+ {"glVertex2f", (void **) &qglVertex2f},
+ {"glVertex3f", (void **) &qglVertex3f},
+ {"glBegin", (void **) &qglBegin},
+ {"glEnd", (void **) &qglEnd},
{"glMatrixMode", (void **) &qglMatrixMode},
{"glOrtho", (void **) &qglOrtho},
{"glFrustum", (void **) &qglFrustum},
{"glClearStencil", (void **) &qglClearStencil},
// {"glTexEnvf", (void **) &qglTexEnvf},
{"glTexEnvi", (void **) &qglTexEnvi},
-// {"glTexParameterf", (void **) &qglTexParameterf},
+ {"glTexParameterf", (void **) &qglTexParameterf},
// {"glTexParameterfv", (void **) &qglTexParameterfv},
{"glTexParameteri", (void **) &qglTexParameteri},
// {"glPixelStoref", (void **) &qglPixelStoref},
static dllfunction_t multitexturefuncs[] =
{
- //{"glMultiTexCoord2fARB", (void **) &qglMultiTexCoord2f},
+ {"glMultiTexCoord2fARB", (void **) &qglMultiTexCoord2f},
+ {"glMultiTexCoord3fARB", (void **) &qglMultiTexCoord3f},
{"glActiveTextureARB", (void **) &qglActiveTexture},
{"glClientActiveTextureARB", (void **) &qglClientActiveTexture},
{NULL, NULL}
if (!GL_CheckExtension("OpenGL 1.1.0", opengl110funcs, NULL, false))
Sys_Error("OpenGL 1.1.0 functions not found\n");
- Con_Printf ("GL_VENDOR: %s\n", gl_vendor);
- Con_Printf ("GL_RENDERER: %s\n", gl_renderer);
- Con_Printf ("GL_VERSION: %s\n", gl_version);
- Con_Printf ("GL_EXTENSIONS: %s\n", gl_extensions);
- Con_Printf ("%s_EXTENSIONS: %s\n", gl_platform, gl_platformextensions);
+ Con_DPrintf ("GL_VENDOR: %s\n", gl_vendor);
+ Con_DPrintf ("GL_RENDERER: %s\n", gl_renderer);
+ Con_DPrintf ("GL_VERSION: %s\n", gl_version);
+ Con_DPrintf ("GL_EXTENSIONS: %s\n", gl_extensions);
+ Con_DPrintf ("%s_EXTENSIONS: %s\n", gl_platform, gl_platformextensions);
- Con_Printf("Checking OpenGL extensions...\n");
+ Con_DPrintf("Checking OpenGL extensions...\n");
if (!GL_CheckExtension("glDrawRangeElements", drawrangeelementsfuncs, "-nodrawrangeelements", true))
GL_CheckExtension("GL_EXT_draw_range_elements", drawrangeelementsextfuncs, "-nodrawrangeelements", false);
if (gl_support_var)
gl_support_var2 = GL_CheckExtension("GL_NV_vertex_array_range2", NULL, "-novar2", false);
+ gl_support_anisotropy = GL_CheckExtension("GL_EXT_texture_filter_anisotropic", NULL, "-noanisotropy", false);
+
// we don't care if it's an extension or not, they are identical functions, so keep it simple in the rendering code
if (qglDrawRangeElements == NULL)
qglDrawRangeElements = qglDrawRangeElementsEXT;
Cvar_RegisterVariable(&m_filter);
Cmd_AddCommand("force_centerview", Force_CenterView_f);
Cmd_AddCommand("vid_restart", VID_Restart_f);
+ if (gamemode == GAME_GOODVSBAD2)
+ Cvar_Set("gl_combine", "0");
}
int current_vid_fullscreen;
Cvar_SetValueQuick(&vid_stencil, 0);
}
- Con_Printf("Starting video system\n");
+ Con_DPrintf("Starting video system\n");
if (!VID_Mode(vid_fullscreen.integer, vid_width.integer, vid_height.integer, vid_bitsperpixel.integer, vid_stencil.integer))
{
Con_Printf("Desired video mode fail, trying fallbacks...\n");