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

Method EndCapture

trinity/Sprite2d/Tr2Sprite2dScene.cpp:1974–2071  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1972}
1973
1974Tr2Sprite2dDisplayList* Tr2Sprite2dScene::EndCapture( Tr2Sprite2dDisplayList* previousDisplayList )
1975{
1976 CCP_STATS_ZONE( __FUNCTION__ );
1977
1978 CCP_ASSERT( m_captureDisplayList );
1979 if( !m_captureDisplayList )
1980 {
1981 return nullptr;
1982 }
1983
1984 IssueDrawCall();
1985
1986 HRESULT hr;
1987
1988 USE_MAIN_THREAD_RENDER_CONTEXT();
1989
1990 // Create a vertex buffer for capturing upcoming vertices. This is a static vertex buffer,
1991 // even though it may be short-lived. Filling a vertex buffer in the managed pool is faster
1992 // than if it were in the default pool so we use the managed pool.
1993
1994 unsigned int vbSize = m_captureVertexDataSize * sizeof( Tr2Sprite2dD3DVertex );
1995 unsigned int ibSize = m_captureIndexDataSize * sizeof( unsigned int );
1996
1997 if( !vbSize || !ibSize )
1998 {
1999 ResetCapture();
2000 return nullptr;
2001 }
2002
2003 {
2004 bool reusedVb = false;
2005 if( previousDisplayList && previousDisplayList->vertexBuffer.IsValid() &&
2006 previousDisplayList->vertexBuffer.GetSize() >= vbSize && previousDisplayList->vertexBuffer.GetSize() / 2 <= vbSize )
2007 {
2008 if( SUCCEEDED( previousDisplayList->vertexBuffer.UpdateBuffer( 0, vbSize, m_captureVertexData.get(), renderContext ) ) )
2009 {
2010 m_captureDisplayList->vertexBuffer = previousDisplayList->vertexBuffer;
2011 previousDisplayList->vertexBuffer = Tr2BufferAL();
2012 reusedVb = true;
2013 }
2014 }
2015 if( !reusedVb )
2016 {
2017 vbSize = std::min( m_captureVertexDataCapacity, m_captureVertexDataSize + m_captureVertexDataSize / 4 ) * sizeof( Tr2Sprite2dD3DVertex );
2018 hr = m_captureDisplayList->vertexBuffer.Create( 1, vbSize, Tr2GpuUsage::VERTEX_BUFFER, Tr2CpuUsage::WRITE, m_captureVertexData.get(), renderContext );
2019 if( FAILED( hr ) )
2020 {
2021 CCP_LOGERR( "%s failed (%d) to create vertex buffer for %d vertices (%d KiB)", __FUNCTION__, hr, m_captureVertexDataSize, vbSize / 1024 );
2022 ResetCapture();
2023 return nullptr;
2024 }
2025 else
2026 {
2027 CCP_STATS_ADD( displayListVertexBufferSize, vbSize );
2028 m_captureDisplayList->vertexBuffer.SetName( "UI Captured Vertex Buffer" );
2029 }
2030 }
2031 }

Callers 1

GatherSpritesMethod · 0.80

Calls 7

getMethod · 0.80
Tr2BufferALClass · 0.50
IsValidMethod · 0.45
GetSizeMethod · 0.45
UpdateBufferMethod · 0.45
CreateMethod · 0.45
SetNameMethod · 0.45

Tested by

no test coverage detected