//----------------------------------------------------------------------------- // For every specular surface that wasn't referenced by some env_cubemap, call Cubemap_CreateTexInfo. //----------------------------------------------------------------------------- void Cubemap_AttachDefaultCubemapToSpecularSides( void ) { Cubemap_ResetCubemapSideData(); Cubemap_InitCubemapSideData(); CUtlVector<entitySideList_t> sideList; sideList.SetCount( num_entities ); int i; for ( i = 0; i < num_entities; i++ ) { sideList[i].firstBrushSide = 0; sideList[i].brushSideCount = 0; } for ( i = 0; i < nummapbrushes; i++ ) { sideList[mapbrushes[i].entitynum].brushSideCount += mapbrushes[i].numsides; } int curSide = 0; for ( i = 0; i < num_entities; i++ ) { sideList[i].firstBrushSide = curSide; curSide += sideList[i].brushSideCount; } int currentEntity = 0; for ( int iSide = 0; iSide < nummapbrushsides; ++iSide ) { side_t *pSide = &brushsides[iSide]; if ( !SideHasCubemapAndWasntManuallyReferenced( iSide ) ) continue; while ( currentEntity < num_entities-1 && iSide > sideList[currentEntity].firstBrushSide + sideList[currentEntity].brushSideCount ) { currentEntity++; } int iCubemap = Cubemap_FindClosestCubemap( entities[currentEntity].origin, pSide ); if ( iCubemap == -1 ) continue; #ifdef DEBUG if ( pSide->pMapDisp ) { Assert( pSide->texinfo == pSide->pMapDisp->face.texinfo ); } #endif pSide->texinfo = Cubemap_CreateTexInfo( pSide->texinfo, g_CubemapSamples[iCubemap].origin ); if ( pSide->pMapDisp ) { pSide->pMapDisp->face.texinfo = pSide->texinfo; } } }
//----------------------------------------------------------------------------- // For every specular surface that wasn't referenced by some env_cubemap, call Cubemap_CreateTexInfo. //----------------------------------------------------------------------------- void Cubemap_AttachDefaultCubemapToSpecularSides( void ) { Cubemap_ResetCubemapSideData(); Cubemap_InitCubemapSideData(); // build a mapping from side to entity id so that we can get the entity origin CUtlVector<int> sideToEntityIndex; sideToEntityIndex.SetCount(g_MainMap->nummapbrushsides); int i; for ( i = 0; i < g_MainMap->nummapbrushsides; i++ ) { sideToEntityIndex[i] = -1; } for ( i = 0; i < g_MainMap->nummapbrushes; i++ ) { int entityIndex = g_MainMap->mapbrushes[i].entitynum; for ( int j = 0; j < g_MainMap->mapbrushes[i].numsides; j++ ) { side_t *side = &g_MainMap->mapbrushes[i].original_sides[j]; int sideIndex = side - g_MainMap->brushsides; sideToEntityIndex[sideIndex] = entityIndex; } } for ( int iSide = 0; iSide < g_MainMap->nummapbrushsides; ++iSide ) { side_t *pSide = &g_MainMap->brushsides[iSide]; if ( !SideHasCubemapAndWasntManuallyReferenced( iSide ) ) continue; int currentEntity = sideToEntityIndex[iSide]; int iCubemap = Cubemap_FindClosestCubemap( g_MainMap->entities[currentEntity].origin, pSide ); if ( iCubemap == -1 ) continue; #ifdef DEBUG if ( pSide->pMapDisp ) { Assert( pSide->texinfo == pSide->pMapDisp->face.texinfo ); } #endif pSide->texinfo = Cubemap_CreateTexInfo( pSide->texinfo, g_CubemapSamples[iCubemap].origin ); if ( pSide->pMapDisp ) { pSide->pMapDisp->face.texinfo = pSide->texinfo; } } }
//----------------------------------------------------------------------------- // Goes through s_EnvCubemapToBrushSides and does Cubemap_CreateTexInfo for each // side referenced by an env_cubemap manually. //----------------------------------------------------------------------------- void Cubemap_FixupBrushSidesMaterials( void ) { Msg( "fixing up env_cubemap materials on brush sides...\n" ); Assert( s_EnvCubemapToBrushSides.Count() == g_nCubemapSamples ); int cubemapID; for( cubemapID = 0; cubemapID < g_nCubemapSamples; cubemapID++ ) { IntVector_t &brushSidesVector = s_EnvCubemapToBrushSides[cubemapID]; int i; for( i = 0; i < brushSidesVector.Count(); i++ ) { int brushSideID = brushSidesVector[i]; int sideIndex = SideIDToIndex( brushSideID ); if( sideIndex < 0 ) { Warning("env_cubemap pointing at deleted brushside near (%d, %d, %d)\n", g_CubemapSamples[cubemapID].origin[0], g_CubemapSamples[cubemapID].origin[1], g_CubemapSamples[cubemapID].origin[2] ); continue; } side_t *pSide = &brushsides[sideIndex]; #ifdef DEBUG if ( pSide->pMapDisp ) { Assert( pSide->texinfo == pSide->pMapDisp->face.texinfo ); } #endif pSide->texinfo = Cubemap_CreateTexInfo( pSide->texinfo, g_CubemapSamples[cubemapID].origin ); if ( pSide->pMapDisp ) { pSide->pMapDisp->face.texinfo = pSide->texinfo; } } } }