forked from joejulian/gio
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:
+19
-13
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user