protected void DrawTexture(CGContext context)
{
var destRect = new CGRect (0,0,textureImage.Width,textureImage.Height);
context.DrawImage(destRect, textureImage.NativeCGImage);
if (wrapMode == WrapMode.TileFlipX)
{
context.ConcatCTM(CGAffineTransform.MakeScale(-1,1));
context.DrawImage(destRect, textureImage.NativeCGImage);
}
if (wrapMode == WrapMode.TileFlipY)
{
var transformY = new CGAffineTransform(1, 0, 0, -1,
textureImage.Width,
textureImage.Height);
context.ConcatCTM(transformY);
context.DrawImage(destRect, textureImage.NativeCGImage);
}
if (wrapMode == WrapMode.TileFlipXY)
{
// draw the original
var transform = new CGAffineTransform(1, 0, 0, 1,
0, textureImage.Height);
context.ConcatCTM(transform);
context.DrawImage(destRect, textureImage.NativeCGImage);
// reset the transform
context.ConcatCTM (context.GetCTM().Invert());
// draw next to original one that is flipped by x axis
transform = new CGAffineTransform(-1, 0, 0, 1,
textureImage.Width * 2, textureImage.Height);
context.ConcatCTM(transform);
context.DrawImage(destRect, textureImage.NativeCGImage);
// reset the transform
context.ConcatCTM (context.GetCTM().Invert());
// draw one that is flipped by Y axis under the oricinal
transform = new CGAffineTransform(1, 0, 0, -1,
0, textureImage.Height);
context.ConcatCTM(transform);
context.DrawImage(destRect, textureImage.NativeCGImage);
// draw the last one of the quadrant which is flipped by both the y and x axis
context.ConcatCTM (context.GetCTM().Invert());
transform = new CGAffineTransform(-1, 0, 0, -1,
textureImage.Width * 2, textureImage.Height);
context.ConcatCTM(transform);
context.DrawImage(destRect, textureImage.NativeCGImage);
}
}