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

Method RenderRaytracedShadows

trinity/Tr2LightManager.cpp:817–925  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

815}
816
817Tr2GpuResourcePool::Texture Tr2LightManager::RenderRaytracedShadows(
818 Tr2RaytracingGeometry* geometry,
819 const Tr2TextureAL& depth,
820 const Tr2TextureAL& normal,
821 const CcpMath::Sphere* planets,
822 size_t planetCount,
823 Tr2GpuResourcePool& gpuResourcePool,
824 Tr2RenderContext& renderContext )
825{
826 renderContext.AddGpuMarker( __FUNCTION__ );
827 GPU_REGION( renderContext, "Raytraced dynamic shadows" );
828 CCP_STATS_ZONE( __FUNCTION__ );
829
830 if( m_shadowCastingLights.size() == 0 || !g_useDynamicLightsShadows )
831 {
832 return {};
833 }
834
835 auto destTex = gpuResourcePool.GetTempTexture( "raytracing_dynamic_shadow_dest", depth.GetWidth(), depth.GetHeight(), Tr2RenderContextEnum::PIXEL_FORMAT_R16_UINT, Tr2GpuUsage::SHADER_RESOURCE | Tr2GpuUsage::UNORDERED_ACCESS );
836
837 // texture uav
838 m_Raytracing.m_effect->SetParameter( RtShadowMapTechniqueName, destTex );
839 m_Raytracing.m_effect->SetParameter( RtNormalBufferTechniqueName, normal );
840 ON_BLOCK_EXIT( [&] { m_Raytracing.m_effect->SetParameter( RtNormalBufferTechniqueName, Tr2TextureAL() ); } );
841
842 // scene srv
843 m_Raytracing.m_effect->SetParameter( RtSceneTechniqueName, geometry );
844
845 if( !m_Raytracing.m_effect->GetEffectRes() || !m_Raytracing.m_effect->GetEffectRes()->IsGood() )
846 {
847 return {};
848 }
849
850 if( !geometry->HasGeometry() )
851 {
852 return {};
853 }
854
855 uint32_t techniqueIndex;
856 if( !m_Raytracing.m_effect->GetShaderStateInterface()->GetTechniqueIndex( RtShadowTechniqueName, techniqueIndex ) )
857 {
858 return {};
859 }
860
861 BlueSharedStringW rayGenName, missName;
862 m_Raytracing.m_pipelineManager.AddLibrary( rayGenName, missName, m_Raytracing.m_effect, RtShadowTechniqueName );
863
864 auto pipelineState = m_Raytracing.m_pipelineManager.GetPipelineState( renderContext );
865
866 if( !pipelineState.IsValid() )
867 {
868 return {};
869 }
870
871 if( !m_Raytracing.m_perFrameData.IsValid() )
872 {
873 m_Raytracing.m_perFrameData.Create( sizeof( RtShadowPerFrameData ), renderContext.GetPrimaryRenderContext() );
874 }

Callers 1

RenderShadowsMethod · 0.80

Calls 15

TransposeFunction · 0.85
sizeMethod · 0.80
GetTempTextureMethod · 0.80
GetEffectResMethod · 0.80
HasGeometryMethod · 0.80
GetTechniqueIndexMethod · 0.80
AddLibraryMethod · 0.80
AddRayGenShaderMethod · 0.80
AddMissShaderMethod · 0.80
GetTLASMethod · 0.80

Tested by

no test coverage detected