private SpriteVertex[] QuadFromSprite(Sprite sprite)
        {
            SpriteVertex[] verts = new SpriteVertex[4];

            Rectangle src = sprite.Source;
            Rectangle dest = sprite.Destination;
            var width = sprite.Texture.Description.Width;
            var height = sprite.Texture.Description.Height;

            verts[0].Position = PointToNdc(dest.Left, dest.Bottom, 0f);
            verts[1].Position = PointToNdc(dest.Left, dest.Top, 0f);
            verts[2].Position = PointToNdc(dest.Right, dest.Top, 0f);
            verts[3].Position = PointToNdc(dest.Right, dest.Bottom, 0f);

            verts[0].TexCoord = new Vector2((float)src.Left / width, (float)src.Bottom / height);
            verts[1].TexCoord = new Vector2((float)src.Left / width, (float)src.Top / height);
            verts[2].TexCoord = new Vector2((float)src.Right / width, (float)src.Top / height);
            verts[3].TexCoord = new Vector2((float)src.Right / width, (float)src.Bottom / height);

            for(int i = 0; i < verts.Length; i++) {
                verts[i].Color = sprite.Color;
            }

            var tx = 0.5f * (verts[0].Position.X + verts[3].Position.X);
            var ty = 0.5f * (verts[0].Position.Y + verts[1].Position.Y);
            var origin = new Vector2(tx, ty);
            var translate = new Vector2(0f, 0f);
            var transform = Matrix.AffineTransformation2D(1f, 0f, translate);

            for(int i = 0; i < verts.Length; ++i) {
                Vector3 position = verts[i].Position;
                position = Vector3.TransformCoordinate(position, transform);
                verts[i].Position = position;
            }

            return verts;
        }
        public void DrawSprite(Sprite sprite)
        {
            if (!_SpriteCacheByResource.ContainsKey(sprite.Texture))
                _SpriteCacheByResource[sprite.Texture] = new List<Sprite>();

            _SpriteCacheByResource[sprite.Texture].Add(sprite);
        }