#region License /* FNA - XNA4 Reimplementation for Desktop Platforms * Copyright 2009-2020 Ethan Lee and the MonoGame Team * * Released under the Microsoft Public License. * See LICENSE for details. */ #endregion #region Using Statements using System; using System.Runtime.InteropServices; #endregion namespace Microsoft.Xna.Framework.Graphics { public class DynamicVertexBuffer : VertexBuffer { #region Public Properties public bool IsContentLost { get { return false; } } #endregion #region ContentLost Event #pragma warning disable 0067 // We never lose data, but lol XNA4 compliance -flibit public event EventHandler ContentLost; #pragma warning restore 0067 #endregion #region Public Constructors public DynamicVertexBuffer( GraphicsDevice graphicsDevice, VertexDeclaration vertexDeclaration, int vertexCount, BufferUsage bufferUsage ) : base( graphicsDevice, vertexDeclaration, vertexCount, bufferUsage, true ) { } public DynamicVertexBuffer( GraphicsDevice graphicsDevice, Type type, int vertexCount, BufferUsage bufferUsage ) : base( graphicsDevice, VertexDeclaration.FromType(type), vertexCount, bufferUsage, true ) { } #endregion #region Public SetData Methods public void SetData( int offsetInBytes, T[] data, int startIndex, int elementCount, int vertexStride, SetDataOptions options ) where T : struct { ErrorCheck(data, startIndex, elementCount, vertexStride); GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); GraphicsDevice.GLDevice.SetVertexBufferData( buffer, offsetInBytes, handle.AddrOfPinnedObject() + (startIndex * Marshal.SizeOf(typeof(T))), elementCount * Marshal.SizeOf(typeof(T)), options ); handle.Free(); } public void SetData( T[] data, int startIndex, int elementCount, SetDataOptions options ) where T : struct { ErrorCheck(data, startIndex, elementCount, Marshal.SizeOf(typeof(T))); GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); GraphicsDevice.GLDevice.SetVertexBufferData( buffer, 0, handle.AddrOfPinnedObject() + (startIndex * Marshal.SizeOf(typeof(T))), elementCount * Marshal.SizeOf(typeof(T)), options ); handle.Free(); } #endregion } }