Daemon
Daemon copied to clipboard
We have two different `R_AddDecalSurface` functions in two different files.
Thankfuly they don't have the same signature, but this can be confusing.
They don't seems to really do the same things, they don't look like variant of each others that would just take a different type in input or some extra options:
In tr_world.cpp:
static void R_AddDecalSurface( bspSurface_t *surf, int decalBits )
{
int i;
// add decals
if ( decalBits )
{
// ydnar: project any decals
for ( i = 0; i < tr.refdef.numDecalProjectors; i++ )
{
if ( decalBits & ( 1 << i ) )
{
R_ProjectDecalOntoSurface( &tr.refdef.decalProjectors[ i ], surf, &tr.world->models[ 0 ] );
}
}
}
}
In tr_decals_.cpp:
void R_AddDecalSurface( decal_t *decal )
{
int i;
float fade;
srfDecal_t *srf;
/* early outs */
if ( decal->shader == nullptr || decal->parent->viewCount != tr.viewCountNoReset || tr.refdef.numDecals >= MAX_DECALS )
{
return;
}
/* get decal surface */
srf = &tr.refdef.decals[ tr.refdef.numDecals ];
tr.refdef.numDecals++;
/* set it up */
srf->surfaceType = surfaceType_t::SF_DECAL;
srf->numVerts = decal->numVerts;
memcpy( srf->verts, decal->verts, srf->numVerts * sizeof( *srf->verts ) );
/* fade colors */
if ( decal->fadeStartTime < tr.refdef.time && decal->fadeStartTime < decal->fadeEndTime )
{
fade = ( float )( decal->fadeEndTime - tr.refdef.time ) / ( float )( decal->fadeEndTime - decal->fadeStartTime );
for ( i = 0; i < decal->numVerts; i++ )
{
decal->verts[ i ].modulate[ 0 ] *= fade;
decal->verts[ i ].modulate[ 1 ] *= fade;
decal->verts[ i ].modulate[ 2 ] *= fade;
decal->verts[ i ].modulate[ 3 ] *= fade;
}
}
/* add surface to scene */
R_AddDrawSurf( ( surfaceType_t * ) srf, decal->shader, -1, decal->fogIndex );
tr.pc.c_decalSurfaces++;
/* free temporary decal */
if ( decal->fadeEndTime <= tr.refdef.time )
{
decal->shader = nullptr;
}
}