Konstantin Koch 85322e2363 Migrated Primitives, RecordingSample, RenderTarget and SimpleSprite. Also implemented DynamicBuffers and fixed many Dispose functions
increased the amount of shared code between vertex and index buffers
fixed GraphicsDevice.Reset() which didn't save the provided presentation
parameters and the backbuffer was still bound after the recent changes
about the rendertargets
Vertex and IndexBuffers that get dynamically generated for the UserDraw
methods dispose the buffers now
Added DebugNames to Index and VertexBuffers and their Dynamic version.
2015-10-04 21:30:00 +02:00

80 lines
2.2 KiB
C#

using ANX.Framework.Graphics;
using SharpDX;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dx = SharpDX.Direct3D10;
namespace ANX.RenderSystem.Windows.DX10
{
public abstract class Buffer : IDisposable
{
public Dx.Buffer NativeBuffer { get; protected set; }
private Dx.Device device;
private BufferUsage usage;
private bool isDynamic;
protected Buffer(Dx.Device device, BufferUsage usage, bool isDynamic)
{
this.device = device;
this.usage = usage;
this.isDynamic = isDynamic;
}
protected DataStream MapBuffer(Dx.Buffer buffer, ResourceMapping mapping)
{
CheckUsage(mapping);
return buffer.Map(mapping.ToMapMode());
}
protected void UnmapBuffer(Dx.Buffer buffer)
{
buffer.Unmap();
}
protected void CopySubresource(Dx.Buffer source, Dx.Buffer destination)
{
BufferHelper.ValidateCopyResource(source, destination);
this.device.CopyResource(source, destination);
}
protected bool WriteNeedsStaging
{
get { return !isDynamic; }
}
private void CheckUsage(ResourceMapping mapping)
{
if ((mapping & ResourceMapping.Write) != 0 && usage == BufferUsage.None)
throw new NotSupportedException("Resource was created with WriteOnly, reading from it is not supported.");
}
protected Dx.Buffer CreateStagingBuffer(ResourceMapping mapping)
{
CheckUsage(mapping);
var description = new Dx.BufferDescription()
{
Usage = Dx.ResourceUsage.Staging,
SizeInBytes = NativeBuffer.Description.SizeInBytes,
CpuAccessFlags = mapping.ToCpuAccessFlags(),
OptionFlags = Dx.ResourceOptionFlags.None
};
return new Dx.Buffer(device, description);
}
public void Dispose()
{
if (NativeBuffer != null)
{
NativeBuffer.Dispose();
NativeBuffer = null;
}
}
}
}