mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-03 00:16:15 +00:00
gpu: fix off-by-a-half clipping
I don't know why the 1/2 factor is there, but it leads to images being rendered with a 0.5 pixel offset. Remove the other useless checks while here: clipping 1px images shouldn't be a problem and the destination rectangle is always non-zero (otherwise it wouldn't be rendered). Update the reference images that are subtly changed because of this fix. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
+8
-14
@@ -949,20 +949,14 @@ func (d *drawState) materialFor(cache *resourceCache, rect f32.Rectangle, off f3
|
||||
Y: float32(sz.Y),
|
||||
},
|
||||
}
|
||||
if dx := float32(dr.Dx()); dx != 0 {
|
||||
// Don't clip 1 px width sources.
|
||||
if sdx := sr.Dx(); sdx > 1 {
|
||||
sr.Min.X += (float32(clip.Min.X-dr.Min.X)*sdx + dx/2) / dx
|
||||
sr.Max.X -= (float32(dr.Max.X-clip.Max.X)*sdx + dx/2) / dx
|
||||
}
|
||||
}
|
||||
if dy := float32(dr.Dy()); dy != 0 {
|
||||
// Don't clip 1 px height sources.
|
||||
if sdy := sr.Dy(); sdy > 1 {
|
||||
sr.Min.Y += (float32(clip.Min.Y-dr.Min.Y)*sdy + dy/2) / dy
|
||||
sr.Max.Y -= (float32(dr.Max.Y-clip.Max.Y)*sdy + dy/2) / dy
|
||||
}
|
||||
}
|
||||
dx := float32(dr.Dx())
|
||||
sdx := sr.Dx()
|
||||
sr.Min.X += float32(clip.Min.X-dr.Min.X) * sdx / dx
|
||||
sr.Max.X -= float32(dr.Max.X-clip.Max.X) * sdx / dx
|
||||
dy := float32(dr.Dy())
|
||||
sdy := sr.Dy()
|
||||
sr.Min.Y += float32(clip.Min.Y-dr.Min.Y) * sdy / dy
|
||||
sr.Max.Y -= float32(dr.Max.Y-clip.Max.Y) * sdy / dy
|
||||
tex, exists := cache.get(d.image.handle)
|
||||
if !exists {
|
||||
t := &texture{
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 470 B After Width: | Height: | Size: 458 B |
Binary file not shown.
|
Before Width: | Height: | Size: 539 B After Width: | Height: | Size: 463 B |
Reference in New Issue
Block a user