/// <summary> /// Draw call /// </summary> /// <param name="context"></param> /// <param name="instanceModel"></param> protected virtual void OnDraw(DeviceContextProxy context, IElementsBufferModel instanceModel) { if (GeometryBuffer.IndexBuffer != null) { if (instanceModel == null || !instanceModel.HasElements) { context.DrawIndexed(GeometryBuffer.IndexBuffer.ElementCount, GeometryBuffer.IndexBuffer.Offset, 0); } else { context.DrawIndexedInstanced(GeometryBuffer.IndexBuffer.ElementCount, instanceModel.Buffer.ElementCount, GeometryBuffer.IndexBuffer.Offset, 0, instanceModel.Buffer.Offset); } } else if (GeometryBuffer.VertexBuffer.Length > 0) { if (instanceModel == null || !instanceModel.HasElements) { context.Draw(GeometryBuffer.VertexBuffer[0].ElementCount, 0); } else { context.DrawInstanced(GeometryBuffer.VertexBuffer[0].ElementCount, instanceModel.Buffer.ElementCount, 0, instanceModel.Buffer.Offset); } } }
public static void DrawIndexed(DeviceContextProxy context, IElementsBufferProxy indexBuffer, IElementsBufferModel instanceModel) { if (!instanceModel.HasElements) { context.DrawIndexed(indexBuffer.ElementCount, 0, 0); } else { context.DrawIndexedInstanced(indexBuffer.ElementCount, instanceModel.Buffer.ElementCount, 0, 0, 0); } }
public static void DrawIndexed(DeviceContextProxy context, int indexCount, int instanceCount) { if (instanceCount <= 0) { context.DrawIndexed(indexCount, 0, 0); } else { context.DrawIndexedInstanced(indexCount, instanceCount, 0, 0, 0); } }