4 using System.Collections.Generic;
5 using SiliconStudio.Core;
6 using SiliconStudio.Core.Serialization;
7 using SiliconStudio.Core.Serialization.Serializers;
9 namespace SiliconStudio.
Paradox.Graphics
19 private readonly
int instanceCount;
20 private readonly
int vertexStride;
21 private readonly
int hashCode;
33 : this(elements, 0, 0)
46 if (elements == null)
throw new ArgumentNullException(
"elements");
48 this.elements = elements;
49 this.vertexStride = vertexStride == 0 ? VertexElementValidator.GetVertexStride(elements) : vertexStride;
50 this.instanceCount = instanceCount;
53 VertexElementValidator.Validate(VertexStride, elements);
55 hashCode = instanceCount;
56 hashCode = (hashCode * 397) ^ vertexStride;
57 foreach (var vertexElement
in elements)
59 hashCode = (hashCode*397) ^ vertexElement.
GetHashCode();
69 get {
return elements; }
76 public int InstanceCount
88 public int VertexStride
103 foreach (var element
in VertexElements)
106 var currentElementOffset = element.AlignedByteOffset;
108 offset = currentElementOffset;
110 var elementSize = element.Format.SizeInBytes();
114 offset += elementSize;
126 foreach (var element
in VertexElements)
129 var currentElementOffset = element.AlignedByteOffset;
131 offset = currentElementOffset;
133 var elementSize = element.Format.SizeInBytes();
136 offset += elementSize;
146 if (ReferenceEquals(null, other))
return false;
147 if (ReferenceEquals(
this, other))
return true;
148 return hashCode == other.hashCode && vertexStride == other.vertexStride && instanceCount == other.instanceCount && Utilities.Compare(elements, other.elements);
153 if (ReferenceEquals(null, obj))
return false;
154 if (ReferenceEquals(
this, obj))
return true;
155 if (obj.GetType() != this.GetType())
return false;
191 base.PreSerialize(ref obj, mode, stream);
199 var elements = stream.Read<VertexElement[]>();
200 var instanceCount = stream.ReadInt32();
201 var vertexStride = stream.ReadInt32();
202 obj =
new VertexDeclaration(elements, instanceCount, vertexStride);
206 stream.Write(obj.elements);
207 stream.Write(obj.instanceCount);
208 stream.Write(obj.vertexStride);
212 public void EnumerateGenericInstantiations(
SerializerSelector serializerSelector, IList<Type> genericInstantiations)
214 genericInstantiations.Add(typeof(VertexElement[]));
override bool Equals(object obj)
The layout of a vertex buffer with a set of VertexElement.
int CalculateSize()
Calculate the size of the vertex declaration.
bool Equals(VertexDeclaration other)
const int AppendAligned
Returns a value that can be used for the offset parameter of an InputElement to indicate that the ele...
Base class for implementation of SerializationStream.
Serializer context. It holds DataSerializer{T} objects and their factories.
VertexDeclaration(params VertexElement[] elements)
Initializes a new instance of the VertexDeclaration class.
override int GetHashCode()
override int GetHashCode()
Describes how to serialize and deserialize an object without knowing its type. Used as a common base ...
ArchiveMode
Enumerates the different mode of serialization (either serialization or deserialization).
Allows enumeration of required data serializers.
_In_ size_t _In_ size_t size
VertexDeclaration(VertexElement[] elements, int instanceCount=0, int vertexStride=0)
Initializes a new instance of the VertexDeclaration class.
A description of a single element for the input-assembler stage. This structure is related to Direct3...
IEnumerable< VertexElementWithOffset > EnumerateWithOffsets()
Enumerates VertexElement with declared offsets.