ebiten/ui/glfw/context.go
2014-12-09 01:08:47 +09:00

70 lines
1.3 KiB
Go

package glfw
import (
"github.com/hajimehoshi/ebiten/graphics"
"github.com/hajimehoshi/ebiten/graphics/matrix"
)
type context struct {
canvas *canvas
}
var _ graphics.Context = new(context)
func (c *context) Clear() {
c.canvas.use(func() {
c.canvas.context.Clear()
})
}
func (c *context) Fill(r, g, b uint8) {
c.canvas.use(func() {
c.canvas.context.Fill(r, g, b)
})
}
func (c *context) Texture(id graphics.TextureID) (d graphics.Drawer) {
c.canvas.use(func() {
d = &drawer{
canvas: c.canvas,
innerDrawer: c.canvas.context.Texture(id),
}
})
return
}
func (c *context) RenderTarget(id graphics.RenderTargetID) (d graphics.Drawer) {
c.canvas.use(func() {
d = &drawer{
canvas: c.canvas,
innerDrawer: c.canvas.context.RenderTarget(id),
}
})
return
}
func (c *context) ResetOffscreen() {
c.canvas.use(func() {
c.canvas.context.ResetOffscreen()
})
}
func (c *context) SetOffscreen(id graphics.RenderTargetID) {
c.canvas.use(func() {
c.canvas.context.SetOffscreen(id)
})
}
type drawer struct {
canvas *canvas
innerDrawer graphics.Drawer
}
var _ graphics.Drawer = new(drawer)
func (d *drawer) Draw(parts []graphics.TexturePart, geo matrix.Geometry, color matrix.Color) {
d.canvas.use(func() {
d.innerDrawer.Draw(parts, geo, color)
})
}