2004-08-22 22:29:09 +00:00
|
|
|
/*
|
|
|
|
Copyright (C) 1996-1997 Id Software, Inc.
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU General Public License
|
|
|
|
as published by the Free Software Foundation; either version 2
|
|
|
|
of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
|
|
|
|
*/
|
|
|
|
// r_light.c
|
|
|
|
|
|
|
|
#include "quakedef.h"
|
2016-07-12 00:40:13 +00:00
|
|
|
#ifndef SERVERONLY
|
2004-08-22 22:29:09 +00:00
|
|
|
#include "glquake.h"
|
2010-03-26 02:17:55 +00:00
|
|
|
#include "shader.h"
|
|
|
|
|
2011-10-27 16:16:29 +00:00
|
|
|
extern cvar_t r_shadow_realtime_world, r_shadow_realtime_world_lightmaps;
|
2015-04-27 12:51:42 +00:00
|
|
|
extern cvar_t r_hdr_irisadaptation, r_hdr_irisadaptation_multiplier, r_hdr_irisadaptation_minvalue, r_hdr_irisadaptation_maxvalue, r_hdr_irisadaptation_fade_down, r_hdr_irisadaptation_fade_up;
|
2011-10-27 16:16:29 +00:00
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
|
|
|
|
int r_dlightframecount;
|
2012-07-07 05:17:43 +00:00
|
|
|
int d_lightstylevalue[256]; // 8.8 fraction of base light value
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2014-06-25 03:53:11 +00:00
|
|
|
void R_UpdateLightStyle(unsigned int style, const char *stylestring, float r, float g, float b)
|
|
|
|
{
|
|
|
|
if (style >= MAX_LIGHTSTYLES)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (!stylestring)
|
|
|
|
stylestring = "";
|
|
|
|
|
|
|
|
Q_strncpyz (cl_lightstyle[style].map, stylestring, sizeof(cl_lightstyle[style].map));
|
|
|
|
cl_lightstyle[style].length = Q_strlen(cl_lightstyle[style].map);
|
|
|
|
if (!cl_lightstyle[style].length)
|
|
|
|
{
|
|
|
|
d_lightstylevalue[style] = 256;
|
|
|
|
VectorSet(cl_lightstyle[style].colours, 1,1,1);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
VectorSet(cl_lightstyle[style].colours, r,g,b);
|
|
|
|
cl_lightstyle[style].colourkey = (int)(cl_lightstyle[style].colours[0]*0x400) ^ (int)(cl_lightstyle[style].colours[1]*0x100000) ^ (int)(cl_lightstyle[style].colours[2]*0x40000000);
|
|
|
|
}
|
|
|
|
|
2015-04-27 12:51:42 +00:00
|
|
|
void Sh_CalcPointLight(vec3_t point, vec3_t light);
|
|
|
|
void R_UpdateHDR(vec3_t org)
|
|
|
|
{
|
|
|
|
if (r_hdr_irisadaptation.ival && cl.worldmodel && !(r_refdef.flags & RDF_NOWORLDMODEL))
|
|
|
|
{
|
|
|
|
//fake and lame, but whatever.
|
|
|
|
vec3_t ambient, diffuse, dir;
|
|
|
|
float lev = 0;
|
2015-04-27 12:55:48 +00:00
|
|
|
|
|
|
|
#ifdef RTLIGHTS
|
|
|
|
Sh_CalcPointLight(org, ambient);
|
|
|
|
lev += VectorLength(ambient);
|
|
|
|
|
|
|
|
|
2015-04-27 12:51:42 +00:00
|
|
|
if (!r_shadow_realtime_world.ival || r_shadow_realtime_world_lightmaps.value)
|
2015-04-27 12:55:48 +00:00
|
|
|
#endif
|
2015-04-27 12:51:42 +00:00
|
|
|
{
|
|
|
|
cl.worldmodel->funcs.LightPointValues(cl.worldmodel, org, ambient, diffuse, dir);
|
|
|
|
lev += (VectorLength(ambient) + VectorLength(diffuse))/256;
|
|
|
|
}
|
|
|
|
|
|
|
|
lev += 0.001; //no division by 0!
|
|
|
|
lev = r_hdr_irisadaptation_multiplier.value / lev;
|
|
|
|
lev = bound(r_hdr_irisadaptation_minvalue.value, lev, r_hdr_irisadaptation_maxvalue.value);
|
|
|
|
if (lev > r_refdef.playerview->hdr_last + r_hdr_irisadaptation_fade_up.value*host_frametime)
|
|
|
|
lev = r_refdef.playerview->hdr_last + r_hdr_irisadaptation_fade_up.value*host_frametime;
|
|
|
|
else if (lev < r_refdef.playerview->hdr_last - r_hdr_irisadaptation_fade_down.value*host_frametime)
|
|
|
|
lev = r_refdef.playerview->hdr_last - r_hdr_irisadaptation_fade_down.value*host_frametime;
|
|
|
|
lev = bound(r_hdr_irisadaptation_minvalue.value, lev, r_hdr_irisadaptation_maxvalue.value);
|
|
|
|
r_refdef.playerview->hdr_last = lev;
|
|
|
|
r_refdef.hdr_value = lev;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
r_refdef.hdr_value = 1;
|
|
|
|
}
|
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
/*
|
|
|
|
==================
|
|
|
|
R_AnimateLight
|
|
|
|
==================
|
|
|
|
*/
|
2009-11-04 21:16:50 +00:00
|
|
|
void R_AnimateLight (void)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
2005-06-22 17:10:13 +00:00
|
|
|
int i,j;
|
|
|
|
float f;
|
2015-04-14 23:12:17 +00:00
|
|
|
|
2015-04-27 12:51:42 +00:00
|
|
|
|
2015-04-14 23:12:17 +00:00
|
|
|
//if (r_lightstylescale.value > 2)
|
|
|
|
//r_lightstylescale.value = 2;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// light animations
|
|
|
|
// 'm' is normal light, 'a' is no light, 'z' is double bright
|
2005-06-22 17:10:13 +00:00
|
|
|
f = (cl.time*r_lightstylespeed.value);
|
|
|
|
if (f < 0)
|
|
|
|
f = 0;
|
|
|
|
i = (int)f;
|
2011-04-20 23:05:45 +00:00
|
|
|
f -= i; //this can require updates at 1000 times a second.. Depends on your framerate of course
|
2005-06-22 17:10:13 +00:00
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
for (j=0 ; j<MAX_LIGHTSTYLES ; j++)
|
|
|
|
{
|
2011-04-20 23:05:45 +00:00
|
|
|
int v1, v2, vd;
|
2004-08-22 22:29:09 +00:00
|
|
|
if (!cl_lightstyle[j].length)
|
2014-10-11 19:39:45 +00:00
|
|
|
{
|
2015-04-14 23:12:17 +00:00
|
|
|
d_lightstylevalue[j] = ('m'-'a')*22 * r_lightstylescale.value;
|
2004-08-22 22:29:09 +00:00
|
|
|
continue;
|
2014-10-11 19:39:45 +00:00
|
|
|
}
|
2014-06-25 03:53:11 +00:00
|
|
|
|
2014-10-05 20:04:11 +00:00
|
|
|
if (cl_lightstyle[j].map[0] == '=')
|
|
|
|
{
|
2015-04-14 23:12:17 +00:00
|
|
|
d_lightstylevalue[j] = atof(cl_lightstyle[j].map+1)*256*r_lightstylescale.value;
|
2014-10-05 20:04:11 +00:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2005-06-22 17:10:13 +00:00
|
|
|
v1 = i % cl_lightstyle[j].length;
|
|
|
|
v1 = cl_lightstyle[j].map[v1] - 'a';
|
|
|
|
|
|
|
|
v2 = (i+1) % cl_lightstyle[j].length;
|
|
|
|
v2 = cl_lightstyle[j].map[v2] - 'a';
|
|
|
|
|
2011-04-20 23:05:45 +00:00
|
|
|
vd = v1 - v2;
|
|
|
|
if (!r_lightstylesmooth.ival || vd < -r_lightstylesmooth_limit.ival || vd > r_lightstylesmooth_limit.ival)
|
2015-04-14 23:12:17 +00:00
|
|
|
d_lightstylevalue[j] = v1*22*r_lightstylescale.value;
|
2011-04-20 23:05:45 +00:00
|
|
|
else
|
2015-04-14 23:12:17 +00:00
|
|
|
d_lightstylevalue[j] = (v1*(1-f) + v2*(f))*22*r_lightstylescale.value;
|
2010-05-01 22:47:47 +00:00
|
|
|
}
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
=============================================================================
|
|
|
|
|
|
|
|
DYNAMIC LIGHTS BLEND RENDERING
|
|
|
|
|
|
|
|
=============================================================================
|
|
|
|
*/
|
|
|
|
|
|
|
|
void AddLightBlend (float r, float g, float b, float a2)
|
|
|
|
{
|
|
|
|
float a;
|
2016-01-18 05:22:07 +00:00
|
|
|
float *sw_blend = r_refdef.playerview->screentint;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2005-08-28 05:21:25 +00:00
|
|
|
r = bound(0, r, 1);
|
|
|
|
g = bound(0, g, 1);
|
|
|
|
b = bound(0, b, 1);
|
|
|
|
|
2010-03-25 22:56:11 +00:00
|
|
|
sw_blend[3] = a = sw_blend[3] + a2*(1-sw_blend[3]);
|
2004-08-22 22:29:09 +00:00
|
|
|
|
|
|
|
a2 = a2/a;
|
|
|
|
|
2010-03-25 22:56:11 +00:00
|
|
|
sw_blend[0] = sw_blend[0]*(1-a2) + r*a2;
|
|
|
|
sw_blend[1] = sw_blend[1]*(1-a2) + g*a2;
|
|
|
|
sw_blend[2] = sw_blend[2]*(1-a2) + b*a2;
|
2004-08-22 22:29:09 +00:00
|
|
|
//Con_Printf("AddLightBlend(): %4.2f %4.2f %4.2f %4.6f\n", v_blend[0], v_blend[1], v_blend[2], v_blend[3]);
|
|
|
|
}
|
|
|
|
|
2011-12-23 03:12:29 +00:00
|
|
|
#define FLASHBLEND_VERTS 16
|
|
|
|
static float bubble_sintable[FLASHBLEND_VERTS+1], bubble_costable[FLASHBLEND_VERTS+1];
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2011-10-27 16:16:29 +00:00
|
|
|
static void R_InitBubble(void)
|
2009-06-21 17:45:33 +00:00
|
|
|
{
|
2004-08-22 22:29:09 +00:00
|
|
|
float a;
|
|
|
|
int i;
|
|
|
|
float *bub_sin, *bub_cos;
|
|
|
|
|
|
|
|
bub_sin = bubble_sintable;
|
|
|
|
bub_cos = bubble_costable;
|
|
|
|
|
2011-12-23 03:12:29 +00:00
|
|
|
for (i=FLASHBLEND_VERTS ; i>=0 ; i--)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
2011-12-23 03:12:29 +00:00
|
|
|
a = i/(float)FLASHBLEND_VERTS * M_PI*2;
|
2004-08-22 22:29:09 +00:00
|
|
|
*bub_sin++ = sin(a);
|
|
|
|
*bub_cos++ = cos(a);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-03-26 02:17:55 +00:00
|
|
|
avec4_t flashblend_colours[FLASHBLEND_VERTS+1];
|
|
|
|
vecV_t flashblend_vcoords[FLASHBLEND_VERTS+1];
|
|
|
|
vec2_t flashblend_tccoords[FLASHBLEND_VERTS+1];
|
2010-07-11 10:53:13 +00:00
|
|
|
index_t flashblend_indexes[FLASHBLEND_VERTS*3];
|
2011-09-03 03:49:43 +00:00
|
|
|
index_t flashblend_fsindexes[6] = {0, 1, 2, 0, 2, 3};
|
2010-03-26 02:17:55 +00:00
|
|
|
mesh_t flashblend_mesh;
|
2011-09-03 03:49:43 +00:00
|
|
|
mesh_t flashblend_fsmesh;
|
2015-10-11 11:34:58 +00:00
|
|
|
shader_t *occluded_shader;
|
2010-03-26 02:17:55 +00:00
|
|
|
shader_t *flashblend_shader;
|
2016-11-20 20:52:41 +00:00
|
|
|
shader_t *lpplight_shader[LSHADER_MODES];
|
2011-12-23 03:12:29 +00:00
|
|
|
|
|
|
|
void R_GenerateFlashblendTexture(void)
|
|
|
|
{
|
|
|
|
float dx, dy;
|
|
|
|
int x, y, a;
|
|
|
|
unsigned char pixels[32][32][4];
|
|
|
|
for (y = 0;y < 32;y++)
|
|
|
|
{
|
|
|
|
dy = (y - 15.5f) * (1.0f / 16.0f);
|
|
|
|
for (x = 0;x < 32;x++)
|
|
|
|
{
|
|
|
|
dx = (x - 15.5f) * (1.0f / 16.0f);
|
|
|
|
a = (int)(((1.0f / (dx * dx + dy * dy + 0.2f)) - (1.0f / (1.0f + 0.2))) * 32.0f / (1.0f / (1.0f + 0.2)));
|
|
|
|
a = bound(0, a, 255);
|
|
|
|
pixels[y][x][0] = a;
|
|
|
|
pixels[y][x][1] = a;
|
|
|
|
pixels[y][x][2] = a;
|
|
|
|
pixels[y][x][3] = 255;
|
|
|
|
}
|
|
|
|
}
|
2014-10-05 20:04:11 +00:00
|
|
|
R_LoadReplacementTexture("***flashblend***", NULL, 0, pixels, 32, 32, TF_RGBA32);
|
2011-12-23 03:12:29 +00:00
|
|
|
}
|
2010-03-26 02:17:55 +00:00
|
|
|
void R_InitFlashblends(void)
|
|
|
|
{
|
|
|
|
int i;
|
2011-12-23 03:12:29 +00:00
|
|
|
R_InitBubble();
|
2010-03-26 02:17:55 +00:00
|
|
|
for (i = 0; i < FLASHBLEND_VERTS; i++)
|
|
|
|
{
|
|
|
|
flashblend_indexes[i*3+0] = 0;
|
|
|
|
if (i+1 == FLASHBLEND_VERTS)
|
|
|
|
flashblend_indexes[i*3+1] = 1;
|
|
|
|
else
|
|
|
|
flashblend_indexes[i*3+1] = i+2;
|
|
|
|
flashblend_indexes[i*3+2] = i+1;
|
2011-12-23 03:12:29 +00:00
|
|
|
|
|
|
|
flashblend_tccoords[i+1][0] = 0.5 + bubble_sintable[i]*0.5;
|
|
|
|
flashblend_tccoords[i+1][1] = 0.5 + bubble_costable[i]*0.5;
|
2010-03-26 02:17:55 +00:00
|
|
|
}
|
2011-12-23 03:12:29 +00:00
|
|
|
flashblend_tccoords[0][0] = 0.5;
|
|
|
|
flashblend_tccoords[0][1] = 0.5;
|
2010-03-26 02:17:55 +00:00
|
|
|
flashblend_mesh.numvertexes = FLASHBLEND_VERTS+1;
|
|
|
|
flashblend_mesh.xyz_array = flashblend_vcoords;
|
|
|
|
flashblend_mesh.st_array = flashblend_tccoords;
|
2013-08-27 13:18:09 +00:00
|
|
|
flashblend_mesh.colors4f_array[0] = flashblend_colours;
|
2010-03-26 02:17:55 +00:00
|
|
|
flashblend_mesh.indexes = flashblend_indexes;
|
|
|
|
flashblend_mesh.numindexes = FLASHBLEND_VERTS*3;
|
|
|
|
flashblend_mesh.istrifan = true;
|
|
|
|
|
2011-09-03 03:49:43 +00:00
|
|
|
flashblend_fsmesh.numvertexes = 4;
|
|
|
|
flashblend_fsmesh.xyz_array = flashblend_vcoords;
|
|
|
|
flashblend_fsmesh.st_array = flashblend_tccoords;
|
2013-08-27 13:18:09 +00:00
|
|
|
flashblend_fsmesh.colors4f_array[0] = flashblend_colours;
|
2011-09-03 03:49:43 +00:00
|
|
|
flashblend_fsmesh.indexes = flashblend_fsindexes;
|
|
|
|
flashblend_fsmesh.numindexes = 6;
|
|
|
|
flashblend_fsmesh.istrifan = true;
|
|
|
|
|
2011-12-23 03:12:29 +00:00
|
|
|
R_GenerateFlashblendTexture();
|
|
|
|
|
2013-08-21 07:14:39 +00:00
|
|
|
flashblend_shader = R_RegisterShader("flashblend", SUF_NONE,
|
2010-03-26 02:17:55 +00:00
|
|
|
"{\n"
|
2011-12-23 03:12:29 +00:00
|
|
|
"program defaultadditivesprite\n"
|
2010-03-26 02:17:55 +00:00
|
|
|
"{\n"
|
2011-12-23 03:12:29 +00:00
|
|
|
"map ***flashblend***\n"
|
2010-03-26 02:17:55 +00:00
|
|
|
"blendfunc gl_one gl_one\n"
|
|
|
|
"rgbgen vertex\n"
|
|
|
|
"alphagen vertex\n"
|
2013-10-29 17:38:22 +00:00
|
|
|
"nodepth\n"
|
2010-03-26 02:17:55 +00:00
|
|
|
"}\n"
|
|
|
|
"}\n"
|
|
|
|
);
|
2015-10-11 11:34:58 +00:00
|
|
|
occluded_shader = R_RegisterShader("flashblend_occlusiontest", SUF_NONE,
|
|
|
|
"{\n"
|
|
|
|
"program defaultadditivesprite\n"
|
|
|
|
"{\n"
|
|
|
|
"maskcolor\n"
|
|
|
|
"maskalpha\n"
|
|
|
|
"}\n"
|
|
|
|
"}\n"
|
|
|
|
);
|
2016-11-20 20:52:41 +00:00
|
|
|
memset(lpplight_shader, 0, sizeof(lpplight_shader));
|
2010-03-26 02:17:55 +00:00
|
|
|
}
|
|
|
|
|
2013-10-29 17:38:22 +00:00
|
|
|
static qboolean R_BuildDlightMesh(dlight_t *light, float colscale, float radscale, int dtype)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
|
|
|
int i, j;
|
|
|
|
// float a;
|
|
|
|
vec3_t v;
|
|
|
|
float rad;
|
|
|
|
float *bub_sin, *bub_cos;
|
2009-11-04 21:16:50 +00:00
|
|
|
vec3_t colour;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
|
|
|
bub_sin = bubble_sintable;
|
|
|
|
bub_cos = bubble_costable;
|
2011-09-03 03:49:43 +00:00
|
|
|
rad = light->radius * radscale;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2009-11-04 21:16:50 +00:00
|
|
|
VectorCopy(light->color, colour);
|
|
|
|
|
|
|
|
if (light->fov)
|
|
|
|
{
|
|
|
|
float a = -DotProduct(light->axis[0], vpn);
|
|
|
|
colour[0] *= a;
|
|
|
|
colour[1] *= a;
|
|
|
|
colour[2] *= a;
|
|
|
|
rad *= a;
|
|
|
|
rad *= 0.33;
|
|
|
|
}
|
2011-12-27 08:35:19 +00:00
|
|
|
if (light->style)
|
|
|
|
{
|
|
|
|
colscale *= d_lightstylevalue[light->style-1]/255.0f;
|
|
|
|
}
|
2009-11-04 21:16:50 +00:00
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
VectorSubtract (light->origin, r_origin, v);
|
2016-10-22 07:06:51 +00:00
|
|
|
if (dtype != 1 && Length (v) < rad + r_refdef.mindist*2)
|
2004-08-22 22:29:09 +00:00
|
|
|
{ // view is inside the dlight
|
2011-09-03 03:49:43 +00:00
|
|
|
return false;
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
2011-12-27 08:35:19 +00:00
|
|
|
flashblend_colours[0][0] = colour[0]*colscale;
|
|
|
|
flashblend_colours[0][1] = colour[1]*colscale;
|
|
|
|
flashblend_colours[0][2] = colour[2]*colscale;
|
2010-03-26 02:17:55 +00:00
|
|
|
flashblend_colours[0][3] = 1;
|
2011-09-03 03:49:43 +00:00
|
|
|
|
|
|
|
VectorCopy(light->origin, flashblend_vcoords[0]);
|
2011-10-27 16:16:29 +00:00
|
|
|
for (i=FLASHBLEND_VERTS ; i>0 ; i--)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
|
|
|
for (j=0 ; j<3 ; j++)
|
2010-03-26 02:17:55 +00:00
|
|
|
flashblend_vcoords[i][j] = light->origin[j] + (vright[j]*(*bub_cos) +
|
2004-08-22 22:29:09 +00:00
|
|
|
+ vup[j]*(*bub_sin)) * rad;
|
|
|
|
bub_sin++;
|
|
|
|
bub_cos++;
|
|
|
|
}
|
2013-10-29 17:38:22 +00:00
|
|
|
if (dtype == 0)
|
|
|
|
{
|
|
|
|
//flashblend 3d-ish
|
2011-09-03 03:49:43 +00:00
|
|
|
VectorMA(flashblend_vcoords[0], -rad/1.5, vpn, flashblend_vcoords[0]);
|
2013-10-29 17:38:22 +00:00
|
|
|
}
|
|
|
|
else if (dtype != 1)
|
2011-09-03 03:49:43 +00:00
|
|
|
{
|
2013-10-29 17:38:22 +00:00
|
|
|
//prepass lights needs to be fully infront of the light. the glsl is a fullscreen-style effect, but we can benefit from early-z and scissoring
|
2011-09-03 03:49:43 +00:00
|
|
|
vec3_t diff;
|
|
|
|
VectorSubtract(r_origin, light->origin, diff);
|
|
|
|
VectorNormalize(diff);
|
2011-10-27 16:16:29 +00:00
|
|
|
for (i=0 ; i<=FLASHBLEND_VERTS ; i++)
|
2011-09-03 03:49:43 +00:00
|
|
|
VectorMA(flashblend_vcoords[i], rad, diff, flashblend_vcoords[i]);
|
|
|
|
}
|
|
|
|
return true;
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
=============
|
|
|
|
R_RenderDlights
|
|
|
|
=============
|
|
|
|
*/
|
2011-10-27 16:16:29 +00:00
|
|
|
void R_RenderDlights (void)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
|
|
|
int i;
|
|
|
|
dlight_t *l;
|
2005-07-09 15:47:20 +00:00
|
|
|
vec3_t waste1, waste2;
|
2011-04-20 23:34:13 +00:00
|
|
|
unsigned int beflags = 0;
|
2013-10-29 17:38:22 +00:00
|
|
|
float intensity, cscale;
|
|
|
|
qboolean coronastyle;
|
2014-04-13 04:23:13 +00:00
|
|
|
qboolean flashstyle;
|
2014-04-24 01:53:01 +00:00
|
|
|
float dist;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2013-10-29 17:38:22 +00:00
|
|
|
if (!r_coronas.value && !r_flashblend.value)
|
|
|
|
return;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
|
|
|
// r_dlightframecount = r_framecount + 1; // because the count hasn't
|
|
|
|
// advanced yet for this frame
|
2009-11-07 13:29:15 +00:00
|
|
|
|
2009-11-04 21:16:50 +00:00
|
|
|
l = cl_dlights+rtlights_first;
|
|
|
|
for (i=rtlights_first; i<rtlights_max; i++, l++)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
2011-12-27 08:35:19 +00:00
|
|
|
if (!l->radius)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (l->corona <= 0)
|
2004-08-22 22:29:09 +00:00
|
|
|
continue;
|
2005-07-09 15:47:20 +00:00
|
|
|
|
2014-04-13 04:23:13 +00:00
|
|
|
//dlights emitting from the local player are not visible as flashblends
|
|
|
|
if (l->key == r_refdef.playerview->viewentity)
|
|
|
|
continue; //was a glow
|
|
|
|
if (l->key == -(r_refdef.playerview->viewentity))
|
|
|
|
continue; //was a muzzleflash
|
|
|
|
|
2014-08-15 02:20:41 +00:00
|
|
|
coronastyle = (l->flags & (LFLAG_NORMALMODE|LFLAG_REALTIMEMODE)) && r_coronas.value;
|
|
|
|
flashstyle = ((l->flags & LFLAG_FLASHBLEND) && r_flashblend.value);
|
2014-04-13 04:23:13 +00:00
|
|
|
|
|
|
|
if (!coronastyle && !flashstyle)
|
|
|
|
continue;
|
|
|
|
if (coronastyle && flashstyle)
|
|
|
|
flashstyle = false;
|
2008-01-24 01:24:10 +00:00
|
|
|
|
2013-10-29 17:38:22 +00:00
|
|
|
cscale = l->coronascale;
|
2014-04-13 04:23:13 +00:00
|
|
|
intensity = l->corona;// * 0.25;
|
2013-10-29 17:38:22 +00:00
|
|
|
if (coronastyle)
|
|
|
|
intensity *= r_coronas.value;
|
2012-01-01 02:26:42 +00:00
|
|
|
else
|
2013-10-29 17:38:22 +00:00
|
|
|
intensity *= r_flashblend.value;
|
|
|
|
if (intensity <= 0 || cscale <= 0)
|
2012-01-01 02:26:42 +00:00
|
|
|
continue;
|
|
|
|
|
2014-04-24 01:53:01 +00:00
|
|
|
//prevent the corona from intersecting with the near clip plane by just fading it away if its too close
|
|
|
|
VectorSubtract(l->origin, r_refdef.vieworg, waste1);
|
|
|
|
dist = VectorLength(waste1);
|
2016-07-12 00:40:13 +00:00
|
|
|
if (dist < r_coronas_mindist.value+r_coronas_fadedist.value)
|
2014-04-24 01:53:01 +00:00
|
|
|
{
|
2016-07-12 00:40:13 +00:00
|
|
|
if (dist <= r_coronas_mindist.value)
|
2014-04-24 01:53:01 +00:00
|
|
|
continue;
|
2016-07-12 00:40:13 +00:00
|
|
|
intensity *= (dist-r_coronas_mindist.value) / r_coronas_fadedist.value;
|
2014-04-24 01:53:01 +00:00
|
|
|
}
|
|
|
|
|
2012-01-01 02:26:42 +00:00
|
|
|
/*coronas use depth testing to compute visibility*/
|
2013-10-29 17:38:22 +00:00
|
|
|
if (coronastyle)
|
2005-07-09 15:47:20 +00:00
|
|
|
{
|
2015-10-11 11:34:58 +00:00
|
|
|
int method;
|
|
|
|
if (!*r_coronas_occlusion.string)
|
2016-07-12 00:40:13 +00:00
|
|
|
method = 4; //default to using hardware queries where possible.
|
2015-10-11 11:34:58 +00:00
|
|
|
else
|
|
|
|
method = r_coronas_occlusion.ival;
|
|
|
|
|
|
|
|
switch(method)
|
2015-09-10 10:16:26 +00:00
|
|
|
{
|
2015-10-11 11:34:58 +00:00
|
|
|
case 2:
|
2015-09-10 10:16:26 +00:00
|
|
|
if (TraceLineR(r_refdef.vieworg, l->origin, waste1, waste2))
|
|
|
|
continue;
|
2015-10-11 11:34:58 +00:00
|
|
|
break;
|
|
|
|
case 0:
|
|
|
|
break;
|
|
|
|
case 3:
|
2016-07-12 00:40:13 +00:00
|
|
|
#ifdef GLQUAKE
|
|
|
|
if (qrenderer == QR_OPENGL)
|
2015-10-11 11:34:58 +00:00
|
|
|
{
|
|
|
|
float depth;
|
|
|
|
vec3_t out;
|
|
|
|
float v[4], tempv[4];
|
|
|
|
float mvp[16];
|
|
|
|
|
|
|
|
v[0] = l->origin[0];
|
|
|
|
v[1] = l->origin[1];
|
|
|
|
v[2] = l->origin[2];
|
|
|
|
v[3] = 1;
|
|
|
|
|
|
|
|
Matrix4_Multiply(r_refdef.m_projection, r_refdef.m_view, mvp);
|
|
|
|
Matrix4x4_CM_Transform4(mvp, v, tempv);
|
|
|
|
|
|
|
|
tempv[0] /= tempv[3];
|
|
|
|
tempv[1] /= tempv[3];
|
|
|
|
tempv[2] /= tempv[3];
|
|
|
|
|
|
|
|
out[0] = (1+tempv[0])/2;
|
|
|
|
out[1] = (1+tempv[1])/2;
|
|
|
|
out[2] = (1+tempv[2])/2;
|
|
|
|
|
|
|
|
out[0] = out[0]*r_refdef.pxrect.width + r_refdef.pxrect.x;
|
|
|
|
out[1] = out[1]*r_refdef.pxrect.height + r_refdef.pxrect.y;
|
|
|
|
if (tempv[3] < 0)
|
|
|
|
out[2] *= -1;
|
|
|
|
|
|
|
|
if (out[2] < 0)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
//FIXME: in terms of performance, mixing reads+draws is BAD BAD BAD. SERIOUSLY BAD
|
2016-07-12 00:40:13 +00:00
|
|
|
//it would be an improvement to calculate all of these at once.
|
2015-10-11 11:34:58 +00:00
|
|
|
qglReadPixels(out[0], out[1], 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);
|
|
|
|
if (depth < out[2])
|
|
|
|
continue;
|
2016-07-12 00:40:13 +00:00
|
|
|
break;
|
2015-10-11 11:34:58 +00:00
|
|
|
}
|
2016-07-12 00:40:13 +00:00
|
|
|
#endif
|
|
|
|
//other renderers fall through
|
2015-10-11 11:34:58 +00:00
|
|
|
case 4:
|
2016-07-12 00:40:13 +00:00
|
|
|
#ifdef GLQUAKE
|
|
|
|
if (qrenderer == QR_OPENGL && qglGenQueriesARB)
|
2015-10-11 11:34:58 +00:00
|
|
|
{
|
|
|
|
GLuint res;
|
|
|
|
qboolean requery = true;
|
2016-07-16 14:24:06 +00:00
|
|
|
if (r_refdef.recurse)
|
|
|
|
requery = false;
|
|
|
|
else if (l->coronaocclusionquery)
|
2015-10-11 11:34:58 +00:00
|
|
|
{
|
|
|
|
qglGetQueryObjectuivARB(l->coronaocclusionquery, GL_QUERY_RESULT_AVAILABLE_ARB, &res);
|
|
|
|
if (res)
|
|
|
|
qglGetQueryObjectuivARB(l->coronaocclusionquery, GL_QUERY_RESULT_ARB, &l->coronaocclusionresult);
|
|
|
|
else if (!l->coronaocclusionresult)
|
|
|
|
continue; //query still running, nor currently visible.
|
|
|
|
else
|
|
|
|
requery = false;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
qglGenQueriesARB(1, &l->coronaocclusionquery);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (requery)
|
|
|
|
{
|
|
|
|
qglBeginQueryARB(GL_SAMPLES_PASSED_ARB, l->coronaocclusionquery);
|
2016-07-12 00:40:13 +00:00
|
|
|
R_BuildDlightMesh (l, intensity*10, cscale*.1, coronastyle);
|
2015-10-11 11:34:58 +00:00
|
|
|
BE_DrawMesh_Single(occluded_shader, &flashblend_mesh, NULL, beflags);
|
|
|
|
qglEndQueryARB(GL_SAMPLES_PASSED_ARB);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!l->coronaocclusionresult)
|
|
|
|
continue;
|
2016-07-12 00:40:13 +00:00
|
|
|
break;
|
2015-10-11 11:34:58 +00:00
|
|
|
}
|
|
|
|
#endif
|
2016-07-12 00:40:13 +00:00
|
|
|
//other renderers fall through
|
|
|
|
default:
|
|
|
|
case 1:
|
|
|
|
if (CL_TraceLine(r_refdef.vieworg, l->origin, waste1, NULL, NULL) < 1)
|
|
|
|
continue;
|
|
|
|
break;
|
2015-09-10 10:16:26 +00:00
|
|
|
}
|
2005-07-09 15:47:20 +00:00
|
|
|
}
|
2012-01-01 02:26:42 +00:00
|
|
|
|
2013-10-29 17:38:22 +00:00
|
|
|
if (!R_BuildDlightMesh (l, intensity, cscale, coronastyle) && !coronastyle)
|
2012-01-01 02:26:42 +00:00
|
|
|
AddLightBlend (l->color[0], l->color[1], l->color[2], l->radius * 0.0003);
|
2011-09-03 03:49:43 +00:00
|
|
|
else
|
2015-05-03 19:57:46 +00:00
|
|
|
BE_DrawMesh_Single(flashblend_shader, &flashblend_mesh, NULL, (coronastyle?BEF_FORCENODEPTH|BEF_FORCEADDITIVE:0)|beflags);
|
2011-09-03 03:49:43 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-11-20 20:52:41 +00:00
|
|
|
qboolean Sh_GenerateShadowMap(dlight_t *l);
|
2011-09-03 03:49:43 +00:00
|
|
|
void R_GenDlightMesh(struct batch_s *batch)
|
|
|
|
{
|
|
|
|
static mesh_t *meshptr;
|
|
|
|
dlight_t *l = cl_dlights + batch->surf_first;
|
|
|
|
|
2016-11-20 20:52:41 +00:00
|
|
|
int lightflags = batch->surf_count;
|
|
|
|
|
|
|
|
BE_SelectDLight(l, l->color, l->axis, lightflags);
|
2016-11-20 21:05:10 +00:00
|
|
|
#ifdef RTLIGHTS
|
2016-11-20 20:52:41 +00:00
|
|
|
if (lightflags & LSHADER_SMAP)
|
|
|
|
{
|
|
|
|
if (!Sh_GenerateShadowMap(l))
|
|
|
|
{
|
|
|
|
batch->meshes = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
BE_SelectEntity(&r_worldentity);
|
|
|
|
BE_SelectMode(BEM_STANDARD);
|
|
|
|
}
|
2016-11-20 21:05:10 +00:00
|
|
|
#endif
|
2011-09-03 03:49:43 +00:00
|
|
|
|
2013-10-29 17:38:22 +00:00
|
|
|
if (!R_BuildDlightMesh (l, 2, 1, 2))
|
2011-09-03 03:49:43 +00:00
|
|
|
{
|
|
|
|
int i;
|
|
|
|
static vec2_t s[4] = {{1, -1}, {-1, -1}, {-1, 1}, {1, 1}};
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
VectorMA(r_origin, 32, vpn, flashblend_vcoords[i]);
|
|
|
|
VectorMA(flashblend_vcoords[i], s[i][0]*320, vright, flashblend_vcoords[i]);
|
|
|
|
VectorMA(flashblend_vcoords[i], s[i][1]*320, vup, flashblend_vcoords[i]);
|
|
|
|
}
|
|
|
|
|
|
|
|
meshptr = &flashblend_fsmesh;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
meshptr = &flashblend_mesh;
|
|
|
|
}
|
|
|
|
batch->mesh = &meshptr;
|
|
|
|
}
|
|
|
|
void R_GenDlightBatches(batch_t *batches[])
|
|
|
|
{
|
2014-09-22 17:49:45 +00:00
|
|
|
int i, j, sort;
|
2011-09-03 03:49:43 +00:00
|
|
|
dlight_t *l;
|
|
|
|
batch_t *b;
|
2016-11-20 20:52:41 +00:00
|
|
|
int lmode;
|
|
|
|
if (!r_lightprepass)
|
2014-10-11 19:39:45 +00:00
|
|
|
return;
|
|
|
|
|
2016-11-20 20:52:41 +00:00
|
|
|
if (!lpplight_shader[0])
|
|
|
|
{
|
|
|
|
lpplight_shader[0] = R_RegisterShader("lpp_light", SUF_NONE,
|
2011-09-03 03:49:43 +00:00
|
|
|
"{\n"
|
|
|
|
"program lpp_light\n"
|
|
|
|
"{\n"
|
|
|
|
"map $sourcecolour\n"
|
|
|
|
"blendfunc gl_one gl_one\n"
|
2016-11-20 20:52:41 +00:00
|
|
|
"nodepthtest\n"
|
2011-09-03 03:49:43 +00:00
|
|
|
"}\n"
|
|
|
|
"surfaceparm nodlight\n"
|
|
|
|
"lpp_light\n"
|
|
|
|
"}\n"
|
|
|
|
);
|
2016-11-20 21:05:10 +00:00
|
|
|
#ifdef RTLIGHTS
|
2016-11-20 20:52:41 +00:00
|
|
|
lpplight_shader[LSHADER_SMAP] = R_RegisterShader("lpp_light#PCF", SUF_NONE,
|
|
|
|
"{\n"
|
|
|
|
"program lpp_light\n"
|
|
|
|
"{\n"
|
|
|
|
"map $sourcecolour\n"
|
|
|
|
"blendfunc gl_one gl_one\n"
|
|
|
|
"nodepthtest\n"
|
|
|
|
"}\n"
|
|
|
|
"surfaceparm nodlight\n"
|
|
|
|
"lpp_light\n"
|
|
|
|
"}\n"
|
|
|
|
);
|
2016-11-20 21:05:10 +00:00
|
|
|
#endif
|
2016-11-20 20:52:41 +00:00
|
|
|
}
|
2011-09-03 03:49:43 +00:00
|
|
|
|
|
|
|
l = cl_dlights+rtlights_first;
|
|
|
|
for (i=rtlights_first; i<rtlights_max; i++, l++)
|
|
|
|
{
|
|
|
|
if (!l->radius)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (R_CullSphere(l->origin, l->radius))
|
|
|
|
continue;
|
|
|
|
|
2016-11-20 20:52:41 +00:00
|
|
|
lmode = 0;
|
2016-11-20 21:05:10 +00:00
|
|
|
#ifdef RTLIGHTS
|
2016-11-20 20:52:41 +00:00
|
|
|
if (!(((i >= RTL_FIRST)?!r_shadow_realtime_world_shadows.ival:!r_shadow_realtime_dlight_shadows.ival) || l->flags & LFLAG_NOSHADOWS))
|
|
|
|
lmode |= LSHADER_SMAP;
|
2016-11-20 21:05:10 +00:00
|
|
|
#endif
|
2016-11-20 20:52:41 +00:00
|
|
|
// if (TEXLOADED(l->cubetexture))
|
|
|
|
// lmode |= LSHADER_CUBE;
|
|
|
|
|
2011-09-03 03:49:43 +00:00
|
|
|
b = BE_GetTempBatch();
|
|
|
|
if (!b)
|
|
|
|
return;
|
|
|
|
|
|
|
|
b->flags = 0;
|
2016-11-20 20:52:41 +00:00
|
|
|
b->shader = lpplight_shader[lmode];
|
|
|
|
sort = b->shader->sort;
|
2011-09-03 03:49:43 +00:00
|
|
|
b->buildmeshes = R_GenDlightMesh;
|
|
|
|
b->ent = &r_worldentity;
|
|
|
|
b->mesh = NULL;
|
|
|
|
b->firstmesh = 0;
|
|
|
|
b->meshes = 1;
|
2015-05-03 19:57:46 +00:00
|
|
|
b->skin = NULL;
|
2011-09-03 03:49:43 +00:00
|
|
|
b->texture = NULL;
|
2014-09-22 17:49:45 +00:00
|
|
|
for (j = 0; j < MAXRLIGHTMAPS; j++)
|
|
|
|
b->lightmap[j] = -1;
|
2011-09-03 03:49:43 +00:00
|
|
|
b->surf_first = i;
|
2016-11-20 20:52:41 +00:00
|
|
|
b->surf_count = lmode;
|
2011-09-03 03:49:43 +00:00
|
|
|
b->flags |= BEF_NOSHADOWS;
|
2011-12-23 03:12:29 +00:00
|
|
|
b->vbo = NULL;
|
2011-09-03 03:49:43 +00:00
|
|
|
b->next = batches[sort];
|
|
|
|
batches[sort] = b;
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
=============================================================================
|
|
|
|
|
|
|
|
DYNAMIC LIGHTS
|
|
|
|
|
|
|
|
=============================================================================
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
=============
|
|
|
|
R_PushDlights
|
|
|
|
=============
|
|
|
|
*/
|
2010-11-10 03:32:47 +00:00
|
|
|
void R_PushDlights (void)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
|
|
|
int i;
|
|
|
|
dlight_t *l;
|
|
|
|
|
|
|
|
r_dlightframecount = r_framecount + 1; // because the count hasn't
|
|
|
|
// advanced yet for this frame
|
|
|
|
|
2011-10-27 16:16:29 +00:00
|
|
|
#ifdef RTLIGHTS
|
|
|
|
/*if we're doing full rtlighting only, then don't bother calculating old-style dlights as they won't be visible anyway*/
|
2012-07-05 19:42:36 +00:00
|
|
|
if (r_shadow_realtime_world.ival && r_shadow_realtime_world_lightmaps.value < 0.1)
|
2011-10-27 16:16:29 +00:00
|
|
|
return;
|
|
|
|
#endif
|
|
|
|
|
2015-10-11 11:34:58 +00:00
|
|
|
if (r_dynamic.ival <= 0|| !cl.worldmodel)
|
2004-08-22 22:29:09 +00:00
|
|
|
return;
|
|
|
|
|
2006-02-28 00:46:04 +00:00
|
|
|
if (!cl.worldmodel->nodes)
|
|
|
|
return;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2005-10-16 04:03:13 +00:00
|
|
|
currentmodel = cl.worldmodel;
|
2011-12-05 15:23:40 +00:00
|
|
|
if (!currentmodel->funcs.MarkLights)
|
|
|
|
return;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2009-11-04 21:16:50 +00:00
|
|
|
l = cl_dlights+rtlights_first;
|
|
|
|
for (i=rtlights_first ; i <= DL_LAST ; i++, l++)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
2011-07-30 14:14:56 +00:00
|
|
|
if (!l->radius || !(l->flags & LFLAG_LIGHTMAP))
|
2004-08-22 22:29:09 +00:00
|
|
|
continue;
|
2005-10-16 04:03:13 +00:00
|
|
|
currentmodel->funcs.MarkLights( l, 1<<i, currentmodel->nodes );
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-01-01 02:26:42 +00:00
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
|
|
//rtlight loading
|
|
|
|
|
|
|
|
#ifdef RTLIGHTS
|
2016-11-25 08:14:54 +00:00
|
|
|
qboolean R_ImportRTLights(const char *entlump)
|
2012-01-01 02:26:42 +00:00
|
|
|
{
|
|
|
|
typedef enum lighttype_e {LIGHTTYPE_MINUSX, LIGHTTYPE_RECIPX, LIGHTTYPE_RECIPXX, LIGHTTYPE_NONE, LIGHTTYPE_SUN, LIGHTTYPE_MINUSXX} lighttype_t;
|
|
|
|
|
|
|
|
/*I'm using the DP code so I know I'll get the DP results*/
|
2013-05-11 05:03:07 +00:00
|
|
|
int entnum, style, islight, skin, pflags, n;
|
2012-01-01 02:26:42 +00:00
|
|
|
lighttype_t type;
|
2016-07-12 00:40:13 +00:00
|
|
|
float origin[3], angles[3], radius, color[3], light[4], fadescale, lightscale, originhack[3], overridecolor[3], colourscales[3], vec[4];
|
2012-01-01 02:26:42 +00:00
|
|
|
char key[256], value[8192];
|
|
|
|
int nest;
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
qboolean okay = false;
|
2012-01-01 02:26:42 +00:00
|
|
|
|
|
|
|
COM_Parse(entlump);
|
|
|
|
if (!strcmp(com_token, "Version"))
|
|
|
|
{
|
|
|
|
entlump = COM_Parse(entlump);
|
|
|
|
entlump = COM_Parse(entlump);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (entnum = 0; ;entnum++)
|
|
|
|
{
|
|
|
|
entlump = COM_Parse(entlump);
|
|
|
|
if (com_token[0] != '{')
|
|
|
|
break;
|
|
|
|
|
|
|
|
type = LIGHTTYPE_MINUSX;
|
|
|
|
origin[0] = origin[1] = origin[2] = 0;
|
|
|
|
originhack[0] = originhack[1] = originhack[2] = 0;
|
|
|
|
angles[0] = angles[1] = angles[2] = 0;
|
|
|
|
color[0] = color[1] = color[2] = 1;
|
|
|
|
light[0] = light[1] = light[2] = 1;light[3] = 300;
|
|
|
|
overridecolor[0] = overridecolor[1] = overridecolor[2] = 1;
|
|
|
|
fadescale = 1;
|
|
|
|
lightscale = 1;
|
|
|
|
style = 0;
|
|
|
|
skin = 0;
|
|
|
|
pflags = 0;
|
2016-07-12 00:40:13 +00:00
|
|
|
VectorSet(colourscales, r_editlights_import_ambient.value, r_editlights_import_diffuse.value, r_editlights_import_specular.value);
|
2013-05-11 05:03:07 +00:00
|
|
|
//effects = 0;
|
2012-01-01 02:26:42 +00:00
|
|
|
islight = false;
|
|
|
|
nest = 1;
|
|
|
|
while (1)
|
|
|
|
{
|
|
|
|
entlump = COM_Parse(entlump);
|
|
|
|
if (!entlump)
|
|
|
|
break; // error
|
|
|
|
if (com_token[0] == '{')
|
|
|
|
{
|
|
|
|
nest++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (com_token[0] == '}')
|
|
|
|
{
|
|
|
|
nest--;
|
|
|
|
if (!nest)
|
|
|
|
break; // end of entity
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (nest!=1)
|
|
|
|
continue;
|
|
|
|
if (com_token[0] == '_')
|
|
|
|
Q_strncpyz(key, com_token + 1, sizeof(key));
|
|
|
|
else
|
|
|
|
Q_strncpyz(key, com_token, sizeof(key));
|
|
|
|
while (key[strlen(key)-1] == ' ') // remove trailing spaces
|
|
|
|
key[strlen(key)-1] = 0;
|
|
|
|
entlump = COM_Parse(entlump);
|
|
|
|
if (!entlump)
|
|
|
|
break; // error
|
|
|
|
Q_strncpyz(value, com_token, sizeof(value));
|
|
|
|
|
|
|
|
// now that we have the key pair worked out...
|
|
|
|
if (!strcmp("light", key))
|
|
|
|
{
|
|
|
|
n = sscanf(value, "%f %f %f %f", &vec[0], &vec[1], &vec[2], &vec[3]);
|
|
|
|
if (n == 1)
|
|
|
|
{
|
|
|
|
// quake
|
|
|
|
light[0] = vec[0] * (1.0f / 256.0f);
|
|
|
|
light[1] = vec[0] * (1.0f / 256.0f);
|
|
|
|
light[2] = vec[0] * (1.0f / 256.0f);
|
|
|
|
light[3] = vec[0];
|
|
|
|
}
|
|
|
|
else if (n == 4)
|
|
|
|
{
|
|
|
|
// halflife
|
|
|
|
light[0] = vec[0] * (1.0f / 255.0f);
|
|
|
|
light[1] = vec[1] * (1.0f / 255.0f);
|
|
|
|
light[2] = vec[2] * (1.0f / 255.0f);
|
|
|
|
light[3] = vec[3];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (!strcmp("delay", key))
|
|
|
|
type = atoi(value);
|
|
|
|
else if (!strcmp("origin", key))
|
|
|
|
sscanf(value, "%f %f %f", &origin[0], &origin[1], &origin[2]);
|
|
|
|
else if (!strcmp("angle", key))
|
|
|
|
angles[0] = 0, angles[1] = atof(value), angles[2] = 0;
|
|
|
|
else if (!strcmp("angles", key))
|
|
|
|
sscanf(value, "%f %f %f", &angles[0], &angles[1], &angles[2]);
|
|
|
|
else if (!strcmp("color", key))
|
|
|
|
sscanf(value, "%f %f %f", &color[0], &color[1], &color[2]);
|
|
|
|
else if (!strcmp("wait", key))
|
|
|
|
fadescale = atof(value);
|
|
|
|
else if (!strcmp("classname", key))
|
|
|
|
{
|
|
|
|
if (!strncmp(value, "light", 5))
|
|
|
|
{
|
|
|
|
islight = true;
|
|
|
|
if (!strcmp(value, "light_fluoro"))
|
|
|
|
{
|
|
|
|
originhack[0] = 0;
|
|
|
|
originhack[1] = 0;
|
|
|
|
originhack[2] = 0;
|
|
|
|
overridecolor[0] = 1;
|
|
|
|
overridecolor[1] = 1;
|
|
|
|
overridecolor[2] = 1;
|
|
|
|
}
|
|
|
|
if (!strcmp(value, "light_fluorospark"))
|
|
|
|
{
|
|
|
|
originhack[0] = 0;
|
|
|
|
originhack[1] = 0;
|
|
|
|
originhack[2] = 0;
|
|
|
|
overridecolor[0] = 1;
|
|
|
|
overridecolor[1] = 1;
|
|
|
|
overridecolor[2] = 1;
|
|
|
|
}
|
|
|
|
if (!strcmp(value, "light_globe"))
|
|
|
|
{
|
|
|
|
originhack[0] = 0;
|
|
|
|
originhack[1] = 0;
|
|
|
|
originhack[2] = 0;
|
|
|
|
overridecolor[0] = 1;
|
|
|
|
overridecolor[1] = 0.8;
|
|
|
|
overridecolor[2] = 0.4;
|
|
|
|
}
|
|
|
|
if (!strcmp(value, "light_flame_large_yellow"))
|
|
|
|
{
|
|
|
|
originhack[0] = 0;
|
|
|
|
originhack[1] = 0;
|
|
|
|
originhack[2] = 0;
|
|
|
|
overridecolor[0] = 1;
|
|
|
|
overridecolor[1] = 0.5;
|
|
|
|
overridecolor[2] = 0.1;
|
|
|
|
}
|
|
|
|
if (!strcmp(value, "light_flame_small_yellow"))
|
|
|
|
{
|
|
|
|
originhack[0] = 0;
|
|
|
|
originhack[1] = 0;
|
|
|
|
originhack[2] = 0;
|
|
|
|
overridecolor[0] = 1;
|
|
|
|
overridecolor[1] = 0.5;
|
|
|
|
overridecolor[2] = 0.1;
|
|
|
|
}
|
|
|
|
if (!strcmp(value, "light_torch_small_white"))
|
|
|
|
{
|
|
|
|
originhack[0] = 0;
|
|
|
|
originhack[1] = 0;
|
|
|
|
originhack[2] = 0;
|
|
|
|
overridecolor[0] = 1;
|
|
|
|
overridecolor[1] = 0.5;
|
|
|
|
overridecolor[2] = 0.1;
|
|
|
|
}
|
|
|
|
if (!strcmp(value, "light_torch_small_walltorch"))
|
|
|
|
{
|
|
|
|
originhack[0] = 0;
|
|
|
|
originhack[1] = 0;
|
|
|
|
originhack[2] = 0;
|
|
|
|
overridecolor[0] = 1;
|
|
|
|
overridecolor[1] = 0.5;
|
|
|
|
overridecolor[2] = 0.1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (!strcmp("style", key))
|
|
|
|
style = atoi(value);
|
|
|
|
else if (!strcmp("skin", key))
|
|
|
|
skin = (int)atof(value);
|
|
|
|
else if (!strcmp("pflags", key))
|
|
|
|
pflags = (int)atof(value);
|
2013-05-11 05:03:07 +00:00
|
|
|
//else if (!strcmp("effects", key))
|
|
|
|
//effects = (int)atof(value);
|
2012-01-01 02:26:42 +00:00
|
|
|
|
|
|
|
else if (!strcmp("scale", key))
|
|
|
|
lightscale = atof(value);
|
|
|
|
else if (!strcmp("fade", key))
|
|
|
|
fadescale = atof(value);
|
|
|
|
|
2016-07-12 00:40:13 +00:00
|
|
|
#ifdef MAP_PROC
|
|
|
|
else if (!strcmp("nodynamicshadows", key)) //doom3
|
|
|
|
;
|
|
|
|
else if (!strcmp("noshadows", key)) //doom3
|
|
|
|
{
|
|
|
|
if (atof(value))
|
|
|
|
pflags |= PFLAGS_NOSHADOW;
|
|
|
|
}
|
|
|
|
else if (!strcmp("nospecular", key))//doom3
|
|
|
|
{
|
|
|
|
if (atof(value))
|
|
|
|
colourscales[2] = 0;
|
|
|
|
}
|
|
|
|
else if (!strcmp("nodiffuse", key)) //doom3
|
|
|
|
{
|
|
|
|
if (atof(value))
|
|
|
|
colourscales[1] = 0;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2012-01-01 02:26:42 +00:00
|
|
|
else if (!strcmp("light_radius", key))
|
|
|
|
{
|
|
|
|
light[0] = 1;
|
|
|
|
light[1] = 1;
|
|
|
|
light[2] = 1;
|
|
|
|
light[3] = atof(value);
|
|
|
|
}
|
2014-10-05 20:04:11 +00:00
|
|
|
else if (entnum == 0 && !strcmp("noautolight", key))
|
|
|
|
{
|
|
|
|
//tenebrae compat. don't generate rtlights automagically if the world entity specifies this.
|
|
|
|
if (atoi(value))
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
{
|
|
|
|
okay = true;
|
|
|
|
return okay;
|
|
|
|
}
|
2014-10-05 20:04:11 +00:00
|
|
|
}
|
2016-08-25 00:12:14 +00:00
|
|
|
else if (entnum == 0 && !strcmp("lightmapbright", key))
|
|
|
|
{
|
|
|
|
//tenebrae compat. this overrides r_shadow_realtime_world_lightmap
|
|
|
|
}
|
2012-01-01 02:26:42 +00:00
|
|
|
}
|
|
|
|
if (!islight)
|
|
|
|
continue;
|
|
|
|
if (lightscale <= 0)
|
|
|
|
lightscale = 1;
|
|
|
|
if (fadescale <= 0)
|
|
|
|
fadescale = 1;
|
dpp7: Treat 'dropped' c2s packets as choked when using dpp7 protocols. This is because the protocol provides no way to disambiguate, and I don't like false reports of packetloss (only reliables loss can be detected, and that's not frequent enough to be meaningful). Pings can still be determined with dpp7, for those few packets which are acked.
package manager: reworked to enable/disable plugins when downloaded, which can also be present-but-disabled.
package manager: display a confirmation prompt before applying changes. do not allow other changes to be made while applying. prompt may be skipped with 'pkg apply' in dedicated servers.
sv: downloads are no longer forced to lower case.
sv: added sv_demoAutoCompress cvar. set to 1 to directly record to *.mvd.gz
cl: properly support directly playing .mvd.gz files
menus: reworked to separate mouse and keyboard focus. mouse focus becomes keyboard focus only on mouse clicks. tooltips follow mouse cursors.
menus: cleaned up menu heirachy a little. now simpler.
server browser: changed 'hide *' filters to 'show *' instead. I felt it was more logical.
deluxmapping: changed to disabled, load, generate, like r_loadlit is.
render targets api now supports negative formats to mean nearest filtering, where filtering is part of texture state.
drawrotpic fixed, now batches and interacts with drawpic correctly.
drawline fixed, no interacts with draw* correctly, but still does not batch.
fixed saving games.
provide proper userinfo to nq clients, where supported.
qcc: catch string table overflows safely, giving errors instead of crashes. switch to 32bit statements if some over-sized function requires it.
qtv: some bigcoords support tweaks
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5073 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-03-21 05:27:07 +00:00
|
|
|
if (color[0] >= 16 || color[1] >= 16 || color[2] >= 16) //_color 255 255 255 should be identity, not super-oversaturated.
|
|
|
|
VectorScale(color, 1/255.0, color); //if only there were standards for this sort of thing.
|
2012-01-01 02:26:42 +00:00
|
|
|
if (color[0] == color[1] && color[0] == color[2])
|
|
|
|
{
|
|
|
|
color[0] *= overridecolor[0];
|
|
|
|
color[1] *= overridecolor[1];
|
|
|
|
color[2] *= overridecolor[2];
|
|
|
|
}
|
2012-12-04 19:37:57 +00:00
|
|
|
radius = light[3] * r_editlights_import_radius.value * lightscale / fadescale;
|
2012-01-01 02:26:42 +00:00
|
|
|
color[0] = color[0] * light[0];
|
|
|
|
color[1] = color[1] * light[1];
|
|
|
|
color[2] = color[2] * light[2];
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case LIGHTTYPE_MINUSX:
|
|
|
|
break;
|
|
|
|
case LIGHTTYPE_RECIPX:
|
|
|
|
radius *= 2;
|
|
|
|
VectorScale(color, (1.0f / 16.0f), color);
|
|
|
|
break;
|
|
|
|
case LIGHTTYPE_RECIPXX:
|
|
|
|
radius *= 2;
|
|
|
|
VectorScale(color, (1.0f / 16.0f), color);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
case LIGHTTYPE_NONE:
|
|
|
|
break;
|
|
|
|
case LIGHTTYPE_SUN:
|
|
|
|
break;
|
|
|
|
case LIGHTTYPE_MINUSXX:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
VectorAdd(origin, originhack, origin);
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
if (radius >= 1 && !(cl.worldmodel->funcs.PointContents(cl.worldmodel, NULL, origin) & FTECONTENTS_SOLID))
|
2012-01-01 02:26:42 +00:00
|
|
|
{
|
|
|
|
dlight_t *dl = CL_AllocSlight();
|
|
|
|
if (!dl)
|
|
|
|
break;
|
|
|
|
VectorCopy(origin, dl->origin);
|
|
|
|
AngleVectors(angles, dl->axis[0], dl->axis[1], dl->axis[2]);
|
2013-10-29 17:38:22 +00:00
|
|
|
VectorInverse(dl->axis[1]);
|
2012-01-01 02:26:42 +00:00
|
|
|
dl->radius = radius;
|
|
|
|
VectorCopy(color, dl->color);
|
|
|
|
dl->flags = 0;
|
|
|
|
dl->flags |= LFLAG_REALTIMEMODE;
|
|
|
|
dl->flags |= (pflags & PFLAGS_CORONA)?LFLAG_FLASHBLEND:0;
|
|
|
|
dl->flags |= (pflags & PFLAGS_NOSHADOW)?LFLAG_NOSHADOWS:0;
|
|
|
|
dl->style = style+1;
|
2016-07-12 00:40:13 +00:00
|
|
|
VectorCopy(colourscales, dl->lightcolourscales);
|
2013-05-11 05:03:07 +00:00
|
|
|
if (skin >= 16)
|
2014-10-05 20:04:11 +00:00
|
|
|
R_LoadNumberedLightTexture(dl, skin);
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
|
|
|
|
okay = true;
|
2012-01-01 02:26:42 +00:00
|
|
|
}
|
|
|
|
}
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
|
|
|
|
return okay;
|
2012-01-01 02:26:42 +00:00
|
|
|
}
|
|
|
|
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
qboolean R_LoadRTLights(void)
|
2012-01-01 02:26:42 +00:00
|
|
|
{
|
|
|
|
dlight_t *dl;
|
|
|
|
char fname[MAX_QPATH];
|
|
|
|
char cubename[MAX_QPATH];
|
|
|
|
char *file;
|
|
|
|
char *end;
|
|
|
|
int style;
|
|
|
|
|
|
|
|
vec3_t org;
|
|
|
|
float radius;
|
|
|
|
vec3_t rgb;
|
2014-10-05 20:04:11 +00:00
|
|
|
vec3_t avel;
|
|
|
|
float fov;
|
2012-01-01 02:26:42 +00:00
|
|
|
unsigned int flags;
|
|
|
|
|
|
|
|
float coronascale;
|
|
|
|
float corona;
|
|
|
|
float ambientscale, diffusescale, specularscale;
|
|
|
|
vec3_t angles;
|
|
|
|
|
|
|
|
//delete all old lights, even dynamic ones
|
|
|
|
rtlights_first = RTL_FIRST;
|
|
|
|
rtlights_max = RTL_FIRST;
|
|
|
|
|
|
|
|
COM_StripExtension(cl.worldmodel->name, fname, sizeof(fname));
|
|
|
|
strncat(fname, ".rtlights", MAX_QPATH-1);
|
|
|
|
|
2014-10-05 20:04:11 +00:00
|
|
|
file = COM_LoadTempFile(fname, NULL);
|
2012-01-01 02:26:42 +00:00
|
|
|
if (file)
|
|
|
|
while(1)
|
|
|
|
{
|
|
|
|
end = strchr(file, '\n');
|
|
|
|
if (!end)
|
|
|
|
end = file + strlen(file);
|
|
|
|
if (end == file)
|
|
|
|
break;
|
|
|
|
*end = '\0';
|
|
|
|
|
|
|
|
while(*file == ' ' || *file == '\t')
|
|
|
|
file++;
|
2016-08-25 00:12:14 +00:00
|
|
|
if (*file == '#')
|
|
|
|
{
|
|
|
|
file++;
|
|
|
|
while(*file == ' ' || *file == '\t')
|
|
|
|
file++;
|
|
|
|
file = COM_Parse(file);
|
|
|
|
if (!Q_strcasecmp(com_token, "lightmaps"))
|
|
|
|
{
|
|
|
|
file = COM_Parse(file);
|
|
|
|
//foo = atoi(com_token);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
Con_DPrintf("Unknown directive: %s\n", com_token);
|
|
|
|
file = end+1;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
else if (*file == '!')
|
2012-01-01 02:26:42 +00:00
|
|
|
{
|
|
|
|
flags = LFLAG_NOSHADOWS;
|
|
|
|
file++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
flags = 0;
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
|
|
|
org[0] = atof(com_token);
|
|
|
|
file = COM_Parse(file);
|
|
|
|
org[1] = atof(com_token);
|
|
|
|
file = COM_Parse(file);
|
|
|
|
org[2] = atof(com_token);
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
|
|
|
radius = atof(com_token);
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
|
|
|
rgb[0] = file?atof(com_token):1;
|
|
|
|
file = COM_Parse(file);
|
|
|
|
rgb[1] = file?atof(com_token):1;
|
|
|
|
file = COM_Parse(file);
|
|
|
|
rgb[2] = file?atof(com_token):1;
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
|
|
|
style = file?atof(com_token):0;
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
|
|
|
//cubemap
|
|
|
|
Q_strncpyz(cubename, com_token, sizeof(cubename));
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
|
|
|
//corona
|
|
|
|
corona = file?atof(com_token):0;
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
|
|
|
angles[0] = file?atof(com_token):0;
|
|
|
|
file = COM_Parse(file);
|
|
|
|
angles[1] = file?atof(com_token):0;
|
|
|
|
file = COM_Parse(file);
|
|
|
|
angles[2] = file?atof(com_token):0;
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
2014-10-05 20:04:11 +00:00
|
|
|
//corona scale
|
2012-01-01 02:26:42 +00:00
|
|
|
coronascale = file?atof(com_token):0.25;
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
|
|
|
//ambient
|
|
|
|
ambientscale = file?atof(com_token):0;
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
|
|
|
//diffuse
|
|
|
|
diffusescale = file?atof(com_token):1;
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
|
|
|
//specular
|
|
|
|
specularscale = file?atof(com_token):1;
|
|
|
|
|
|
|
|
file = COM_Parse(file);
|
|
|
|
flags |= file?atoi(com_token):LFLAG_REALTIMEMODE;
|
|
|
|
|
2014-10-05 20:04:11 +00:00
|
|
|
fov = avel[0] = avel[1] = avel[2] = 0;
|
|
|
|
while(file)
|
|
|
|
{
|
|
|
|
file = COM_Parse(file);
|
|
|
|
if (!strncmp(com_token, "rotx=", 5))
|
|
|
|
avel[0] = file?atof(com_token+5):0;
|
|
|
|
else if (!strncmp(com_token, "roty=", 5))
|
|
|
|
avel[1] = file?atof(com_token+5):0;
|
|
|
|
else if (!strncmp(com_token, "rotz=", 5))
|
|
|
|
avel[2] = file?atof(com_token+5):0;
|
|
|
|
else if (!strncmp(com_token, "fov=", 4))
|
|
|
|
fov = file?atof(com_token+4):0;
|
|
|
|
}
|
|
|
|
|
2012-01-01 02:26:42 +00:00
|
|
|
if (radius)
|
|
|
|
{
|
|
|
|
dl = CL_AllocSlight();
|
|
|
|
if (!dl)
|
|
|
|
break;
|
|
|
|
|
|
|
|
VectorCopy(org, dl->origin);
|
|
|
|
dl->radius = radius;
|
|
|
|
VectorCopy(rgb, dl->color);
|
|
|
|
dl->corona = corona;
|
|
|
|
dl->coronascale = coronascale;
|
|
|
|
dl->die = 0;
|
|
|
|
dl->flags = flags;
|
2014-10-05 20:04:11 +00:00
|
|
|
dl->fov = fov;
|
2012-07-05 19:42:36 +00:00
|
|
|
dl->lightcolourscales[0] = ambientscale;
|
|
|
|
dl->lightcolourscales[1] = diffusescale;
|
|
|
|
dl->lightcolourscales[2] = specularscale;
|
2014-10-05 20:04:11 +00:00
|
|
|
AngleVectorsFLU(angles, dl->axis[0], dl->axis[1], dl->axis[2]);
|
|
|
|
VectorCopy(avel, dl->rotation);
|
2012-01-01 02:26:42 +00:00
|
|
|
|
|
|
|
Q_strncpyz(dl->cubemapname, cubename, sizeof(dl->cubemapname));
|
|
|
|
if (*dl->cubemapname)
|
2014-10-05 20:04:11 +00:00
|
|
|
dl->cubetexture = R_LoadReplacementTexture(dl->cubemapname, "", IF_CUBEMAP, NULL, 0, 0, TF_INVALID);
|
2012-01-01 02:26:42 +00:00
|
|
|
else
|
|
|
|
dl->cubetexture = r_nulltex;
|
|
|
|
|
|
|
|
dl->style = style+1;
|
|
|
|
}
|
|
|
|
file = end+1;
|
|
|
|
}
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
return !!file;
|
2012-01-01 02:26:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void R_SaveRTLights_f(void)
|
|
|
|
{
|
|
|
|
dlight_t *light;
|
|
|
|
vfsfile_t *f;
|
|
|
|
unsigned int i;
|
|
|
|
char fname[MAX_QPATH];
|
2013-11-21 23:02:28 +00:00
|
|
|
char sysname[MAX_OSPATH];
|
2012-01-01 02:26:42 +00:00
|
|
|
vec3_t ang;
|
|
|
|
COM_StripExtension(cl.worldmodel->name, fname, sizeof(fname));
|
|
|
|
strncat(fname, ".rtlights", MAX_QPATH-1);
|
|
|
|
|
|
|
|
FS_CreatePath(fname, FS_GAMEONLY);
|
|
|
|
f = FS_OpenVFS(fname, "wb", FS_GAMEONLY);
|
|
|
|
if (!f)
|
|
|
|
{
|
|
|
|
Con_Printf("couldn't open %s\n", fname);
|
|
|
|
return;
|
|
|
|
}
|
2016-08-25 00:12:14 +00:00
|
|
|
|
|
|
|
// VFS_PUTS(f, va("#lightmap %f\n", foo));
|
|
|
|
|
2012-01-01 02:26:42 +00:00
|
|
|
for (light = cl_dlights+rtlights_first, i=rtlights_first; i<rtlights_max; i++, light++)
|
|
|
|
{
|
|
|
|
if (light->die)
|
|
|
|
continue;
|
|
|
|
if (!light->radius)
|
|
|
|
continue;
|
added r_meshpitch cvar that allows for fixing the unfixable mesh pitch bug from vanilla... needs a better name... do note that this will break pretty much any mod, so this is really only for TCs designed to use it. Its likely that I missed places.
nqsv: added support for spectators with nq clients. the angles are a bit rough, but hey. need to do something about frags so nq clients know who's a spectator. use 'cmd observe' to get an nq client to spectate on an fte server (then attack/jump behave the same as in qw clients).
nqsv: rewrote EF_MUZZLEFLASH handling, so svc_muzzleflash is now translated properly to EF_MUZZLEFLASH, and vice versa. No more missing muzzleflashes!
added screenshot_cubemap, so you can actually pre-generate cubemaps with fte (which can be used for reflections or whatever).
misc fixes (server crash, a couple of other less important ones).
external files based on a model's name will now obey r_replacemodels properly, instead of needing to use foo.mdl_0.skin for foo.md3.
identify <playernum> should now use the correct masked ip, instead of abrubtly failing (reported by kt)
vid_toggle console command should now obey vid_width and vid_height when switching to fullscreen, but only if vid_fullscreen is actually set, which should make it seem better behaved (reported by kt).
qcc: cleaned up sym->symboldata[sym->ofs] to be more consistent at all stages.
qcc: typedef float vec4[4]; now works to define a float array with 4 elements (however, it will be passed by-value rather than by-reference).
qcc: cleaned up optional vs __out ordering issues.
qccgui: shift+f3 searches backwards
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5064 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-02-27 09:34:35 +00:00
|
|
|
VectorAngles(light->axis[0], light->axis[2], ang, false);
|
2012-01-01 02:26:42 +00:00
|
|
|
VFS_PUTS(f, va(
|
|
|
|
"%s%f %f %f "
|
|
|
|
"%f %f %f %f "
|
|
|
|
"%i "
|
|
|
|
"\"%s\" %f "
|
|
|
|
"%f %f %f "
|
|
|
|
"%f %f %f %f %i "
|
2014-10-05 20:04:11 +00:00
|
|
|
"rotx=%g roty=%g rotz=%g fov=%g "
|
2012-01-01 02:26:42 +00:00
|
|
|
"\n"
|
|
|
|
,
|
|
|
|
(light->flags & LFLAG_NOSHADOWS)?"!":"", light->origin[0], light->origin[1], light->origin[2],
|
|
|
|
light->radius, light->color[0], light->color[1], light->color[2],
|
|
|
|
light->style-1,
|
|
|
|
light->cubemapname, light->corona,
|
added r_meshpitch cvar that allows for fixing the unfixable mesh pitch bug from vanilla... needs a better name... do note that this will break pretty much any mod, so this is really only for TCs designed to use it. Its likely that I missed places.
nqsv: added support for spectators with nq clients. the angles are a bit rough, but hey. need to do something about frags so nq clients know who's a spectator. use 'cmd observe' to get an nq client to spectate on an fte server (then attack/jump behave the same as in qw clients).
nqsv: rewrote EF_MUZZLEFLASH handling, so svc_muzzleflash is now translated properly to EF_MUZZLEFLASH, and vice versa. No more missing muzzleflashes!
added screenshot_cubemap, so you can actually pre-generate cubemaps with fte (which can be used for reflections or whatever).
misc fixes (server crash, a couple of other less important ones).
external files based on a model's name will now obey r_replacemodels properly, instead of needing to use foo.mdl_0.skin for foo.md3.
identify <playernum> should now use the correct masked ip, instead of abrubtly failing (reported by kt)
vid_toggle console command should now obey vid_width and vid_height when switching to fullscreen, but only if vid_fullscreen is actually set, which should make it seem better behaved (reported by kt).
qcc: cleaned up sym->symboldata[sym->ofs] to be more consistent at all stages.
qcc: typedef float vec4[4]; now works to define a float array with 4 elements (however, it will be passed by-value rather than by-reference).
qcc: cleaned up optional vs __out ordering issues.
qccgui: shift+f3 searches backwards
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5064 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-02-27 09:34:35 +00:00
|
|
|
ang[0], ang[1], ang[2],
|
2014-10-05 20:04:11 +00:00
|
|
|
light->coronascale, light->lightcolourscales[0], light->lightcolourscales[1], light->lightcolourscales[2], light->flags&(LFLAG_NORMALMODE|LFLAG_REALTIMEMODE|LFLAG_CREPUSCULAR),
|
|
|
|
light->rotation[0],light->rotation[1],light->rotation[2],light->fov
|
2012-01-01 02:26:42 +00:00
|
|
|
));
|
|
|
|
}
|
|
|
|
VFS_CLOSE(f);
|
2013-11-21 23:02:28 +00:00
|
|
|
|
|
|
|
FS_NativePath(fname, FS_GAMEONLY, sysname, sizeof(sysname));
|
|
|
|
Con_Printf("rtlights saved to %s\n", sysname);
|
2012-01-01 02:26:42 +00:00
|
|
|
}
|
|
|
|
|
2014-10-05 20:04:11 +00:00
|
|
|
void R_StaticEntityToRTLight(int i)
|
|
|
|
{
|
|
|
|
entity_state_t *state = &cl_static_entities[i].state;
|
|
|
|
dlight_t *dl;
|
|
|
|
if (!(state->lightpflags&(PFLAGS_FULLDYNAMIC|PFLAGS_CORONA)))
|
|
|
|
return;
|
|
|
|
dl = CL_AllocSlight();
|
|
|
|
if (!dl)
|
|
|
|
return;
|
|
|
|
VectorCopy(state->origin, dl->origin);
|
|
|
|
AngleVectors(state->angles, dl->axis[0], dl->axis[1], dl->axis[2]);
|
|
|
|
VectorInverse(dl->axis[1]);
|
|
|
|
dl->radius = state->light[3];
|
|
|
|
if (!dl->radius)
|
|
|
|
dl->radius = 350;
|
|
|
|
VectorScale(state->light, 1.0/1024, dl->color);
|
|
|
|
if (!state->light[0] && !state->light[1] && !state->light[2])
|
|
|
|
VectorSet(dl->color, 1, 1, 1);
|
|
|
|
dl->flags = 0;
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
dl->flags |= LFLAG_NORMALMODE|LFLAG_REALTIMEMODE;
|
2014-10-05 20:04:11 +00:00
|
|
|
dl->flags |= (state->lightpflags & PFLAGS_NOSHADOW)?LFLAG_NOSHADOWS:0;
|
|
|
|
if (state->lightpflags & PFLAGS_CORONA)
|
|
|
|
dl->corona = 1;
|
|
|
|
dl->style = state->lightstyle+1;
|
|
|
|
if (state->lightpflags & PFLAGS_FULLDYNAMIC)
|
|
|
|
{
|
|
|
|
dl->lightcolourscales[0] = r_editlights_import_ambient.value;
|
|
|
|
dl->lightcolourscales[1] = r_editlights_import_diffuse.value;
|
|
|
|
dl->lightcolourscales[2] = r_editlights_import_specular.value;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{ //corona-only light
|
|
|
|
dl->lightcolourscales[0] = 0;
|
|
|
|
dl->lightcolourscales[1] = 0;
|
|
|
|
dl->lightcolourscales[2] = 0;
|
|
|
|
}
|
|
|
|
if (state->skinnum >= 16)
|
|
|
|
R_LoadNumberedLightTexture(dl, state->skinnum);
|
|
|
|
}
|
|
|
|
|
2012-01-01 02:26:42 +00:00
|
|
|
void R_ReloadRTLights_f(void)
|
|
|
|
{
|
2014-10-05 20:04:11 +00:00
|
|
|
int i;
|
|
|
|
|
2012-01-01 02:26:42 +00:00
|
|
|
if (!cl.worldmodel)
|
|
|
|
{
|
|
|
|
Con_Printf("Cannot reload lights at this time\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
rtlights_first = RTL_FIRST;
|
|
|
|
rtlights_max = RTL_FIRST;
|
|
|
|
if (!strcmp(Cmd_Argv(1), "bsp"))
|
2016-11-25 08:14:54 +00:00
|
|
|
R_ImportRTLights(Mod_GetEntitiesString(cl.worldmodel));
|
2012-01-01 02:26:42 +00:00
|
|
|
else if (!strcmp(Cmd_Argv(1), "rtlights"))
|
|
|
|
R_LoadRTLights();
|
|
|
|
else if (strcmp(Cmd_Argv(1), "none"))
|
|
|
|
{
|
|
|
|
R_LoadRTLights();
|
|
|
|
if (rtlights_first == rtlights_max)
|
2016-11-25 08:14:54 +00:00
|
|
|
R_ImportRTLights(Mod_GetEntitiesString(cl.worldmodel));
|
2012-01-01 02:26:42 +00:00
|
|
|
}
|
2014-10-05 20:04:11 +00:00
|
|
|
|
|
|
|
for (i = 0; i < cl.num_statics; i++)
|
|
|
|
{
|
|
|
|
R_StaticEntityToRTLight(i);
|
|
|
|
}
|
2012-01-01 02:26:42 +00:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
/*
|
|
|
|
=============================================================================
|
|
|
|
|
|
|
|
LIGHT SAMPLING
|
|
|
|
|
|
|
|
=============================================================================
|
|
|
|
*/
|
|
|
|
|
|
|
|
mplane_t *lightplane;
|
|
|
|
vec3_t lightspot;
|
|
|
|
|
2015-06-28 00:42:00 +00:00
|
|
|
static void GLQ3_AddLatLong(qbyte latlong[2], vec3_t dir, float mag)
|
|
|
|
{
|
|
|
|
float lat = (float)latlong[0] * (2 * M_PI)*(1.0 / 255.0);
|
|
|
|
float lng = (float)latlong[1] * (2 * M_PI)*(1.0 / 255.0);
|
|
|
|
dir[0] += mag * cos ( lng ) * sin ( lat );
|
|
|
|
dir[1] += mag * sin ( lng ) * sin ( lat );
|
|
|
|
dir[2] += mag * cos ( lat );
|
|
|
|
}
|
|
|
|
|
2006-09-17 00:59:22 +00:00
|
|
|
void GLQ3_LightGrid(model_t *mod, vec3_t point, vec3_t res_diffuse, vec3_t res_ambient, vec3_t res_dir)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
|
|
|
q3lightgridinfo_t *lg = (q3lightgridinfo_t *)cl.worldmodel->lightgrid;
|
2005-05-26 12:55:34 +00:00
|
|
|
int index[8];
|
2004-08-22 22:29:09 +00:00
|
|
|
int vi[3];
|
|
|
|
int i, j;
|
2015-06-28 00:42:00 +00:00
|
|
|
float t[8];
|
2004-08-22 22:29:09 +00:00
|
|
|
vec3_t vf, vf2;
|
2015-06-28 00:42:00 +00:00
|
|
|
vec3_t ambient, diffuse, direction;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2015-06-28 00:42:00 +00:00
|
|
|
if (!lg || (!lg->lightgrid && !lg->rbspelements) || lg->numlightgridelems < 1)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
2004-11-17 18:13:33 +00:00
|
|
|
if(res_ambient)
|
|
|
|
{
|
|
|
|
res_ambient[0] = 64;
|
|
|
|
res_ambient[1] = 64;
|
|
|
|
res_ambient[2] = 64;
|
|
|
|
}
|
2004-11-13 17:31:04 +00:00
|
|
|
|
2004-11-17 18:13:33 +00:00
|
|
|
if (res_diffuse)
|
|
|
|
{
|
|
|
|
res_diffuse[0] = 192;
|
|
|
|
res_diffuse[1] = 192;
|
|
|
|
res_diffuse[2] = 192;
|
|
|
|
}
|
2015-06-28 00:42:00 +00:00
|
|
|
|
|
|
|
if (res_dir)
|
|
|
|
{
|
|
|
|
res_dir[0] = 1;
|
|
|
|
res_dir[1] = 1;
|
|
|
|
res_dir[2] = 0.1;
|
|
|
|
}
|
2004-08-22 22:29:09 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
//If in doubt, steal someone else's code...
|
|
|
|
//Thanks QFusion.
|
|
|
|
|
|
|
|
for ( i = 0; i < 3; i++ )
|
|
|
|
{
|
|
|
|
vf[i] = (point[i] - lg->gridMins[i]) / lg->gridSize[i];
|
2005-05-26 12:55:34 +00:00
|
|
|
vi[i] = (int)(vf[i]);
|
2004-08-22 22:29:09 +00:00
|
|
|
vf[i] = vf[i] - floor(vf[i]);
|
|
|
|
vf2[i] = 1.0f - vf[i];
|
|
|
|
}
|
|
|
|
|
2005-05-26 12:55:34 +00:00
|
|
|
for ( i = 0; i < 8; i++ )
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
2015-06-28 00:42:00 +00:00
|
|
|
//bound it properly
|
|
|
|
index[i] = bound(0, vi[0]+((i&1)?1:0), lg->gridBounds[0]-1) * 1 +
|
|
|
|
bound(0, vi[1]+((i&2)?1:0), lg->gridBounds[1]-1) * lg->gridBounds[0] +
|
|
|
|
bound(0, vi[2]+((i&4)?1:0), lg->gridBounds[2]-1) * lg->gridBounds[3] ;
|
|
|
|
t[i] = ((i&1)?vf[0]:vf2[0]) *
|
|
|
|
((i&2)?vf[1]:vf2[1]) *
|
|
|
|
((i&4)?vf[2]:vf2[2]) ;
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
2015-06-28 00:42:00 +00:00
|
|
|
//rbsp has a separate grid->index lookup for compression.
|
|
|
|
if (lg->rbspindexes)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
2015-06-28 00:42:00 +00:00
|
|
|
for (i = 0; i < 8; i++)
|
|
|
|
index[i] = lg->rbspindexes[index[i]];
|
|
|
|
}
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2015-06-28 00:42:00 +00:00
|
|
|
VectorClear(ambient);
|
|
|
|
VectorClear(diffuse);
|
|
|
|
VectorClear(direction);
|
|
|
|
if (lg->rbspelements)
|
|
|
|
{
|
|
|
|
for (i = 0; i < 8; i++)
|
|
|
|
{ //rbsp has up to 4 styles per grid element, which needs to be scaled by that style's current value
|
|
|
|
float tot = 0;
|
|
|
|
for (j = 0; j < countof(lg->rbspelements[index[i]].styles); j++)
|
|
|
|
{
|
|
|
|
qbyte st = lg->rbspelements[index[i]].styles[j];
|
|
|
|
if (st != 255)
|
|
|
|
{
|
|
|
|
float mag = d_lightstylevalue[st] * 1.0/255 * t[i];
|
|
|
|
//FIXME: cl_lightstyle[st].colours[rgb]
|
|
|
|
VectorMA (ambient, mag, lg->rbspelements[index[i]].ambient[j], ambient);
|
|
|
|
VectorMA (diffuse, mag, lg->rbspelements[index[i]].diffuse[j], diffuse);
|
|
|
|
tot += mag;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
GLQ3_AddLatLong(lg->rbspelements[index[i]].direction, direction, tot);
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
}
|
2015-06-28 00:42:00 +00:00
|
|
|
else
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
2015-06-28 00:42:00 +00:00
|
|
|
for (i = 0; i < 8; i++)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
2015-06-28 00:42:00 +00:00
|
|
|
VectorMA (ambient, t[i], lg->lightgrid[index[i]].ambient, ambient);
|
|
|
|
VectorMA (diffuse, t[i], lg->lightgrid[index[i]].diffuse, diffuse);
|
|
|
|
GLQ3_AddLatLong(lg->lightgrid[index[i]].direction, direction, t[i]);
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
2015-06-28 00:42:00 +00:00
|
|
|
VectorScale(ambient, d_lightstylevalue[0]/255.0, ambient);
|
|
|
|
VectorScale(diffuse, d_lightstylevalue[0]/255.0, diffuse);
|
|
|
|
//FIXME: cl_lightstyle[0].colours[rgb]
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
2015-06-28 00:42:00 +00:00
|
|
|
//q3bsp has *4 overbrighting.
|
|
|
|
// VectorScale(ambient, 4, ambient);
|
|
|
|
// VectorScale(diffuse, 4, diffuse);
|
2011-10-27 16:16:29 +00:00
|
|
|
|
|
|
|
/*ambient is the min level*/
|
|
|
|
/*diffuse is the max level*/
|
2004-08-22 22:29:09 +00:00
|
|
|
VectorCopy(ambient, res_ambient);
|
|
|
|
if (res_diffuse)
|
2011-10-27 16:16:29 +00:00
|
|
|
VectorAdd(diffuse, ambient, res_diffuse);
|
2004-08-22 22:29:09 +00:00
|
|
|
if (res_dir)
|
2015-06-28 00:42:00 +00:00
|
|
|
VectorCopy(direction, res_dir);
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
static int GLRecursiveLightPoint (mnode_t *node, vec3_t start, vec3_t end)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
|
|
|
int r;
|
|
|
|
float front, back, frac;
|
|
|
|
int side;
|
|
|
|
mplane_t *plane;
|
|
|
|
vec3_t mid;
|
|
|
|
msurface_t *surf;
|
|
|
|
int s, t, ds, dt;
|
|
|
|
int i;
|
|
|
|
mtexinfo_t *tex;
|
|
|
|
qbyte *lightmap;
|
|
|
|
unsigned scale;
|
|
|
|
int maps;
|
|
|
|
|
|
|
|
if (cl.worldmodel->fromgame == fg_quake2)
|
|
|
|
{
|
|
|
|
if (node->contents != -1)
|
|
|
|
return -1; // solid
|
|
|
|
}
|
|
|
|
else if (node->contents < 0)
|
|
|
|
return -1; // didn't hit anything
|
|
|
|
|
|
|
|
// calculate mid point
|
|
|
|
|
|
|
|
// FIXME: optimize for axial
|
|
|
|
plane = node->plane;
|
|
|
|
front = DotProduct (start, plane->normal) - plane->dist;
|
|
|
|
back = DotProduct (end, plane->normal) - plane->dist;
|
|
|
|
side = front < 0;
|
|
|
|
|
|
|
|
if ( (back < 0) == side)
|
|
|
|
return GLRecursiveLightPoint (node->children[side], start, end);
|
|
|
|
|
|
|
|
frac = front / (front-back);
|
|
|
|
mid[0] = start[0] + (end[0] - start[0])*frac;
|
|
|
|
mid[1] = start[1] + (end[1] - start[1])*frac;
|
|
|
|
mid[2] = start[2] + (end[2] - start[2])*frac;
|
|
|
|
|
|
|
|
// go down front side
|
|
|
|
r = GLRecursiveLightPoint (node->children[side], start, mid);
|
|
|
|
if (r >= 0)
|
|
|
|
return r; // hit something
|
|
|
|
|
|
|
|
if ( (back < 0) == side )
|
|
|
|
return -1; // didn't hit anuthing
|
|
|
|
|
|
|
|
// check for impact on this node
|
|
|
|
VectorCopy (mid, lightspot);
|
|
|
|
lightplane = plane;
|
|
|
|
|
|
|
|
surf = cl.worldmodel->surfaces + node->firstsurface;
|
|
|
|
for (i=0 ; i<node->numsurfaces ; i++, surf++)
|
|
|
|
{
|
|
|
|
if (surf->flags & SURF_DRAWTILED)
|
|
|
|
continue; // no lightmaps
|
|
|
|
|
|
|
|
tex = surf->texinfo;
|
|
|
|
|
|
|
|
s = DotProduct (mid, tex->vecs[0]) + tex->vecs[0][3];
|
|
|
|
t = DotProduct (mid, tex->vecs[1]) + tex->vecs[1][3];;
|
|
|
|
|
2011-07-30 14:14:56 +00:00
|
|
|
if (s < surf->texturemins[0] || t < surf->texturemins[1])
|
2004-08-22 22:29:09 +00:00
|
|
|
continue;
|
|
|
|
|
|
|
|
ds = s - surf->texturemins[0];
|
|
|
|
dt = t - surf->texturemins[1];
|
|
|
|
|
|
|
|
if ( ds > surf->extents[0] || dt > surf->extents[1] )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (!surf->samples)
|
|
|
|
return 0;
|
|
|
|
|
2015-03-03 00:14:43 +00:00
|
|
|
ds >>= surf->lmshift;
|
|
|
|
dt >>= surf->lmshift;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
|
|
|
lightmap = surf->samples;
|
|
|
|
r = 0;
|
|
|
|
if (lightmap)
|
|
|
|
{
|
2005-08-06 22:39:28 +00:00
|
|
|
if (cl.worldmodel->engineflags & MDLF_RGBLIGHTING)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += (dt * ((surf->extents[0]>>surf->lmshift)+1) + ds)*3;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2013-10-08 14:28:11 +00:00
|
|
|
for (maps = 0 ; maps < MAXQ1LIGHTMAPS && surf->styles[maps] != 255 ;
|
2004-08-22 22:29:09 +00:00
|
|
|
maps++)
|
|
|
|
{
|
|
|
|
scale = d_lightstylevalue[surf->styles[maps]];
|
|
|
|
r += (lightmap[0]+lightmap[1]+lightmap[2]) * scale / 3;
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += ((surf->extents[0]>>surf->lmshift)+1) * ((surf->extents[1]>>surf->lmshift)+1)*3;
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += dt * ((surf->extents[0]>>surf->lmshift)+1) + ds;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2013-10-08 14:28:11 +00:00
|
|
|
for (maps = 0 ; maps < MAXQ1LIGHTMAPS && surf->styles[maps] != 255 ;
|
2004-08-22 22:29:09 +00:00
|
|
|
maps++)
|
|
|
|
{
|
|
|
|
scale = d_lightstylevalue[surf->styles[maps]];
|
|
|
|
r += *lightmap * scale;
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += ((surf->extents[0]>>surf->lmshift)+1) * ((surf->extents[1]>>surf->lmshift)+1);
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
r >>= 8;
|
|
|
|
}
|
|
|
|
|
|
|
|
return r;
|
|
|
|
}
|
|
|
|
|
|
|
|
// go down back side
|
|
|
|
return GLRecursiveLightPoint (node->children[!side], mid, end);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-05-09 15:30:53 +00:00
|
|
|
int R_LightPoint (vec3_t p)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
|
|
|
vec3_t end;
|
|
|
|
int r;
|
|
|
|
|
|
|
|
if (r_refdef.flags & 1)
|
|
|
|
return 255;
|
2005-08-26 22:56:51 +00:00
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
if (!cl.worldmodel || !cl.worldmodel->lightdata)
|
|
|
|
return 255;
|
|
|
|
|
|
|
|
if (cl.worldmodel->fromgame == fg_quake3)
|
|
|
|
{
|
2006-09-17 00:59:22 +00:00
|
|
|
GLQ3_LightGrid(cl.worldmodel, p, NULL, end, NULL);
|
2004-08-22 22:29:09 +00:00
|
|
|
return (end[0] + end[1] + end[2])/3;
|
|
|
|
}
|
2005-08-26 22:56:51 +00:00
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
end[0] = p[0];
|
|
|
|
end[1] = p[1];
|
|
|
|
end[2] = p[2] - 2048;
|
2005-08-26 22:56:51 +00:00
|
|
|
|
2014-05-10 13:42:13 +00:00
|
|
|
r = GLRecursiveLightPoint (cl.worldmodel->rootnode, p, end);
|
2004-08-22 22:29:09 +00:00
|
|
|
|
|
|
|
if (r == -1)
|
|
|
|
r = 0;
|
|
|
|
|
|
|
|
return r;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef PEXT_LIGHTSTYLECOL
|
|
|
|
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
static float *GLRecursiveLightPoint3C (model_t *mod, mnode_t *node, vec3_t start, vec3_t end)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
|
|
|
static float l[6];
|
|
|
|
float *r;
|
|
|
|
float front, back, frac;
|
|
|
|
int side;
|
|
|
|
mplane_t *plane;
|
|
|
|
vec3_t mid;
|
|
|
|
msurface_t *surf;
|
|
|
|
int s, t, ds, dt;
|
|
|
|
int i;
|
|
|
|
mtexinfo_t *tex;
|
|
|
|
qbyte *lightmap, *deluxmap;
|
2014-05-10 13:42:13 +00:00
|
|
|
float scale, overbright;
|
2004-08-22 22:29:09 +00:00
|
|
|
int maps;
|
|
|
|
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
if (mod->fromgame == fg_quake2)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
|
|
|
if (node->contents != -1)
|
|
|
|
return NULL; // solid
|
|
|
|
}
|
|
|
|
else if (node->contents < 0)
|
|
|
|
return NULL; // didn't hit anything
|
|
|
|
|
|
|
|
// calculate mid point
|
|
|
|
|
|
|
|
// FIXME: optimize for axial
|
|
|
|
plane = node->plane;
|
|
|
|
front = DotProduct (start, plane->normal) - plane->dist;
|
|
|
|
back = DotProduct (end, plane->normal) - plane->dist;
|
|
|
|
side = front < 0;
|
2017-01-13 00:39:50 +00:00
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
if ( (back < 0) == side)
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
return GLRecursiveLightPoint3C (mod, node->children[side], start, end);
|
2017-01-13 00:39:50 +00:00
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
frac = front / (front-back);
|
|
|
|
mid[0] = start[0] + (end[0] - start[0])*frac;
|
|
|
|
mid[1] = start[1] + (end[1] - start[1])*frac;
|
|
|
|
mid[2] = start[2] + (end[2] - start[2])*frac;
|
|
|
|
|
|
|
|
// go down front side
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
r = GLRecursiveLightPoint3C (mod, node->children[side], start, mid);
|
2004-08-22 22:29:09 +00:00
|
|
|
if (r && r[0]+r[1]+r[2] >= 0)
|
|
|
|
return r; // hit something
|
2017-01-13 00:39:50 +00:00
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
if ( (back < 0) == side )
|
|
|
|
return NULL; // didn't hit anuthing
|
2017-01-13 00:39:50 +00:00
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
// check for impact on this node
|
|
|
|
VectorCopy (mid, lightspot);
|
|
|
|
lightplane = plane;
|
|
|
|
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
surf = mod->surfaces + node->firstsurface;
|
2004-08-22 22:29:09 +00:00
|
|
|
for (i=0 ; i<node->numsurfaces ; i++, surf++)
|
|
|
|
{
|
|
|
|
if (surf->flags & SURF_DRAWTILED)
|
|
|
|
continue; // no lightmaps
|
|
|
|
|
|
|
|
tex = surf->texinfo;
|
|
|
|
|
|
|
|
s = DotProduct (mid, tex->vecs[0]) + tex->vecs[0][3];
|
|
|
|
t = DotProduct (mid, tex->vecs[1]) + tex->vecs[1][3];
|
|
|
|
|
|
|
|
if (s < surf->texturemins[0] ||
|
|
|
|
t < surf->texturemins[1])
|
|
|
|
continue;
|
2017-01-13 00:39:50 +00:00
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
ds = s - surf->texturemins[0];
|
|
|
|
dt = t - surf->texturemins[1];
|
|
|
|
|
|
|
|
if ( ds > surf->extents[0] || dt > surf->extents[1] )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (!surf->samples)
|
|
|
|
{
|
|
|
|
l[0]=0;l[1]=0;l[2]=0;
|
|
|
|
l[3]=0;l[4]=1;l[5]=1;
|
|
|
|
return l;
|
|
|
|
}
|
|
|
|
|
2015-03-03 00:14:43 +00:00
|
|
|
ds >>= surf->lmshift;
|
|
|
|
dt >>= surf->lmshift;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
|
|
|
lightmap = surf->samples;
|
|
|
|
l[0]=0;l[1]=0;l[2]=0;
|
|
|
|
l[3]=0;l[4]=0;l[5]=0;
|
|
|
|
if (lightmap)
|
|
|
|
{
|
2014-05-10 13:42:13 +00:00
|
|
|
overbright = 1/255.0f;
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
if (mod->deluxdata)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
if (mod->engineflags & MDLF_RGBLIGHTING)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
deluxmap = surf->samples - mod->lightdata + mod->deluxdata;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += (dt * ((surf->extents[0]>>surf->lmshift)+1) + ds)*3;
|
|
|
|
deluxmap += (dt * ((surf->extents[0]>>surf->lmshift)+1) + ds)*3;
|
2013-10-08 14:28:11 +00:00
|
|
|
for (maps = 0 ; maps < MAXQ1LIGHTMAPS && surf->styles[maps] != 255 ;
|
2004-08-22 22:29:09 +00:00
|
|
|
maps++)
|
|
|
|
{
|
2014-05-10 13:42:13 +00:00
|
|
|
scale = d_lightstylevalue[surf->styles[maps]]*overbright;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2014-06-25 03:53:11 +00:00
|
|
|
l[0] += lightmap[0] * scale * cl_lightstyle[surf->styles[maps]].colours[0];
|
|
|
|
l[1] += lightmap[1] * scale * cl_lightstyle[surf->styles[maps]].colours[1];
|
|
|
|
l[2] += lightmap[2] * scale * cl_lightstyle[surf->styles[maps]].colours[2];
|
2004-08-22 22:29:09 +00:00
|
|
|
|
|
|
|
l[3] += (deluxmap[0]-127)*scale;
|
|
|
|
l[4] += (deluxmap[1]-127)*scale;
|
|
|
|
l[5] += (deluxmap[2]-127)*scale;
|
|
|
|
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += ((surf->extents[0]>>surf->lmshift)+1) *
|
|
|
|
((surf->extents[1]>>surf->lmshift)+1) * 3;
|
|
|
|
deluxmap += ((surf->extents[0]>>surf->lmshift)+1) *
|
|
|
|
((surf->extents[1]>>surf->lmshift)+1) * 3;
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
deluxmap = (surf->samples - mod->lightdata)*3 + mod->deluxdata;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += (dt * ((surf->extents[0]>>surf->lmshift)+1) + ds);
|
|
|
|
deluxmap += (dt * ((surf->extents[0]>>surf->lmshift)+1) + ds)*3;
|
2013-10-08 14:28:11 +00:00
|
|
|
for (maps = 0 ; maps < MAXQ1LIGHTMAPS && surf->styles[maps] != 255 ;
|
2004-08-22 22:29:09 +00:00
|
|
|
maps++)
|
|
|
|
{
|
2014-05-10 13:42:13 +00:00
|
|
|
scale = d_lightstylevalue[surf->styles[maps]]*overbright;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2014-06-25 03:53:11 +00:00
|
|
|
l[0] += *lightmap * scale * cl_lightstyle[surf->styles[maps]].colours[0];
|
|
|
|
l[1] += *lightmap * scale * cl_lightstyle[surf->styles[maps]].colours[1];
|
|
|
|
l[2] += *lightmap * scale * cl_lightstyle[surf->styles[maps]].colours[2];
|
2004-08-22 22:29:09 +00:00
|
|
|
|
|
|
|
l[3] += deluxmap[0]*scale;
|
|
|
|
l[4] += deluxmap[1]*scale;
|
|
|
|
l[5] += deluxmap[2]*scale;
|
|
|
|
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += ((surf->extents[0]>>surf->lmshift)+1) *
|
|
|
|
((surf->extents[1]>>surf->lmshift)+1);
|
|
|
|
deluxmap += ((surf->extents[0]>>surf->lmshift)+1) *
|
|
|
|
((surf->extents[1]>>surf->lmshift)+1) * 3;
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
if (mod->engineflags & MDLF_RGBLIGHTING)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += (dt * ((surf->extents[0]>>surf->lmshift)+1) + ds)*3;
|
2013-10-08 14:28:11 +00:00
|
|
|
for (maps = 0 ; maps < MAXQ1LIGHTMAPS && surf->styles[maps] != 255 ;
|
2004-08-22 22:29:09 +00:00
|
|
|
maps++)
|
|
|
|
{
|
2014-05-10 13:42:13 +00:00
|
|
|
scale = d_lightstylevalue[surf->styles[maps]]*overbright;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2014-06-25 03:53:11 +00:00
|
|
|
l[0] += lightmap[0] * scale * cl_lightstyle[surf->styles[maps]].colours[0];
|
|
|
|
l[1] += lightmap[1] * scale * cl_lightstyle[surf->styles[maps]].colours[1];
|
|
|
|
l[2] += lightmap[2] * scale * cl_lightstyle[surf->styles[maps]].colours[2];
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += ((surf->extents[0]>>surf->lmshift)+1) *
|
|
|
|
((surf->extents[1]>>surf->lmshift)+1) * 3;
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += (dt * ((surf->extents[0]>>surf->lmshift)+1) + ds);
|
2013-10-08 14:28:11 +00:00
|
|
|
for (maps = 0 ; maps < MAXQ1LIGHTMAPS && surf->styles[maps] != 255 ;
|
2004-08-22 22:29:09 +00:00
|
|
|
maps++)
|
|
|
|
{
|
2014-05-10 13:42:13 +00:00
|
|
|
scale = d_lightstylevalue[surf->styles[maps]]*overbright;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2014-06-25 03:53:11 +00:00
|
|
|
l[0] += *lightmap * scale * cl_lightstyle[surf->styles[maps]].colours[0];
|
|
|
|
l[1] += *lightmap * scale * cl_lightstyle[surf->styles[maps]].colours[1];
|
|
|
|
l[2] += *lightmap * scale * cl_lightstyle[surf->styles[maps]].colours[2];
|
2004-08-22 22:29:09 +00:00
|
|
|
|
2015-03-03 00:14:43 +00:00
|
|
|
lightmap += ((surf->extents[0]>>surf->lmshift)+1) *
|
|
|
|
((surf->extents[1]>>surf->lmshift)+1);
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return l;
|
|
|
|
}
|
|
|
|
|
|
|
|
// go down back side
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
return GLRecursiveLightPoint3C (mod, node->children[!side], mid, end);
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
2006-09-17 00:59:22 +00:00
|
|
|
void GLQ1BSP_LightPointValues(model_t *model, vec3_t point, vec3_t res_diffuse, vec3_t res_ambient, vec3_t res_dir)
|
2004-08-22 22:29:09 +00:00
|
|
|
{
|
|
|
|
vec3_t end;
|
|
|
|
float *r;
|
2016-02-15 06:01:17 +00:00
|
|
|
#ifdef RTLIGHTS
|
2011-04-30 17:21:10 +00:00
|
|
|
extern cvar_t r_shadow_realtime_world, r_shadow_realtime_world_lightmaps;
|
2016-02-15 06:01:17 +00:00
|
|
|
#endif
|
2004-08-22 22:29:09 +00:00
|
|
|
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
if (!model->lightdata || r_fullbright.ival)
|
Fixes, workarounds, and breakages. Hexen2 should work much better (-hexen2 says no mission pack, -portals says h2mp). Started working on splitting bigcoords per client, far too much work still to go on that. Removed gl_ztrick entirely. Enabled csprogs download by default. Added client support for fitzquake's 666 protocol, needs testing, some cleanup for dp protocols too, no server support, couldn't selectively enable it anyway. Now attempting to cache shadow meshes for explosions and stuff. Played with lightmaps a little, should potentially run a little faster on certain (intel?) cards. Tweeked npfte a little to try to avoid deadlocks and crashes. Fixed sky worldspawn parsing. Added h2mp's model format. Fixed baseline issue in q2 client, made servers generate q2 baselines. MOVETYPE_PUSH will not rotate extra if rotation is forced. Made status command show allowed client types. Changed lighting on weapons - should now be shaded.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3572 fc73d0e0-1445-4013-8a0c-d673dee63da5
2010-08-11 03:36:31 +00:00
|
|
|
{
|
|
|
|
res_diffuse[0] = 0;
|
|
|
|
res_diffuse[1] = 0;
|
|
|
|
res_diffuse[2] = 0;
|
|
|
|
|
|
|
|
res_ambient[0] = 255;
|
|
|
|
res_ambient[1] = 255;
|
|
|
|
res_ambient[2] = 255;
|
|
|
|
|
|
|
|
res_dir[0] = 1;
|
|
|
|
res_dir[1] = 1;
|
|
|
|
res_dir[2] = 0.1;
|
|
|
|
VectorNormalize(res_dir);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2004-08-22 22:29:09 +00:00
|
|
|
end[0] = point[0];
|
|
|
|
end[1] = point[1];
|
|
|
|
end[2] = point[2] - 2048;
|
|
|
|
|
Reworked client support for DPP5+. less code now, its much more graceful.
added waterfog command. waterfog overrides regular fog only when the view is in water.
fixed 64bit printf format specifiers. should work better on winxp64.
fixed some spec angle weirdness.
fixed viewsize 99.99 weirdness with ezhud.
fixed extra offset on the console (exhibited in 64bit builds, but not limited to).
fixed .avi playback, can now actually display frames again.
reimplemented line sparks.
fixed r_editlights_save flipping the light's pitch.
fixed issue with oggs failing to load.
fixed condump to cope with unicode properly.
made sv_bigcoords default except in quake. hexen2 kinda needs it for bsp angle precision.
fixed nq server to not stall weirdly on map changes.
fixed qwprogs svc_cdtrack not bugging out with nq clients on the server.
fixed restart command to load the last map run by the server, instead of start.bsp (when idle)
optimised d3d9 renderer a little. now uses less draw calls, especially with complex scenes. seems to get higher framerates than opengl now.
fixed d3d9 renderer to not bug out quite so much when run fullscreen (shader subsystem is now correctly initialised).
fixed a couple of bugs from font change. also now supports utf-8 in a few more places.
r_editlights_reload no longer generates rtlights inside the void. this resolves a few glitches (but should also help framerates a little).
fixed so corona-only lights won't generate shadowmaps and waste lots of time.
removed lots of #defines from qclib. I should never have made them in the first place, but I was lazy. obviously there's more left that I cba to remove yet.
fixed nested calls with variant-vectors. this fixes csaddon's light editor.
fixed qcc hc calling conventions using redundant stores.
disabled keywords can still be used by using __keyword instead.
fixed ftegccgui grep feature.
fixed motionless-dog qcc bug.
tweaked qcc warnings a little. -Wall is now a viable setting. you should be able to fix all those warnings.
fixed qw svc_intermission + dpp5+ clients bug.
fixed annoying spam about disconnecting in hexen2.
rewrote status command a little to cope with ipv6 addresses more gracefully
fixed significant stall when hibernating/debugging a server with a player sitting on it.
fixed truelightning.
fixed rocketlight overriding pflags.
fixed torches vanishing on vid_restart.
fixed issue with decal scaling.
fixed findentityfield builtin.
fixed fteqcc issue with ptr+1
fixed use of arrays inside class functions.
fixed/implemented fteqcc emulation of pointer opcodes.
added __inout keyword to fteqcc, so that it doesn't feel so horrendous.
fixed sizeof(*foo)
fixed *struct = struct;
fixed recursive structs.
fixed fteqcc warning report.
fixed sdl2 controller support, hopefully.
attempted to implement xinput, including per-player audio playback.
slightly fixed relaxed attitude to mouse focus when running fullscreen.
fixed weird warnings/errors with 'ent.arrayhead' terms. now generates sane errors.
implemented bindmaps (for csqc).
fixed crashing bug with eprint builtin.
implemented subset of music_playlist_* functionality. significant changes to music playback.
fixed some more dpcsqc compat.
fixed binds menu. now displays and accepts modifiers.
fixed issues with huge lightmaps.
fixed protocol determinism with dp clients connecting to fte servers. the initial getchallenge request now inhibits vanilla nq connection requests.
implemented support for 'dupe' userinfo key, allowing clients to request client->server packet duplication. should probably queue them tbh.
implemented sv_saveentfile command.
fixed resume after breaking inside a stepped-over function.
fixed erroneous footer after debugging.
(I wonder just how many things I broke with these fixes)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4946 fc73d0e0-1445-4013-8a0c-d673dee63da5
2015-07-26 10:56:18 +00:00
|
|
|
r = GLRecursiveLightPoint3C(model, model->rootnode, point, end);
|
2004-08-22 22:29:09 +00:00
|
|
|
if (r == NULL)
|
|
|
|
{
|
|
|
|
res_diffuse[0] = 0;
|
|
|
|
res_diffuse[1] = 0;
|
|
|
|
res_diffuse[2] = 0;
|
|
|
|
|
|
|
|
res_ambient[0] = 0;
|
|
|
|
res_ambient[1] = 0;
|
|
|
|
res_ambient[2] = 0;
|
|
|
|
|
|
|
|
res_dir[0] = 0;
|
|
|
|
res_dir[1] = 1;
|
|
|
|
res_dir[2] = 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2014-05-10 13:42:13 +00:00
|
|
|
res_diffuse[0] = r[0]*2;
|
|
|
|
res_diffuse[1] = r[1]*2;
|
|
|
|
res_diffuse[2] = r[2]*2;
|
2011-04-30 17:21:10 +00:00
|
|
|
|
|
|
|
/*bright on one side, dark on the other, but not too dark*/
|
2014-05-10 13:42:13 +00:00
|
|
|
res_ambient[0] = r[0]/2;
|
|
|
|
res_ambient[1] = r[1]/2;
|
|
|
|
res_ambient[2] = r[2]/2;
|
2004-08-22 22:29:09 +00:00
|
|
|
|
|
|
|
res_dir[0] = r[3];
|
|
|
|
res_dir[1] = r[4];
|
|
|
|
res_dir[2] = -r[5];
|
|
|
|
if (!res_dir[0] && !res_dir[1] && !res_dir[2])
|
|
|
|
res_dir[1] = res_dir[2] = 1;
|
Fixes, workarounds, and breakages. Hexen2 should work much better (-hexen2 says no mission pack, -portals says h2mp). Started working on splitting bigcoords per client, far too much work still to go on that. Removed gl_ztrick entirely. Enabled csprogs download by default. Added client support for fitzquake's 666 protocol, needs testing, some cleanup for dp protocols too, no server support, couldn't selectively enable it anyway. Now attempting to cache shadow meshes for explosions and stuff. Played with lightmaps a little, should potentially run a little faster on certain (intel?) cards. Tweeked npfte a little to try to avoid deadlocks and crashes. Fixed sky worldspawn parsing. Added h2mp's model format. Fixed baseline issue in q2 client, made servers generate q2 baselines. MOVETYPE_PUSH will not rotate extra if rotation is forced. Made status command show allowed client types. Changed lighting on weapons - should now be shaded.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3572 fc73d0e0-1445-4013-8a0c-d673dee63da5
2010-08-11 03:36:31 +00:00
|
|
|
VectorNormalize(res_dir);
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
2011-04-30 17:21:10 +00:00
|
|
|
|
2012-09-30 05:52:03 +00:00
|
|
|
#ifdef RTLIGHTS
|
2011-04-30 17:21:10 +00:00
|
|
|
if (r_shadow_realtime_world.ival)
|
|
|
|
{
|
2014-03-30 08:55:06 +00:00
|
|
|
float lm = r_shadow_realtime_world_lightmaps.value;
|
|
|
|
if (lm < 0) lm = 0;
|
|
|
|
if (lm > 1) lm = 1;
|
|
|
|
VectorScale(res_diffuse, lm, res_diffuse);
|
|
|
|
VectorScale(res_ambient, lm, res_ambient);
|
2011-04-30 17:21:10 +00:00
|
|
|
}
|
2012-09-30 05:52:03 +00:00
|
|
|
#endif
|
2004-08-22 22:29:09 +00:00
|
|
|
}
|
|
|
|
|
2004-12-15 19:53:30 +00:00
|
|
|
#endif
|