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

Method RenderBatchesWithOverride

trinity/Tr2RenderContext.cpp:787–861  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

785}
786
787void Tr2RenderContextBase::RenderBatchesWithOverride( ITriRenderBatchAccumulator* batches, Tr2Material* overrideEffect, const BlueSharedString& techniqueName )
788{
789 CCP_STATS_ZONE( __FUNCTION__ );
790
791 if( !overrideEffect )
792 {
793 RenderBatches( batches, techniqueName );
794 return;
795 }
796
797 Tr2RenderContext* primaryContext = reinterpret_cast<Tr2RenderContext*>( this );
798 Tr2RingBuffer::GetInstance<Float4x3>().PrepareBuffer( *primaryContext );
799 Tr2RingBuffer::GetInstance<Tr2MorphTargetAnimationData>().PrepareBuffer( *primaryContext );
800
801 D3DPERF_EVENT( L"Tr2RenderContextBase::RenderBatchesWithOverride" );
802
803 auto overrideShader = overrideEffect->GetShaderStateInterface();
804 if( !overrideShader )
805 {
806 return;
807 }
808
809 Tr2RenderContext* renderContext = reinterpret_cast<Tr2RenderContext*>( this );
810 UseTextures( batches, techniqueName, *renderContext );
811
812 Tr2ConstantBufferAL* perObjectConstantBuffers[CBUFFER_COUNT];
813 for( uint32_t i = 0; i != CBUFFER_COUNT; ++i )
814 {
815 perObjectConstantBuffers[i] = &m_perObjectConstantBuffers[i];
816 }
817
818 auto overrideMaterial = overrideEffect;
819
820 auto RenderBatch = [&]( auto& batch ) {
821 uint32_t technique;
822 if( !batch.m_shader->GetTechniqueIndex( techniqueName, technique ) )
823 {
824 return;
825 }
826
827 m_esm.ApplyStandardStates( batch.m_renderingMode );
828
829 uint32_t passCount = overrideShader->GetPassCount( technique );
830 for( uint32_t passIx = 0; passIx < passCount; ++passIx )
831 {
832 D3DPERF_EVENT1( L"Pass %i", passIx );
833
834 auto program = batch.m_shader->ApplyShaderOverride( technique, 0, *overrideShader, passIx, *renderContext );
835 batch.m_material->ApplyMaterialDataForPassWithOverride( technique, 0, program, *renderContext );
836 overrideShader->ApplyRenderStates( 0, passIx, *renderContext );
837
838 if( batch.m_objectData )
839 {
840 batch.m_objectData->SetPerObjectDataToDevice( perObjectConstantBuffers, overrideShader->GetShaderTypeMask( 0 ), *renderContext );
841 }
842
843 Tr2GpuProfiler::GetProfiler().Begin( batch.m_material, GetPassName( passIx ), *renderContext );
844

Callers 6

ExecuteMethod · 0.80
RenderGeometryMethod · 0.80
RenderBatchMethod · 0.80
RenderOpaqueBatchesMethod · 0.80

Calls 15

UseTexturesFunction · 0.85
GetPassNameFunction · 0.85
SubmitGeometryFunction · 0.85
PrepareBufferMethod · 0.80
GetTechniqueIndexMethod · 0.80
ApplyStandardStatesMethod · 0.80
GetPassCountMethod · 0.80
ApplyShaderOverrideMethod · 0.80
GetShaderTypeMaskMethod · 0.80
ApplyRenderStatesMethod · 0.45

Tested by

no test coverage detected