diff --git a/pixelgl/canvas.go b/pixelgl/canvas.go index 89521ca..1292d3b 100644 --- a/pixelgl/canvas.go +++ b/pixelgl/canvas.go @@ -23,6 +23,8 @@ type Canvas struct { mat mgl32.Mat3 col mgl32.Vec4 smooth bool + + sprite *pixel.Sprite } var _ pixel.ComposeTarget = (*Canvas)(nil) @@ -52,6 +54,8 @@ func NewCanvas(bounds pixel.Rect) *Canvas { }) c.shader = shader + c.sprite = pixel.NewSprite(c, c.Bounds()) + return c } @@ -117,6 +121,7 @@ func (c *Canvas) SetComposeMethod(cmp pixel.ComposeMethod) { // SetBounds resizes the Canvas to the new bounds. Old content will be preserved. func (c *Canvas) SetBounds(bounds pixel.Rect) { c.gf.SetBounds(bounds) + c.sprite.Set(c, c.Bounds()) } // Bounds returns the rectangular bounds of the Canvas. @@ -211,6 +216,14 @@ func (c *Canvas) Texture() *glhf.Texture { return c.gf.Texture() } +// Draw draws a rectangle equal to Canvas's Bounds containing the Canvas's content to another +// Target. +// +// Note, that the matrix and the color mask of this Canvas have no effect here. +func (c *Canvas) Draw(t pixel.Target) { + c.sprite.Draw(t) +} + type canvasTriangles struct { *GLTriangles dst *Canvas