/* * R_AddEntityToScene */ void R_AddEntityToScene( const entity_t *ent ) { if( !r_drawentities->integer ) return; if( ( rsc.numEntities < MAX_ENTITIES ) && ent ) { int eNum = rsc.numEntities; entity_t *de = R_NUM2ENT(eNum); *de = *ent; if( r_outlines_scale->value <= 0 ) de->outlineHeight = 0; rsc.entShadowBits[eNum] = 0; rsc.entShadowGroups[eNum] = 0; if( de->rtype == RT_MODEL ) { if( de->model && de->model->type == mod_brush ) { rsc.bmodelEntities[rsc.numBmodelEntities++] = de; } if( !(de->renderfx & RF_NOSHADOW) ) { R_AddLightOccluder( de ); // build groups and mark shadow casters } } if( de->renderfx & RF_ALPHAHACK ) { if( de->shaderRGBA[3] == 255 ) { de->renderfx &= ~RF_ALPHAHACK; } } rsc.numEntities++; } }
/* * R_AddEntityToScene */ void R_AddEntityToScene( const entity_t *ent ) { if( !r_drawentities->integer ) return; if( ( ( rsc.numEntities - rsc.numLocalEntities ) < MAX_ENTITIES ) && ent ) { int eNum = rsc.numEntities; entity_t *de = R_NUM2ENT(eNum); *de = *ent; if( r_outlines_scale->value <= 0 ) de->outlineHeight = 0; rsc.entShadowBits[eNum] = 0; rsc.entShadowGroups[eNum] = 0; if( de->rtype == RT_MODEL ) { if( de->model && de->model->type == mod_brush ) { rsc.bmodelEntities[rsc.numBmodelEntities++] = de; } if( !(de->renderfx & RF_NOSHADOW) ) { R_AddLightOccluder( de ); // build groups and mark shadow casters } } else if( de->rtype == RT_SPRITE ) { // simplifies further checks de->model = NULL; } if( de->renderfx & RF_ALPHAHACK ) { if( de->shaderRGBA[3] == 255 ) { de->renderfx &= ~RF_ALPHAHACK; } } rsc.numEntities++; // add invisible fake entity for depth write if( (de->renderfx & (RF_WEAPONMODEL|RF_ALPHAHACK)) == (RF_WEAPONMODEL|RF_ALPHAHACK) ) { entity_t tent = *ent; tent.renderfx &= ~RF_ALPHAHACK; tent.renderfx |= RF_NOCOLORWRITE|RF_NOSHADOW; R_AddEntityToScene( &tent ); } } }