MCPcopy Create free account
hub / github.com/carbonengine/trinity / ResolveLightData

Method ResolveLightData

trinity/Tr2LightManager.cpp:520–620  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

518}
519
520void Tr2LightManager::ResolveLightData()
521{
522 m_lightData.clear();
523 for( auto& data : m_tlsLightData )
524 {
525 if( !data.empty() )
526 {
527 m_lightData.insert( end( m_lightData ), begin( data ), end( data ) );
528 }
529 data.clear();
530 }
531
532 m_shadowCastingLights.clear();
533 m_volumetricLights.clear();
534
535 // filter volumetric lights
536 std::vector<LightScreenSizeTuple> lightTuples;
537 {
538 for( uint32_t i = 0; i < m_lightData.size(); i++ )
539 {
540 if( ( m_lightData[i].flags & FLAG_IS_VOLUMETRIC ) != 0 )
541 {
542 float sizeAcross = m_frustum.GetPixelSizeAccrossEst( reinterpret_cast<Vector4*>( &m_lightData[i].position ) );
543 sizeAcross = sizeAcross == std::numeric_limits<float>::max() ? ( 1 << HIGH_QUALITY_ATLAS_SIZE_LOG2 ) : sizeAcross;
544 lightTuples.push_back( LightScreenSizeTuple{ i, sizeAcross } );
545 }
546 }
547
548 // sort volumetric lights by size on screen
549 std::sort( lightTuples.begin(), lightTuples.end(), []( const LightScreenSizeTuple& a, const LightScreenSizeTuple& b ) {
550 return a.sizeAcross > b.sizeAcross;
551 } );
552
553 // keep only the largest lights
554 uint32_t numVolumetricLights = min( MAX_NUM_VOLUMETRIC_LIGHTS, (uint32_t)lightTuples.size() );
555 m_volumetricLights.resize( numVolumetricLights );
556 uint32_t i = 0;
557 for( ; i < numVolumetricLights; i++ )
558 {
559 m_volumetricLights[i] = lightTuples[i].lightIndex;
560 }
561 for( ; i < lightTuples.size(); i++ )
562 {
563 Tr2LightManager::PerLightData& lightData = m_lightData[lightTuples[i].lightIndex];
564 lightData.flags &= ~Tr2LightManager::FLAG_IS_VOLUMETRIC;
565 }
566 }
567
568 if( !g_useDynamicLightsShadows || m_currentSpaceSceneShadowQuality == ShadowQuality::SHADOW_DISABLED )
569 {
570 return;
571 }
572
573 // filter shadowcasting lights
574 uint32_t numShadowCastingLights = 0;
575 lightTuples.resize( 0 );
576 {
577 for( uint32_t i = 0; i < m_lightData.size(); i++ )

Callers 1

BeginRenderMethod · 0.80

Calls 7

emptyMethod · 0.80
sizeMethod · 0.80
endFunction · 0.70
beginFunction · 0.70
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected