4 using System.Collections.Generic;
6 using SiliconStudio.Core;
7 using SiliconStudio.Core.Extensions;
8 using SiliconStudio.Core.ReferenceCounting;
10 namespace SiliconStudio.
Paradox.Graphics
17 private Description description;
21 return New(graphicsDevice, null, null, vertexBufferBindings);
26 return New(graphicsDevice, null, indexBufferBinding, vertexBufferBindings);
31 return New(graphicsDevice, shaderSignature, null, vertexBufferBindings);
38 var description =
new Description(shaderSignature, vertexBufferBindings, indexBufferBinding);
40 lock (graphicsDevice.CachedVertexArrayObjects)
42 if (graphicsDevice.CachedVertexArrayObjects.TryGetValue(description, out vertexArrayObject))
45 vertexArrayObject.AddReferenceInternal();
49 vertexArrayObject =
new VertexArrayObject(graphicsDevice, shaderSignature, indexBufferBinding, vertexBufferBindings);
53 vertexArrayObject.description = description;
55 graphicsDevice.CachedVertexArrayObjects.Add(description, vertexArrayObject);
59 return vertexArrayObject;
66 GraphicsDevice.CachedVertexArrayObjects.Remove(description);
70 foreach (var vertexBufferBinding
in vertexBufferBindings)
75 if (indexBufferBinding != null)
83 internal struct Description : IEquatable<Description>
85 private static EqualityComparer<VertexBufferBinding> VertexBufferBindingComparer = EqualityComparer<VertexBufferBinding>.Default;
94 ShaderSignature = shaderSignature;
95 VertexBuffers = vertexBuffers ?? emptyVertexBufferBindings;
100 hashCode = ComputeHashCode();
103 public bool Equals(Description other)
105 return Equals(ShaderSignature, other.ShaderSignature)
106 && ArrayExtensions.ArraysEqual(VertexBuffers, other.VertexBuffers, VertexBufferBindingComparer)
107 && Equals(IndexBuffer, other.IndexBuffer);
110 public override bool Equals(
object obj)
112 if (ReferenceEquals(null, obj))
return false;
113 return obj is Description && Equals((Description)obj);
116 public override int GetHashCode()
121 private int ComputeHashCode()
125 int hashCode = (ShaderSignature != null ? ShaderSignature.GetHashCode() : 0);
126 hashCode = (hashCode * 397) ^ VertexBuffers.ComputeHash(VertexBufferBindingComparer);
127 hashCode = (hashCode*397) ^ (IndexBuffer != null ?
IndexBuffer.GetHashCode() : 0);
Base interface for all referencable objects.
static VertexArrayObject New(GraphicsDevice graphicsDevice, EffectInputSignature shaderSignature, IndexBufferBinding indexBufferBinding, params VertexBufferBinding[] vertexBufferBindings)
Performs primitive-based rendering, creates resources, handles system-level variables, adjusts gamma ramp levels, and creates shaders. See The+GraphicsDevice+class to learn more about the class.
static VertexArrayObject New(GraphicsDevice graphicsDevice, params VertexBufferBinding[] vertexBufferBindings)
override void Destroy()
Disposes of object resources.
static VertexArrayObject New(GraphicsDevice graphicsDevice, EffectInputSignature shaderSignature, params VertexBufferBinding[] vertexBufferBindings)
static VertexArrayObject New(GraphicsDevice graphicsDevice, IndexBufferBinding indexBufferBinding, params VertexBufferBinding[] vertexBufferBindings)
Binding structure that specifies a vertex buffer and other per-vertex parameters (such as offset and ...