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

Method OnPrepareResources

trinity/Tr2SolidSet.cpp:41–111  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

39}
40
41bool Tr2SolidSet::OnPrepareResources()
42{
43 USE_MAIN_THREAD_RENDER_CONTEXT();
44
45 if( m_vertexDeclHandle == Tr2EffectStateManager::UNINITIALIZED_DECLARATION )
46 {
47 Tr2VertexDefinition vd;
48 vd.Add( vd.FLOAT32_3, vd.POSITION );
49 vd.Add( vd.FLOAT32_3, vd.NORMAL );
50 vd.Add( vd.FLOAT32_4, vd.TEXCOORD );
51
52 m_vertexDeclHandle = Tr2EffectStateManager::GetVertexDeclarationHandle( vd );
53 if( m_vertexDeclHandle == Tr2EffectStateManager::UNINITIALIZED_DECLARATION )
54 {
55 return false;
56 }
57 }
58
59 if( m_triangles.size() )
60 {
61 if( !m_vertexBuffer.IsValid() || ( m_currentSubmittedTriangleCount < m_triangles.size() ) )
62 {
63 USE_MAIN_THREAD_RENDER_CONTEXT();
64 CR_RETURN_VAL(
65 m_vertexBuffer.Create(
66 sizeof( TriangleVertex ),
67 (unsigned int)m_triangles.size() * 3,
68 Tr2GpuUsage::VERTEX_BUFFER,
69 Tr2CpuUsage::WRITE_OFTEN,
70 nullptr,
71 renderContext ),
72 false );
73 m_currentSubmittedTriangleCount = (unsigned int)m_triangles.size();
74 }
75
76 std::vector<TriangleVertex> vertexBuffer( m_triangles.size() * 3 );
77
78 // Copy our user data to the buffer
79 unsigned int j = 0;
80 for( unsigned int i = 0; i < m_triangles.size(); i++, j += 3 )
81 {
82 vertexBuffer[j].m_color = m_triangles[i].m_color1;
83 vertexBuffer[j].m_position = m_triangles[i].m_position1;
84 vertexBuffer[j].m_normal = m_triangles[i].m_normal;
85
86 vertexBuffer[j + 1].m_color = m_triangles[i].m_color2;
87 vertexBuffer[j + 1].m_position = m_triangles[i].m_position2;
88 vertexBuffer[j + 1].m_normal = m_triangles[i].m_normal;
89
90 vertexBuffer[j + 2].m_color = m_triangles[i].m_color3;
91 vertexBuffer[j + 2].m_position = m_triangles[i].m_position3;
92 vertexBuffer[j + 2].m_normal = m_triangles[i].m_normal;
93 }
94
95 // Create a bounding sphere
96 Vector3 center( 0.0f, 0.0f, 0.0f );
97 float radius = 0.0f;
98 ComputeBoundingSphere( &vertexBuffer[0].m_position, (unsigned int)m_triangles.size() * 3, sizeof( TriangleVertex ), center, radius );

Callers

nothing calls this directly

Calls 7

sizeMethod · 0.80
AddMethod · 0.45
IsValidMethod · 0.45
CreateMethod · 0.45
MapForWritingMethod · 0.45
UnmapForWritingMethod · 0.45

Tested by

no test coverage detected