| 829 | } |
| 830 | |
| 831 | void Tr2InteriorScene::RenderDebugInfo( Tr2RenderContext& renderContext ) |
| 832 | { |
| 833 | if( !m_debugRenderer ) |
| 834 | { |
| 835 | if( m_debugRenderShadowMaps ) |
| 836 | { |
| 837 | // Need to create a debug renderer |
| 838 | m_debugRenderer = Tr2DebugRendererPtr(); |
| 839 | m_debugRenderer.CreateInstance(); |
| 840 | } |
| 841 | else |
| 842 | { |
| 843 | return; |
| 844 | } |
| 845 | } |
| 846 | |
| 847 | // Display the debug meshes for the lights |
| 848 | Tr2PerFrameVSDataDebug debugPerFrameData; |
| 849 | |
| 850 | debugPerFrameData.ViewProjectionMat = XMMatrixTranspose( |
| 851 | XMMatrixMultiply( Tr2Renderer::GetViewTransform(), Tr2Renderer::GetProjectionTransform() ) ); |
| 852 | |
| 853 | // attention: need the transposed, but shader also needs column_major, so it is transpose(transpose(m)) == m |
| 854 | debugPerFrameData.ViewInverseTransposeMat = Tr2Renderer::GetInverseViewTransform(); |
| 855 | |
| 856 | FillAndSetConstants( m_perFrameVSBuffer, debugPerFrameData, VERTEX_SHADER, Tr2Renderer::GetPerFrameVSStartRegister(), renderContext ); |
| 857 | |
| 858 | m_debugRenderer->BeginRender(); |
| 859 | auto bkProjection = Tr2Renderer::GetProjectionRawTransform(); |
| 860 | |
| 861 | Tr2Renderer::SetProjectionTransform( Tr2Renderer::GetProjectionTransform() ); |
| 862 | ON_BLOCK_EXIT( [&] { Tr2Renderer::SetProjectionTransform( bkProjection ); } ); |
| 863 | |
| 864 | for( auto it = m_lights.begin(); it != m_lights.end(); ++it ) |
| 865 | { |
| 866 | if( auto renderable = dynamic_cast<ITr2DebugRenderable*>( *it ) ) |
| 867 | { |
| 868 | renderable->RenderDebugInfo( *m_debugRenderer ); |
| 869 | } |
| 870 | } |
| 871 | for( auto it = m_dynamics.begin(); it != m_dynamics.end(); ++it ) |
| 872 | { |
| 873 | if( auto renderable = dynamic_cast<ITr2DebugRenderable*>( *it ) ) |
| 874 | { |
| 875 | renderable->RenderDebugInfo( *m_debugRenderer ); |
| 876 | } |
| 877 | } |
| 878 | renderContext.m_esm.ApplyStandardStates( Tr2EffectStateManager::RM_FULLSCREEN ); |
| 879 | RenderDebugInfo( *m_debugRenderer ); |
| 880 | |
| 881 | m_debugRenderer->EndRender( renderContext ); |
| 882 | Tr2Renderer::RenderDebugInfo( renderContext ); |
| 883 | } |
| 884 | |
| 885 | ITr2MultiPassScene::RenderPassResult Tr2InteriorScene::RenderPass( PassType pass, Tr2RenderContext& renderContext ) |
| 886 | { |
nothing calls this directly
no test coverage detected