// returns surfID static SurfaceHandle_t R_LightVecDisplacementChain( LightVecState_t& state, bool bUseLightStyles, Vector& c ) { // test the ray against displacements SurfaceHandle_t surfID = SURFACE_HANDLE_INVALID; for ( int i = 0; i < state.m_LightTestDisps.Count(); i++ ) { float dist; Vector2D luv, tuv; IDispInfo *pDispInfo = state.m_LightTestDisps[i]; if (pDispInfo->TestRay( state.m_Ray, 0.0f, state.m_HitFrac, dist, &luv, &tuv )) { // It hit it, and at a point closer than the previously computed // nearest intersection point state.m_HitFrac = dist; surfID = pDispInfo->GetParent(); ComputeLightmapColor( surfID, (int)luv.x, (int)luv.y, bUseLightStyles, c ); if (state.m_pLightmapS && state.m_pLightmapT) { ComputeLightmapCoordsAtIntersection( SurfaceLighting(surfID), (int)luv.x, (int)luv.y, state.m_pLightmapS, state.m_pLightmapT ); } if (state.m_pTextureS && state.m_pTextureT) { *state.m_pTextureS = tuv.x; *state.m_pTextureT = tuv.y; } } } return surfID; }
// returns surfID static int R_LightVecDisplacementChain( LightVecState_t& state, bool bUseLightStyles, Vector& c ) { // test the ray against displacements int surfID = -1; IDispInfo *pDispInfo = state.m_LightTestChain.GetHead(); for( ; pDispInfo; pDispInfo = pDispInfo->GetNextInRayCastChain() ) { float dist; Vector2D luv, tuv; if (pDispInfo->TestRay( state.m_Ray, 0.0f, state.m_HitFrac, dist, &luv, &tuv )) { // It hit it, and at a point closer than the previously computed // nearest intersection point state.m_HitFrac = dist; surfID = pDispInfo->GetParent(); ComputeLightmapColor( surfID, (int)luv.x, (int)luv.y, bUseLightStyles, c ); if (state.m_pLightmapS && state.m_pLightmapT) { ComputeLightmapCoordsAtIntersection( SurfaceLighting(surfID), (int)luv.x, (int)luv.y, state.m_pLightmapS, state.m_pLightmapT ); } if (state.m_pTextureS && state.m_pTextureT) { *state.m_pTextureS = tuv.x; *state.m_pTextureT = tuv.y; } } } return surfID; }