MCPcopy Create free account
hub / github.com/baldurk/renderdoc / WriteStructuredFile

Method WriteStructuredFile

renderdoc/serialise/serialiser.cpp:581–659  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

579
580template <>
581void Serialiser<SerialiserMode::Writing>::WriteStructuredFile(const SDFile &file,
582 RENDERDOC_ProgressCallback progress)
583{
584 Serialiser<SerialiserMode::Writing> scratchWriter(
585 new StreamWriter(StreamWriter::DefaultScratchSize), Ownership::Stream);
586
587 // slightly cheeky to cast away the const, but we don't modify it in a writing serialiser
588 scratchWriter.m_StructuredFile = m_StructuredFile = (SDFile *)&file;
589
590 for(size_t i = 0; i < file.chunks.size(); i++)
591 {
592 const SDChunk &chunk = *file.chunks[i];
593
594 m_ChunkMetadata = chunk.metadata;
595
596 m_ChunkFlags = 0;
597
598 if(m_ChunkMetadata.flags & SDChunkFlags::HasCallstack)
599 m_ChunkFlags |= ChunkCallstack;
600
601 if(m_ChunkMetadata.threadID != 0)
602 m_ChunkFlags |= ChunkThreadID;
603
604 if(m_ChunkMetadata.durationMicro >= 0)
605 m_ChunkFlags |= ChunkDuration;
606
607 if(m_ChunkMetadata.timestampMicro != 0)
608 m_ChunkFlags |= ChunkTimestamp;
609
610 Serialiser<SerialiserMode::Writing> *ser = this;
611
612 if(m_ChunkMetadata.length == 0)
613 {
614 ser = &scratchWriter;
615 scratchWriter.m_ChunkMetadata = m_ChunkMetadata;
616 scratchWriter.m_ChunkFlags = m_ChunkFlags;
617 }
618
619 m_ChunkMetadata.chunkID = 0;
620
621 ser->BeginChunk(chunk.metadata.chunkID, m_ChunkMetadata.length);
622
623 if(chunk.metadata.flags & SDChunkFlags::OpaqueChunk)
624 {
625 RDCASSERT(chunk.NumChildren() == 1);
626
627 size_t bufID = (size_t)chunk.GetChild(0)->data.basic.u;
628 byte *ptr = m_StructuredFile->buffers[bufID]->data();
629 size_t len = m_StructuredFile->buffers[bufID]->size();
630
631 ser->GetWriter()->Write(ptr, len);
632 }
633 else
634 {
635 for(size_t o = 0; o < chunk.NumChildren(); o++)
636 {
637 // note, we don't need names because we aren't exporting structured data
638 ser->Serialise(""_lit, (SDObject *)chunk.GetChild(o));

Callers 2

ConvertMethod · 0.80

Calls 12

progressFunction · 0.85
BeginChunkMethod · 0.80
GetWriterMethod · 0.80
SerialiseMethod · 0.80
EndChunkMethod · 0.80
RewindMethod · 0.80
sizeMethod · 0.45
GetChildMethod · 0.45
dataMethod · 0.45
WriteMethod · 0.45
GetDataMethod · 0.45
GetOffsetMethod · 0.45

Tested by

no test coverage detected