op/paint: NewImageOp does not need to make copies of RGBA images

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
aarzilli
2019-11-07 15:32:48 +01:00
committed by Elias Naur
parent 237a8dad8f
commit 454b226404
+19 -13
View File
@@ -19,7 +19,6 @@ type ImageOp struct {
uniform bool
color color.RGBA
src *image.RGBA
size image.Point
// handle is a key to uniquely identify this ImageOp
// in a map of cached textures.
@@ -45,23 +44,30 @@ func NewImageOp(src image.Image) ImageOp {
uniform: true,
color: col,
}
default:
sz := src.Bounds().Size()
// Copy the image into a GPU friendly format.
dst := image.NewRGBA(image.Rectangle{
Max: sz,
})
draw.Draw(dst, src.Bounds(), src, image.Point{}, draw.Src)
return ImageOp{
src: dst,
size: sz,
handle: new(int),
case *image.RGBA:
bounds := src.Bounds()
if bounds.Min == (image.Point{}) && src.Stride == bounds.Dx()*4 {
return ImageOp{
src: src,
handle: new(int),
}
}
}
sz := src.Bounds().Size()
// Copy the image into a GPU friendly format.
dst := image.NewRGBA(image.Rectangle{
Max: sz,
})
draw.Draw(dst, src.Bounds(), src, image.Point{}, draw.Src)
return ImageOp{
src: dst,
handle: new(int),
}
}
func (i ImageOp) Size() image.Point {
return i.size
return i.src.Bounds().Size()
}
func (i ImageOp) Add(o *op.Ops) {