public void Draw(Position[] positions, int length, float time) { using (var programBinding = program.Use()) { programBinding.Set(timeUniform, time); programBinding.Set(scaleUniform, 0.05f); using (var ivboBinding = ivbo.BindBuffer()) { ivboBinding.Data((uint)Marshal.SizeOf <Position>() * MAX_BULLETS, null, BufferUsage.StreamDraw); ivboBinding.SubData(0, (uint)Marshal.SizeOf <Position>() * (uint)length, positions); } using (var vaoBinding = vao.BindVertexArray()) { vaoBinding.DrawArraysInstanced(PrimitiveType.TriangleStrip, 0, 4, length); } } }
internal void Draw(Position[] positions, int count, float time) { using (var programBinding = program.Use()) { programBinding.Set(scaleUniform, .1f); programBinding.Set(timeUniform, time); using (var ivboBinding = ivbo.BindBuffer()) { ivboBinding.Data((uint)Marshal.SizeOf <Position>() * MAX_SHIPS, null, BufferUsage.StreamDraw); ivboBinding.SubData(0, (uint)Marshal.SizeOf <Position>() * (uint)count, positions); } using (var vaoBinding = vao.BindVertexArray()) vaoBinding.DrawArraysInstanced(PrimitiveType.Triangles, 0, 3, count); } }