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

Method HandleRenderTick

trinity/TriDeviceMetal.cpp:16–66  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14
15
16void 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

Callers

nothing calls this directly

Calls 6

RunUpdateMethod · 0.80
CreateUpscalingTechniqueFunction · 0.50
IsValidMethod · 0.45
MarkFrameEventMethod · 0.45
UpdateMethod · 0.45
PresentMethod · 0.45

Tested by

no test coverage detected