make IMDraw a fully featured BasicTarget

This commit is contained in:
faiface 2017-03-15 13:54:19 +01:00
parent 415fc129ca
commit d11245e164
1 changed files with 18 additions and 6 deletions

View File

@ -74,7 +74,7 @@ type IMDraw struct {
matrix Matrix matrix Matrix
mask NRGBA mask NRGBA
tri *TrianglesData tri *TrianglesData
d Drawer batch *Batch
tmp []Vec tmp []Vec
} }
@ -105,8 +105,8 @@ const (
func NewIMDraw(pic Picture) *IMDraw { func NewIMDraw(pic Picture) *IMDraw {
tri := &TrianglesData{} tri := &TrianglesData{}
im := &IMDraw{ im := &IMDraw{
tri: tri, tri: tri,
d: Drawer{Triangles: tri, Picture: pic}, batch: NewBatch(tri, pic),
} }
im.SetMatrix(IM) im.SetMatrix(IM)
im.SetColorMask(NRGBA{1, 1, 1, 1}) im.SetColorMask(NRGBA{1, 1, 1, 1})
@ -117,7 +117,7 @@ func NewIMDraw(pic Picture) *IMDraw {
// Clear removes all drawn shapes from the IM. This does not remove Pushed points. // Clear removes all drawn shapes from the IM. This does not remove Pushed points.
func (imd *IMDraw) Clear() { func (imd *IMDraw) Clear() {
imd.tri.SetLen(0) imd.tri.SetLen(0)
imd.d.Dirty() imd.batch.Dirty()
} }
// Reset restores all point properties to defaults and removes all Pushed points. // Reset restores all point properties to defaults and removes all Pushed points.
@ -131,7 +131,7 @@ func (imd *IMDraw) Reset() {
// Draw draws all currently drawn shapes inside the IM onto another Target. // Draw draws all currently drawn shapes inside the IM onto another Target.
func (imd *IMDraw) Draw(t Target) { func (imd *IMDraw) Draw(t Target) {
imd.d.Draw(t) imd.batch.Draw(t)
} }
// Push adds some points to the IM queue. All Pushed points will have the same properties except for // Push adds some points to the IM queue. All Pushed points will have the same properties except for
@ -188,11 +188,23 @@ func (imd *IMDraw) EndShape(es EndShape) {
// SetMatrix sets a Matrix that all further points will be transformed by. // SetMatrix sets a Matrix that all further points will be transformed by.
func (imd *IMDraw) SetMatrix(m Matrix) { func (imd *IMDraw) SetMatrix(m Matrix) {
imd.matrix = m imd.matrix = m
imd.batch.SetMatrix(imd.matrix)
} }
// SetColorMask sets a color that all futher point's color will be multiplied by. // SetColorMask sets a color that all futher point's color will be multiplied by.
func (imd *IMDraw) SetColorMask(color color.Color) { func (imd *IMDraw) SetColorMask(color color.Color) {
imd.mask = NRGBAModel.Convert(color).(NRGBA) imd.mask = NRGBAModel.Convert(color).(NRGBA)
imd.batch.SetColorMask(imd.mask)
}
// MakeTriangles returns a specialized copy of the provided Triangles that draws onto this IMDraw.
func (imd *IMDraw) MakeTriangles(t Triangles) TargetTriangles {
return imd.batch.MakeTriangles(t)
}
// MakePicture returns a specialized copy of the provided Picture that draws onto this IMDraw.
func (imd *IMDraw) MakePicture(p Picture) TargetPicture {
return imd.batch.MakePicture(p)
} }
// FillConvexPolygon takes all points Pushed into the IM's queue and fills the convex polygon formed // FillConvexPolygon takes all points Pushed into the IM's queue and fills the convex polygon formed
@ -231,7 +243,7 @@ func (imd *IMDraw) FillConvexPolygon() {
i += 3 i += 3
} }
imd.d.Dirty() imd.batch.Dirty()
} }
// FillCircle draws a filled circle around each point in the IM's queue. // FillCircle draws a filled circle around each point in the IM's queue.