Add gl_lightmap_nearest.
Add a warning if the world moves. Fix tags to not loop on non-looping animations. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4630 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
7cbb9d61ca
commit
f18c928973
6 changed files with 83 additions and 16 deletions
|
@ -808,7 +808,7 @@ void M_Menu_Render_f (void)
|
||||||
{
|
{
|
||||||
MB_REDTEXT("Rendering Options", false),
|
MB_REDTEXT("Rendering Options", false),
|
||||||
MB_TEXT("^Ue080^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue082", false),
|
MB_TEXT("^Ue080^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue081^Ue082", false),
|
||||||
MB_CHECKBOXCVAR("Calculate VIS", r_novis, 0),
|
MB_CHECKBOXCVAR("Disable VIS", r_novis, 0),
|
||||||
MB_CHECKBOXCVAR("Fast Sky", r_fastsky, 0),
|
MB_CHECKBOXCVAR("Fast Sky", r_fastsky, 0),
|
||||||
MB_CHECKBOXCVAR("Disable Model Lerp", r_nolerp, 0),
|
MB_CHECKBOXCVAR("Disable Model Lerp", r_nolerp, 0),
|
||||||
MB_CHECKBOXCVAR("Disable Framegroup Lerp", r_noframegrouplerp, 0),
|
MB_CHECKBOXCVAR("Disable Framegroup Lerp", r_noframegrouplerp, 0),
|
||||||
|
@ -2505,16 +2505,21 @@ const char *Mod_FrameNameForNum(model_t *model, int num);
|
||||||
const char *Mod_SkinNameForNum(model_t *model, int num);
|
const char *Mod_SkinNameForNum(model_t *model, int num);
|
||||||
|
|
||||||
#include "com_mesh.h"
|
#include "com_mesh.h"
|
||||||
static void M_BoneDisplay(galiasbone_t *b, int *y, int depth, int parent, int first, int last)
|
static void M_BoneDisplay(entity_t *e, galiasbone_t *b, int *y, int depth, int parent, int first, int last)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = first; i < last; i++)
|
for (i = first; i < last; i++)
|
||||||
{
|
{
|
||||||
if (b[i].parent == parent)
|
if (b[i].parent == parent)
|
||||||
{
|
{
|
||||||
Draw_FunString(depth*16, *y, va("%i: %s", i, b[i].name));
|
float result[12];
|
||||||
|
memset(result, 0, sizeof(result));
|
||||||
|
if (Mod_GetTag(e->model, i, &e->framestate, result))
|
||||||
|
Draw_FunString(depth*16, *y, va("%i: %s (%g %g %g)", i, b[i].name, result[3], result[7], result[11]));
|
||||||
|
else
|
||||||
|
Draw_FunString(depth*16, *y, va("%i: %s", i, b[i].name));
|
||||||
*y += 8;
|
*y += 8;
|
||||||
M_BoneDisplay(b, y, depth+1, i, i+1, last);
|
M_BoneDisplay(e, b, y, depth+1, i, i+1, last);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2603,7 +2608,7 @@ static void M_ModelViewerDraw(int x, int y, struct menucustom_s *c, struct menu_
|
||||||
{
|
{
|
||||||
Draw_FunString(0, y, va("Bones: ", mods->skingroup, fname));
|
Draw_FunString(0, y, va("Bones: ", mods->skingroup, fname));
|
||||||
y+=8;
|
y+=8;
|
||||||
M_BoneDisplay(b, &y, 0, -1, 0, bonecount);
|
M_BoneDisplay(&ent, b, &y, 0, -1, 0, bonecount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -150,6 +150,9 @@ cvar_t r_waterwarp = CVARF ("r_waterwarp", "1",
|
||||||
cvar_t r_replacemodels = CVARFD ("r_replacemodels", IFMINIMAL("","md3 md2"),
|
cvar_t r_replacemodels = CVARFD ("r_replacemodels", IFMINIMAL("","md3 md2"),
|
||||||
CVAR_ARCHIVE, "A list of filename extensions to attempt to use instead of mdl.");
|
CVAR_ARCHIVE, "A list of filename extensions to attempt to use instead of mdl.");
|
||||||
|
|
||||||
|
cvar_t gl_lightmap_nearest = CVARFD ("gl_lightmap_nearest", "0", CVAR_ARCHIVE, "Use nearest sampling for lightmaps. This will give a more blocky look. Meaningless when gl_lightmap_nearest is enabled.");
|
||||||
|
cvar_t gl_lightmap_average = CVARFD ("gl_lightmap_average", "0", CVAR_ARCHIVE, "Determine lightmap values based upon the center of the polygon. This will give a more buggy look, quite probably.");
|
||||||
|
|
||||||
//otherwise it would defeat the point.
|
//otherwise it would defeat the point.
|
||||||
cvar_t scr_allowsnap = CVARF ("scr_allowsnap", "1",
|
cvar_t scr_allowsnap = CVARF ("scr_allowsnap", "1",
|
||||||
CVAR_NOTFROMSERVER);
|
CVAR_NOTFROMSERVER);
|
||||||
|
@ -478,6 +481,9 @@ void GLRenderer_Init(void)
|
||||||
|
|
||||||
Cvar_Register (&gl_menutint_shader, GLRENDEREROPTIONS);
|
Cvar_Register (&gl_menutint_shader, GLRENDEREROPTIONS);
|
||||||
|
|
||||||
|
Cvar_Register (&gl_lightmap_nearest, GLRENDEREROPTIONS);
|
||||||
|
Cvar_Register (&gl_lightmap_average, GLRENDEREROPTIONS);
|
||||||
|
|
||||||
R_BloomRegister();
|
R_BloomRegister();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3772,9 +3772,23 @@ qboolean Mod_GetTag(model_t *model, int tagnum, framestate_t *fstate, float *res
|
||||||
if (f2ness != 1)
|
if (f2ness != 1)
|
||||||
{
|
{
|
||||||
f1time *= g1->rate;
|
f1time *= g1->rate;
|
||||||
frame1 = (int)f1time%g1->numposes;
|
if (g1->loop)
|
||||||
frame2 = ((int)f1time+1)%g1->numposes;
|
{
|
||||||
f1time = f1time - (int)f1time;
|
frame1 = (int)f1time%g1->numposes;
|
||||||
|
frame2 = ((int)f1time+1)%g1->numposes;
|
||||||
|
f1time = f1time - (int)f1time;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
frame1 = (int)f1time;
|
||||||
|
frame2 = ((int)f1time+1);
|
||||||
|
f1time = f1time - (int)f1time;
|
||||||
|
if (frame2 >= g1->numposes)
|
||||||
|
{
|
||||||
|
frame1 = frame2 = g1->numposes-1;
|
||||||
|
f1time = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
pose[numposes] = g1->boneofs + inf->numbones*12*frame1;
|
pose[numposes] = g1->boneofs + inf->numbones*12*frame1;
|
||||||
plerp[numposes] = (1-f1time) * (1-f2ness);
|
plerp[numposes] = (1-f1time) * (1-f2ness);
|
||||||
numposes++;
|
numposes++;
|
||||||
|
@ -3788,9 +3802,23 @@ qboolean Mod_GetTag(model_t *model, int tagnum, framestate_t *fstate, float *res
|
||||||
if (f2ness)
|
if (f2ness)
|
||||||
{
|
{
|
||||||
f2time *= g2->rate;
|
f2time *= g2->rate;
|
||||||
frame1 = (int)f2time%g2->numposes;
|
if (g2->loop)
|
||||||
frame2 = ((int)f2time+1)%g2->numposes;
|
{
|
||||||
f2time = f2time - (int)f2time;
|
frame1 = (int)f2time%g2->numposes;
|
||||||
|
frame2 = ((int)f2time+1)%g2->numposes;
|
||||||
|
f2time = f2time - (int)f2time;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
frame1 = (int)f2time;
|
||||||
|
frame2 = ((int)f2time+1);
|
||||||
|
f2time = f2time - (int)f2time;
|
||||||
|
if (frame2 >= g2->numposes)
|
||||||
|
{
|
||||||
|
frame1 = frame2 = g2->numposes-1;
|
||||||
|
f2time = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
pose[numposes] = g2->boneofs + inf->numbones*12*frame1;
|
pose[numposes] = g2->boneofs + inf->numbones*12*frame1;
|
||||||
plerp[numposes] = (1-f2time) * f2ness;
|
plerp[numposes] = (1-f2time) * f2ness;
|
||||||
numposes++;
|
numposes++;
|
||||||
|
|
|
@ -31,6 +31,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
extern cvar_t r_shadow_bumpscale_basetexture;
|
extern cvar_t r_shadow_bumpscale_basetexture;
|
||||||
extern cvar_t r_replacemodels;
|
extern cvar_t r_replacemodels;
|
||||||
|
extern cvar_t gl_lightmap_average;
|
||||||
|
|
||||||
qboolean isnotmap = true; //used to not warp ammo models.
|
qboolean isnotmap = true; //used to not warp ammo models.
|
||||||
|
|
||||||
|
@ -2523,10 +2524,21 @@ void ModQ1_Batches_BuildQ1Q2Poly(model_t *mod, msurface_t *surf, void *cookie)
|
||||||
mesh->st_array[i][0] = s/surf->texinfo->texture->width;
|
mesh->st_array[i][0] = s/surf->texinfo->texture->width;
|
||||||
mesh->st_array[i][1] = t/surf->texinfo->texture->height;
|
mesh->st_array[i][1] = t/surf->texinfo->texture->height;
|
||||||
|
|
||||||
for (sty = 0; sty < 1; sty++)
|
if (gl_lightmap_average.ival)
|
||||||
{
|
{
|
||||||
mesh->lmst_array[sty][i][0] = (s - surf->texturemins[0] + (surf->light_s[sty]*16) + 8) / (mod->lightmaps.width*16);
|
for (sty = 0; sty < 1; sty++)
|
||||||
mesh->lmst_array[sty][i][1] = (t - surf->texturemins[1] + (surf->light_t[sty]*16) + 8) / (mod->lightmaps.height*16);
|
{
|
||||||
|
mesh->lmst_array[sty][i][0] = (surf->extents[0]*0.5 + (surf->light_s[sty]*16) + 8) / (mod->lightmaps.width*16);
|
||||||
|
mesh->lmst_array[sty][i][1] = (surf->extents[1]*0.5 + (surf->light_t[sty]*16) + 8) / (mod->lightmaps.height*16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (sty = 0; sty < 1; sty++)
|
||||||
|
{
|
||||||
|
mesh->lmst_array[sty][i][0] = (s - surf->texturemins[0] + (surf->light_s[sty]*16) + 8) / (mod->lightmaps.width*16);
|
||||||
|
mesh->lmst_array[sty][i][1] = (t - surf->texturemins[1] + (surf->light_t[sty]*16) + 8) / (mod->lightmaps.height*16);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//figure out the texture directions, for bumpmapping and stuff
|
//figure out the texture directions, for bumpmapping and stuff
|
||||||
|
|
|
@ -26,6 +26,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "renderque.h"
|
#include "renderque.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
extern cvar_t gl_lightmap_nearest;
|
||||||
|
|
||||||
void GLBE_ClearVBO(vbo_t *vbo)
|
void GLBE_ClearVBO(vbo_t *vbo)
|
||||||
{
|
{
|
||||||
int vboh[6 + MAXRLIGHTMAPS];
|
int vboh[6 + MAXRLIGHTMAPS];
|
||||||
|
@ -532,8 +534,16 @@ void GLBE_UploadAllLightmaps(void)
|
||||||
TEXASSIGN(lm->lightmap_texture, R_AllocNewTexture("***lightmap***", lm->width, lm->height, IF_LINEAR|IF_NOMIPMAP));
|
TEXASSIGN(lm->lightmap_texture, R_AllocNewTexture("***lightmap***", lm->width, lm->height, IF_LINEAR|IF_NOMIPMAP));
|
||||||
}
|
}
|
||||||
GL_MTBind(0, GL_TEXTURE_2D, lm->lightmap_texture);
|
GL_MTBind(0, GL_TEXTURE_2D, lm->lightmap_texture);
|
||||||
qglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
if (gl_lightmap_nearest.ival)
|
||||||
qglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
{
|
||||||
|
qglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
qglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
qglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
}
|
||||||
switch (lightmap_bytes)
|
switch (lightmap_bytes)
|
||||||
{
|
{
|
||||||
case 4:
|
case 4:
|
||||||
|
|
|
@ -1468,8 +1468,14 @@ void SV_SpawnServer (char *server, char *startspot, qboolean noents, qboolean us
|
||||||
else
|
else
|
||||||
snprintf(sv.mapname, sizeof(sv.mapname), "%s", sv.name);
|
snprintf(sv.mapname, sizeof(sv.mapname), "%s", sv.name);
|
||||||
if (Cvar_Get("sv_readonlyworld", "1", 0, "DP compatability")->value)
|
if (Cvar_Get("sv_readonlyworld", "1", 0, "DP compatability")->value)
|
||||||
|
{
|
||||||
ent->readonly = true; //lock it down!
|
ent->readonly = true; //lock it down!
|
||||||
|
|
||||||
|
if (ent->v->origin[0] != 0 || ent->v->origin[1] != 0 || ent->v->origin[2] != 0 || ent->v->angles[0] != 0 || ent->v->angles[1] != 0 || ent->v->angles[2] != 0)
|
||||||
|
Con_Printf("Warning: The world has moved. Alert your nearest reputable news agency.\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// look up some model indexes for specialized message compression
|
// look up some model indexes for specialized message compression
|
||||||
SV_FindModelNumbers ();
|
SV_FindModelNumbers ();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue