/// <summary> /// Initializes a new instance of the <see cref="MeshReader"/> class. /// </summary> /// <param name="mesh">The mesh.</param> /// <param name="definition">The mesh's definition data.</param> public MeshReader(Mesh mesh, RenderGeometryResourceDefinition definition) { Mesh = mesh; Definition = definition; VertexStreams = new VertexBufferDefinition[StreamCount]; IndexBuffers = new IndexBufferDefinition[IndexBufferCount]; BindVertexStreams(); BindIndexBuffers(); }
/// <summary> /// Opens an index buffer stream on one of the mesh's index buffers. /// </summary> /// <param name="definition">The index buffer definition.</param> /// <param name="baseStream">The stream open on the mesh's resource data to use as a base stream.</param> /// <returns>The index buffer stream if successful, or <c>null</c> otherwise.</returns> public IndexBufferStream OpenIndexBufferStream(IndexBufferDefinition definition, Stream baseStream) { if (definition.Data.Address.Type != ResourceAddressType.Resource) { return(null); // Don't bother supporting non-resource addresses } baseStream.Position = definition.Data.Address.Offset; return(new IndexBufferStream(baseStream, IndexBufferFormat.UInt16)); }
/// <summary> /// Initializes a new instance of the <see cref="MeshReader"/> class. /// </summary> /// <param name="version">The engine version to target.</param> /// <param name="mesh">The mesh.</param> /// <param name="definition">The mesh's definition data.</param> public MeshReader(EngineVersion version, Mesh mesh, RenderGeometryResourceDefinition definition) { _version = version; Mesh = mesh; Definition = definition; VertexStreams = new VertexBufferDefinition[StreamCount]; IndexBuffers = new IndexBufferDefinition[IndexBufferCount]; BindVertexStreams(); BindIndexBuffers(); }
/// <summary> /// Opens an index buffer reader on one of the mesh's index buffers. /// </summary> /// <param name="definition">The index buffer definition.</param> /// <param name="baseStream">The stream open on the mesh's resource data to use as a base stream.</param> /// <returns>The index buffer reader if successful, or <c>null</c> otherwise.</returns> public IndexBufferReader OpenIndexBufferReader(IndexBufferDefinition definition, Stream baseStream) { if (definition.Data.Address.Type != ResourceAddressType.Resource) return null; // Don't bother supporting non-resource addresses baseStream.Position = definition.Data.Address.Offset; return new IndexBufferReader(new BinaryReader(baseStream), IndexBufferFormat.UInt16); }