cvar_t r_bloom_resolution = {CVAR_SAVE, "r_bloom_resolution", "320"};
cvar_t r_bloom_power = {CVAR_SAVE, "r_bloom_power", "4"};
+cvar_t r_smoothnormals_areaweighting = {0, "r_smoothnormals_areaweighting", "1"};
+
cvar_t developer_texturelogging = {0, "developer_texturelogging", "0"};
cvar_t gl_lightmaps = {0, "gl_lightmaps", "0"};
if (cl.worldmodel)
{
strlcpy(entname, cl.worldmodel->name, sizeof(entname));
- l = strlen(entname) - 4;
+ l = (int)strlen(entname) - 4;
if (l >= 0 && !strcmp(entname + l, ".bsp"))
{
strcpy(entname + l, ".ent");
Cvar_RegisterVariable(&r_bloom_blur);
Cvar_RegisterVariable(&r_bloom_resolution);
Cvar_RegisterVariable(&r_bloom_power);
+ Cvar_RegisterVariable(&r_smoothnormals_areaweighting);
Cvar_RegisterVariable(&developer_texturelogging);
Cvar_RegisterVariable(&gl_lightmaps);
if (gamemode == GAME_NEHAHRA || gamemode == GAME_NEXUIZ || gamemode == GAME_TENEBRAE)
{
gl_backend_init();
R_Textures_Init();
- Mod_RenderInit();
R_MeshQueue_Init();
GL_Main_Init();
GL_Draw_Init();
UI_Init();
Sbar_Init();
R_LightningBeams_Init();
+ Mod_RenderInit();
}
/*
rsurface_svector3f = varray_svector3f;
rsurface_tvector3f = varray_tvector3f;
rsurface_normal3f = varray_normal3f;
- Mod_BuildTextureVectorsAndNormals(surface->num_firstvertex, surface->num_vertices, surface->num_triangles, rsurface_vertex3f, surface->groupmesh->data_texcoordtexture2f, surface->groupmesh->data_element3i + surface->num_firsttriangle * 3, rsurface_svector3f, rsurface_tvector3f, rsurface_normal3f);
+ Mod_BuildTextureVectorsAndNormals(surface->num_firstvertex, surface->num_vertices, surface->num_triangles, rsurface_vertex3f, surface->groupmesh->data_texcoordtexture2f, surface->groupmesh->data_element3i + surface->num_firsttriangle * 3, rsurface_svector3f, rsurface_tvector3f, rsurface_normal3f, r_smoothnormals_areaweighting.integer);
}
// a single autosprite surface can contain multiple sprites...
VectorClear(forward);
rsurface_svector3f = varray_svector3f;
rsurface_tvector3f = varray_tvector3f;
rsurface_normal3f = varray_normal3f;
- Mod_BuildTextureVectorsAndNormals(surface->num_firstvertex, surface->num_vertices, surface->num_triangles, rsurface_vertex3f, surface->groupmesh->data_texcoordtexture2f, surface->groupmesh->data_element3i + surface->num_firsttriangle * 3, rsurface_svector3f, rsurface_tvector3f, rsurface_normal3f);
+ Mod_BuildTextureVectorsAndNormals(surface->num_firstvertex, surface->num_vertices, surface->num_triangles, rsurface_vertex3f, surface->groupmesh->data_texcoordtexture2f, surface->groupmesh->data_element3i + surface->num_firsttriangle * 3, rsurface_svector3f, rsurface_tvector3f, rsurface_normal3f, r_smoothnormals_areaweighting.integer);
}
Matrix4x4_Transform(&ent->inversematrix, r_viewforward, forward);
Matrix4x4_Transform(&ent->inversematrix, r_viewright, right);
vec4_t ambientcolor4f;
vec3_t diffusecolor;
vec3_t diffusenormal;
- if (R_LightModel(ambientcolor4f, diffusecolor, diffusenormal, ent, r, g, b, a, false))
+ if (R_LightModel(ambientcolor4f, diffusecolor, diffusenormal, ent, r*0.5f, g*0.5f, b*0.5f, a, false))
{
rsurface_lightmapcolor4f = varray_color4f;
if (rsurface_normal3f == NULL)
{
rsurface_normal3f = varray_normal3f;
- Mod_BuildNormals(surface->num_firstvertex, surface->num_vertices, surface->num_triangles, rsurface_vertex3f, surface->groupmesh->data_element3i + 3 * surface->num_firsttriangle, rsurface_normal3f);
+ Mod_BuildNormals(surface->num_firstvertex, surface->num_vertices, surface->num_triangles, rsurface_vertex3f, surface->groupmesh->data_element3i + 3 * surface->num_firsttriangle, rsurface_normal3f, r_smoothnormals_areaweighting.integer);
}
R_LightModel_CalcVertexColors(ambientcolor4f, diffusecolor, diffusenormal, surface->groupmesh->num_vertices, rsurface_vertex3f + 3 * surface->num_firstvertex, rsurface_normal3f + 3 * surface->num_firstvertex, rsurface_lightmapcolor4f + 4 * surface->num_firstvertex);
r = 1;
if (waterscrolling)
m.texmatrix[0] = r_waterscrollmatrix;
m.pointer_color = varray_color4f;
- colorscale = 1;
+ colorscale = 2;
if (gl_combine.integer)
{
m.texrgbscale[0] = 2;
- colorscale *= 0.5f;
+ colorscale = 1;
}
// transparent is not affected by r_lightmapintensity
if (!(texture->currentmaterialflags & MATERIALFLAG_TRANSPARENT))
if (waterscrolling)
m.texmatrix[0] = r_waterscrollmatrix;
m.pointer_color = varray_color4f;
- colorscale = 1;
+ colorscale = 2;
if (gl_combine.integer)
{
m.texrgbscale[0] = 2;
- colorscale *= 0.5f;
+ colorscale *= 1;
}
// transparent is not affected by r_lightmapintensity
if (!(texture->currentmaterialflags & MATERIALFLAG_TRANSPARENT))
m.texmatrix[0] = r_waterscrollmatrix;
m.pointer_color = varray_color4f;
colorscale = 1;
- if (gl_combine.integer)
+ if (gl_combine.integer && (ent->colormod[0] > 1 || ent->colormod[1] > 1 || ent->colormod[2] > 1))
{
- m.texrgbscale[0] = 2;
- colorscale *= 0.5f;
+ m.texrgbscale[0] = 4;
+ colorscale = 0.25f;
}
R_Mesh_State(&m);
colorscale *= r_ambient.value * (1.0f / 64.0f);
m.texmatrix[0] = r_waterscrollmatrix;
m.pointer_color = varray_color4f;
R_Mesh_State(&m);
- colorscale = 1;
- r = ent->colormod[0] * colorscale;
- g = ent->colormod[1] * colorscale;
- b = ent->colormod[2] * colorscale;
+ r = 1;
+ g = 1;
+ b = 1;
a = texture->currentalpha;
applycolor = r != 1 || g != 1 || b != 1 || a != 1;
for (texturesurfaceindex = 0;texturesurfaceindex < texturenumsurfaces;texturesurfaceindex++)