using System; using TerraFX.Interop.DirectX; namespace Auspex.Rendering.Direct3D; internal abstract class HlslShaderData : IDisposable where TElement : unmanaged { private protected readonly GpuBuffer _buffer; protected HlslShaderData(string name, FrameRenderContext ctx, int maxCount, bool dynamic) { _buffer = new GpuBuffer(name, ctx, maxCount, 1u, dynamic); } public void Dispose() { _buffer.Dispose(); GC.SuppressFinalize(this); } private protected unsafe void DrawVertices(FrameRenderContext ctx, int first, int count) { ID3D11Buffer* buffer = _buffer.Buffer; uint elementSize = (uint)_buffer.ElementSize; uint num = 0u; ctx.Context->IASetVertexBuffers(0u, 1u, &buffer, &elementSize, &num); ctx.Context->Draw((uint)count, (uint)first); } }