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

Method Allocate

trinity/Eve/EveInstancedMeshManager.cpp:369–403  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

367
368
369EveInstancedMeshManager::InstanceBuffer::Allocation EveInstancedMeshManager::InstanceBuffer::Allocate( uint32_t count )
370{
371 USE_MAIN_THREAD_RENDER_CONTEXT();
372
373 auto frameNumber = renderContext.GetRecordingFrameNumber();
374
375 auto offset = GetUnusedRegion( count );
376 if( !offset.has_value() )
377 {
378 if( mappedData )
379 {
380 mappedRetiredBuffers.push_back( buffer.get() );
381 mappedData = nullptr;
382 }
383 auto oldCount = buffer ? buffer->GetDesc().count : 0;
384 retiredBuffers.push_back( std::move( buffer ) );
385 buffer = std::make_unique<Tr2BufferAL>();
386 uint32_t newCount = std::max( count, oldCount ? oldCount * 2 : 128 * 1024 );
387 buffer->Create( 4, newCount, Tr2GpuUsage::VERTEX_BUFFER, Tr2CpuUsage::WRITE_OFTEN | Tr2CpuUsage::NON_SYNCRONIZED_WRITE, nullptr, renderContext );
388 regions.clear();
389 offset = 0;
390 }
391
392 buffer->MapForWriting( mappedData, renderContext );
393
394 if( !regions.empty() && regions.back().recordedFrame == frameNumber && regions.back().offset + regions.back().length == offset )
395 {
396 regions.back().length += count;
397 }
398 else
399 {
400 regions.push_back( { offset.value(), count, frameNumber } );
401 }
402 return { buffer.get(), mappedData + offset.value(), offset.value() };
403}
404
405std::optional<uint32_t> EveInstancedMeshManager::InstanceBuffer::GetUnusedRegion( uint32_t count )
406{

Callers 15

ReverseIndexBufferFunction · 0.45
CreateLodFromCMFMeshMethod · 0.45
AllocateInstanceDataMethod · 0.45
GetEveStretch2QuadsFunction · 0.45
GetPerObjectDataMethod · 0.45
RebuildGeometryMethod · 0.45
UpdateGraphicsStateMethod · 0.45

Calls 5

getMethod · 0.80
emptyMethod · 0.80
CreateMethod · 0.45
MapForWritingMethod · 0.45

Tested by

no test coverage detected