public override void RenderPrep() { LocMatrix = Matrix4x4f.Translated((int)X, (int)Y, 0); LocMatrix.Scale(Texture.Width * Size / Texture.TileSizeX, Texture.Height * Size / Texture.TileSizeY, 1); if (flipX) { LocMatrix.Scale(-1, 1, 1); } if (flipY) { LocMatrix.Scale(1, -1, 1); } }
// Just the render call and any set-up StringDrawable requires but a regular Drawable doesn't. public override void UnsafeDraw() { if (updateBuffer || updated != Texture.Updated) { UpdateBuffer(); } Gl.DrawArraysInstanced(PrimitiveType.Quads, 0, 4, instances); if (MultiplePositions) { PointF lastOffset = new PointF(0, 0); foreach (PointF offset in Offsets) { LocMatrix.Translate((offset.X - lastOffset.X) * (flipX ? -1 : 1), (offset.Y - lastOffset.Y) * (flipY ? -1 : 1), 0); Gl.UniformMatrix4f(Texture.Program.ModelLocation, 1, false, LocMatrix); Gl.DrawArraysInstanced(PrimitiveType.Quads, 0, 4, instances); lastOffset = offset; } } }