@@ -522,6 +522,7 @@ module Snapshot =
522522 let mutable offsetBytes = 0
523523 let mutable strideBytes = vertSize
524524 let mutable texIdx = []
525+ let mutable elemBytes = [||]
525526
526527 let ibReader , vbReader , elements , vbDS , ibDS =
527528 if sd.BaseVertexIndex <> 0 || sd.MinVertexIndex <> 0 u then
@@ -557,6 +558,18 @@ module Snapshot =
557558 log.Info " Elements: vert code %A , semantics:\n %s " ( elStr.GetHashCode()) ( elStr.Trim())
558559 log.Info " VB size: %A , vert size: %A ; IB size: %A , index size: %A " vbSize vertSize ibSize indexSize
559560
561+ // store raw vertex elements in byte array
562+ let _ =
563+ use declMS = new MemoryStream()
564+ use declWriter = new BinaryWriter( declMS)
565+ use stream = new UnmanagedMemoryStream( layoutptr, int64 sd.RendData.d3d11.LayoutElemsSizeBytes, int64 sd.RendData.d3d11.LayoutElemsSizeBytes, FileAccess.Read)
566+ use br = new BinaryReader( stream)
567+ let bytes = br.ReadBytes( int sd.RendData.d3d11.LayoutElemsSizeBytes)
568+ declWriter.Write( bytes)
569+ declWriter.Flush();
570+ declWriter.Close();
571+ elemBytes <- declMS.ToArray()
572+
560573 let vbDS = new UnmanagedMemoryStream( vbData, int64 vbSize, int64 vbSize, FileAccess.Read)
561574 let vbReader = new BinaryReader( vbDS)
562575 let ibDS = new UnmanagedMemoryStream( ibData, int64 ibSize, int64 ibSize, FileAccess.Read)
@@ -594,7 +607,9 @@ module Snapshot =
594607 member x.IndexSizeBytes = int indexSize
595608
596609 member x.GetEnabledTextureStages () = texIdx
597- member x.WriteDecl ( basedir , basename ) = ()
610+ member x.WriteDecl ( basedir , basename ) =
611+ let declfile = Path.Combine( basedir, ( sprintf " %s _VBElems.dat" basename))
612+ File.WriteAllBytes( declfile, elemBytes)
598613 member x.WriteTransforms ( basedir , basename ) = ()
599614
600615 /// Take a snapshot using the specified snapshot data. Additional data will be read directly from the device.
0 commit comments