mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-07 10:25:37 +00:00
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
|
uniform bool
|
||||||
color color.RGBA
|
color color.RGBA
|
||||||
src *image.RGBA
|
src *image.RGBA
|
||||||
size image.Point
|
|
||||||
|
|
||||||
// handle is a key to uniquely identify this ImageOp
|
// handle is a key to uniquely identify this ImageOp
|
||||||
// in a map of cached textures.
|
// in a map of cached textures.
|
||||||
@@ -45,23 +44,30 @@ func NewImageOp(src image.Image) ImageOp {
|
|||||||
uniform: true,
|
uniform: true,
|
||||||
color: col,
|
color: col,
|
||||||
}
|
}
|
||||||
default:
|
case *image.RGBA:
|
||||||
sz := src.Bounds().Size()
|
bounds := src.Bounds()
|
||||||
// Copy the image into a GPU friendly format.
|
if bounds.Min == (image.Point{}) && src.Stride == bounds.Dx()*4 {
|
||||||
dst := image.NewRGBA(image.Rectangle{
|
return ImageOp{
|
||||||
Max: sz,
|
src: src,
|
||||||
})
|
handle: new(int),
|
||||||
draw.Draw(dst, src.Bounds(), src, image.Point{}, draw.Src)
|
}
|
||||||
return ImageOp{
|
|
||||||
src: dst,
|
|
||||||
size: sz,
|
|
||||||
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 {
|
func (i ImageOp) Size() image.Point {
|
||||||
return i.size
|
return i.src.Bounds().Size()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i ImageOp) Add(o *op.Ops) {
|
func (i ImageOp) Add(o *op.Ops) {
|
||||||
|
|||||||
Reference in New Issue
Block a user