Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
File last commit:
Show/Diff file:
Action:
FNA/src/Graphics/Vertices/DynamicVertexBuffer.cs
116 lines | 2.3 KiB | text/x-csharp | CSharpLexer
#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<EventArgs> 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<T>(
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>(
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
}
}