| 14 | |
| 15 | |
| 16 | void TriDevice::HandleRenderTick( Be::Time realTime, Be::Time simTime ) |
| 17 | { |
| 18 | USE_MAIN_THREAD_RENDER_CONTEXT(); |
| 19 | |
| 20 | if( !renderContext.IsValid() ) |
| 21 | { |
| 22 | return; |
| 23 | } |
| 24 | |
| 25 | if( ShouldSkipFrame() ) |
| 26 | { |
| 27 | Throttle(); |
| 28 | return; |
| 29 | } |
| 30 | |
| 31 | if( m_upscalingChanged ) |
| 32 | { |
| 33 | CCP_LOGNOTICE( "Resetting device - Upscaler changed" ); |
| 34 | CreateUpscalingTechnique( mAdapter ); |
| 35 | ResetDevice(); |
| 36 | return; |
| 37 | } |
| 38 | |
| 39 | if( mDeviceLost ) |
| 40 | { |
| 41 | return; |
| 42 | } |
| 43 | Tr2RenderContext_GetMainThreadRenderContext().MarkFrameEvent( Tr2RenderContextEnum::FRAME_EVENT_UPDATE_STARTED ); |
| 44 | |
| 45 | if( m_renderJobs ) |
| 46 | { |
| 47 | m_renderJobs->RunUpdate( realTime, simTime ); |
| 48 | } |
| 49 | Tr2RenderContext_GetMainThreadRenderContext().MarkFrameEvent( Tr2RenderContextEnum::FRAME_EVENT_UPDATE_FINISHED ); |
| 50 | |
| 51 | m_postUpdateCallbacks->Update(); |
| 52 | |
| 53 | { |
| 54 | Tr2RenderContext_GetMainThreadRenderContext().MarkFrameEvent( Tr2RenderContextEnum::FRAME_EVENT_PRESENT_STARTED ); |
| 55 | CCP_STATS_SCOPED_TIME( presentTime ); |
| 56 | CR_RETURN( renderContext.Present() ); |
| 57 | Tr2RenderContext_GetMainThreadRenderContext().MarkFrameEvent( Tr2RenderContextEnum::FRAME_EVENT_PRESENT_FINISHED ); |
| 58 | } |
| 59 | |
| 60 | renderContext.MarkFrameEvent( Tr2RenderContextEnum::FRAME_EVENT_RENDERING_STARTED ); |
| 61 | if( !Render() ) |
| 62 | { |
| 63 | CCP_LOGERR( "Failed to render a frame" ); |
| 64 | } |
| 65 | renderContext.MarkFrameEvent( Tr2RenderContextEnum::FRAME_EVENT_RENDERING_FINISHED ); |
| 66 | } |
| 67 | |
| 68 | // -- Smaller helpers to enable big methods like TriDevice::Render to be mostly API neutral. |
| 69 |
nothing calls this directly
no test coverage detected