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;
+// GL_NV_texture_shader
+int gl_textureshader = false;
// LordHavoc: if window is hidden, don't update screen
int vid_hidden = true;
cvar_t vid_fullscreen = {CVAR_SAVE, "vid_fullscreen", "1"};
cvar_t vid_width = {CVAR_SAVE, "vid_width", "640"};
cvar_t vid_height = {CVAR_SAVE, "vid_height", "480"};
-cvar_t vid_bitsperpixel = {CVAR_SAVE, "vid_bitsperpixel", "16"};
-cvar_t vid_stencil = {CVAR_SAVE, "vid_stencil", "0"};
+cvar_t vid_bitsperpixel = {CVAR_SAVE, "vid_bitsperpixel", "32"};
cvar_t vid_mouse = {CVAR_SAVE, "vid_mouse", "1"};
-cvar_t gl_combine = {0, "gl_combine", "1"};
+cvar_t gl_combine = {CVAR_SAVE, "gl_combine", "1"};
cvar_t in_pitch_min = {0, "in_pitch_min", "-70"};
cvar_t in_pitch_max = {0, "in_pitch_max", "80"};
cvar_t v_color_white_r = {CVAR_SAVE, "v_color_white_r", "1"};
cvar_t v_color_white_g = {CVAR_SAVE, "v_color_white_g", "1"};
cvar_t v_color_white_b = {CVAR_SAVE, "v_color_white_b", "1"};
-cvar_t v_overbrightbits = {CVAR_SAVE, "v_overbrightbits", "0"};
-cvar_t v_hwgamma = {0, "v_hwgamma", "1"};
+cvar_t v_hwgamma = {CVAR_SAVE, "v_hwgamma", "1"};
// brand of graphics chip
const char *gl_vendor;
void (GLAPIENTRY *qglClearStencil)(GLint s);
//void (GLAPIENTRY *qglTexEnvf)(GLenum target, GLenum pname, GLfloat param);
+void (GLAPIENTRY *qglTexEnvfv)(GLenum target, GLenum pname, const GLfloat *params);
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);
{"glStencilOp", (void **) &qglStencilOp},
{"glClearStencil", (void **) &qglClearStencil},
// {"glTexEnvf", (void **) &qglTexEnvf},
+ {"glTexEnvfv", (void **) &qglTexEnvfv},
{"glTexEnvi", (void **) &qglTexEnvi},
-// {"glTexParameterf", (void **) &qglTexParameterf},
+ {"glTexParameterf", (void **) &qglTexParameterf},
// {"glTexParameterfv", (void **) &qglTexParameterfv},
{"glTexParameteri", (void **) &qglTexParameteri},
// {"glPixelStoref", (void **) &qglPixelStoref},
void VID_CheckExtensions(void)
{
- gl_stencil = vid_stencil.integer;
+ gl_stencil = vid_bitsperpixel.integer == 32;
gl_combine_extension = false;
gl_dot3arb = false;
gl_supportslockarrays = 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);
+
+ gl_textureshader = GL_CheckExtension("GL_NV_texture_shader", NULL, "-notextureshader", 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;
}
static float cachegamma, cachebrightness, cachecontrast, cacheblack[3], cachegrey[3], cachewhite[3];
-static int cacheoverbrightbits = -1, cachecolorenable, cachehwgamma;
+static int cachecolorenable, cachehwgamma;
#define BOUNDCVAR(cvar, m1, m2) c = &(cvar);f = bound(m1, c->value, m2);if (c->value != f) Cvar_SetValueQuick(c, f);
void VID_UpdateGamma(qboolean force)
{
if (!force
&& vid_usinghwgamma == (vid_allowhwgamma && v_hwgamma.integer)
- && v_overbrightbits.integer == cacheoverbrightbits
&& v_gamma.value == cachegamma
&& v_contrast.value == cachecontrast
&& v_brightness.value == cachebrightness
BOUNDCVAR(v_color_white_g, 1, 5);cachewhite[1] = v_color_white_g.value;
BOUNDCVAR(v_color_white_b, 1, 5);cachewhite[2] = v_color_white_b.value;
cachecolorenable = v_color_enable.integer;
- cacheoverbrightbits = v_overbrightbits.integer;
cachehwgamma = v_hwgamma.integer;
if (cachecolorenable)
{
- BuildGammaTable16((float) (1 << cacheoverbrightbits), invpow(0.5, 1 - cachegrey[0]), cachewhite[0], cacheblack[0], vid_gammaramps);
- BuildGammaTable16((float) (1 << cacheoverbrightbits), invpow(0.5, 1 - cachegrey[1]), cachewhite[1], cacheblack[1], vid_gammaramps + 256);
- BuildGammaTable16((float) (1 << cacheoverbrightbits), invpow(0.5, 1 - cachegrey[2]), cachewhite[2], cacheblack[2], vid_gammaramps + 512);
+ BuildGammaTable16(1.0f, invpow(0.5, 1 - cachegrey[0]), cachewhite[0], cacheblack[0], vid_gammaramps);
+ BuildGammaTable16(1.0f, invpow(0.5, 1 - cachegrey[1]), cachewhite[1], cacheblack[1], vid_gammaramps + 256);
+ BuildGammaTable16(1.0f, invpow(0.5, 1 - cachegrey[2]), cachewhite[2], cacheblack[2], vid_gammaramps + 512);
}
else
{
- BuildGammaTable16((float) (1 << cacheoverbrightbits), cachegamma, cachecontrast, cachebrightness, vid_gammaramps);
- BuildGammaTable16((float) (1 << cacheoverbrightbits), cachegamma, cachecontrast, cachebrightness, vid_gammaramps + 256);
- BuildGammaTable16((float) (1 << cacheoverbrightbits), cachegamma, cachecontrast, cachebrightness, vid_gammaramps + 512);
+ BuildGammaTable16(1.0f, cachegamma, cachecontrast, cachebrightness, vid_gammaramps);
+ BuildGammaTable16(1.0f, cachegamma, cachecontrast, cachebrightness, vid_gammaramps + 256);
+ BuildGammaTable16(1.0f, cachegamma, cachecontrast, cachebrightness, vid_gammaramps + 512);
}
vid_hardwaregammasupported = VID_SetGamma(vid_gammaramps);
Cvar_RegisterVariable(&v_color_white_b);
Cvar_RegisterVariable(&v_hwgamma);
- Cvar_RegisterVariable(&v_overbrightbits);
Cvar_RegisterVariable(&vid_fullscreen);
Cvar_RegisterVariable(&vid_width);
Cvar_RegisterVariable(&vid_height);
Cvar_RegisterVariable(&vid_bitsperpixel);
- Cvar_RegisterVariable(&vid_stencil);
Cvar_RegisterVariable(&vid_mouse);
Cvar_RegisterVariable(&gl_combine);
Cvar_RegisterVariable(&in_pitch_min);
int current_vid_width;
int current_vid_height;
int current_vid_bitsperpixel;
-int current_vid_stencil;
-extern int VID_InitMode (int fullscreen, int width, int height, int bpp, int stencil);
-int VID_Mode(int fullscreen, int width, int height, int bpp, int stencil)
+extern int VID_InitMode (int fullscreen, int width, int height, int bpp);
+int VID_Mode(int fullscreen, int width, int height, int bpp)
{
- Con_Printf("Video: %s %dx%dx%d %s\n", fullscreen ? "fullscreen" : "window", width, height, bpp, stencil ? "with stencil" : "without stencil");
- if (VID_InitMode(fullscreen, width, height, bpp, stencil))
+ Con_Printf("Video: %s %dx%dx%d\n", fullscreen ? "fullscreen" : "window", width, height, bpp);
+ if (VID_InitMode(fullscreen, width, height, bpp))
{
current_vid_fullscreen = fullscreen;
current_vid_width = width;
current_vid_height = height;
current_vid_bitsperpixel = bpp;
- current_vid_stencil = stencil;
Cvar_SetValueQuick(&vid_fullscreen, fullscreen);
Cvar_SetValueQuick(&vid_width, width);
Cvar_SetValueQuick(&vid_height, height);
Cvar_SetValueQuick(&vid_bitsperpixel, bpp);
- Cvar_SetValueQuick(&vid_stencil, stencil);
return true;
}
else
static void VID_OpenSystems(void)
{
R_Modules_Start();
- S_Open();
- CDAudio_Open();
+ S_Startup();
+ CDAudio_Startup();
}
static void VID_CloseSystems(void)
{
- CDAudio_Close();
- S_Close();
+ CDAudio_Shutdown();
+ S_Shutdown();
R_Modules_Shutdown();
}
void VID_Restart_f(void)
{
- Con_Printf("VID_Restart: changing from %s %dx%dx%dbpp %s, to %s %dx%dx%dbpp %s.\n",
- current_vid_fullscreen ? "fullscreen" : "window", current_vid_width, current_vid_height, current_vid_bitsperpixel, current_vid_stencil ? "with stencil" : "without stencil",
- vid_fullscreen.integer ? "fullscreen" : "window", vid_width.integer, vid_height.integer, vid_bitsperpixel.integer, vid_stencil.integer ? "with stencil" : "without stencil");
+ Con_Printf("VID_Restart: changing from %s %dx%dx%dbpp, to %s %dx%dx%dbpp.\n",
+ current_vid_fullscreen ? "fullscreen" : "window", current_vid_width, current_vid_height, current_vid_bitsperpixel,
+ vid_fullscreen.integer ? "fullscreen" : "window", vid_width.integer, vid_height.integer, vid_bitsperpixel.integer);
VID_Close();
- if (!VID_Mode(vid_fullscreen.integer, vid_width.integer, vid_height.integer, vid_bitsperpixel.integer, vid_stencil.integer))
+ if (!VID_Mode(vid_fullscreen.integer, vid_width.integer, vid_height.integer, vid_bitsperpixel.integer))
{
Con_Printf("Video mode change failed\n");
- if (!VID_Mode(current_vid_fullscreen, current_vid_width, current_vid_height, current_vid_bitsperpixel, current_vid_stencil))
+ if (!VID_Mode(current_vid_fullscreen, current_vid_width, current_vid_height, current_vid_bitsperpixel))
Sys_Error("Unable to restore to last working video mode\n");
}
VID_OpenSystems();
Cvar_SetValueQuick(&vid_height, height);
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_DPrintf("Starting video system\n");
- if (!VID_Mode(vid_fullscreen.integer, vid_width.integer, vid_height.integer, vid_bitsperpixel.integer, vid_stencil.integer))
+ if (!VID_Mode(vid_fullscreen.integer, vid_width.integer, vid_height.integer, vid_bitsperpixel.integer))
{
Con_Printf("Desired video mode fail, trying fallbacks...\n");
- if (!vid_stencil.integer || !VID_Mode(vid_fullscreen.integer, vid_width.integer, vid_height.integer, vid_bitsperpixel.integer, false))
+ if (vid_fullscreen.integer)
{
- if (vid_fullscreen.integer)
- {
- if (!VID_Mode(true, 640, 480, 16, false))
- if (!VID_Mode(false, 640, 480, 16, false))
- Sys_Error("Video modes failed\n");
- }
- else
- Sys_Error("Windowed video failed\n");
+ if (!VID_Mode(true, 640, 480, 16))
+ if (!VID_Mode(false, 640, 480, 16))
+ Sys_Error("Video modes failed\n");
}
+ else
+ Sys_Error("Windowed video failed\n");
}
VID_OpenSystems();
}