Snap sprites to pixel grid in Renderer
Previously, we were doing so in the `SpriteCache` but that would cause floating point errors that caused glyphs to sometimes be positioned midway through a pixel.
This commit is contained in:
parent
61d4da9934
commit
466016a374
2 changed files with 5 additions and 6 deletions
|
@ -293,11 +293,13 @@ impl Renderer {
|
||||||
glyph.origin,
|
glyph.origin,
|
||||||
scene.scale_factor(),
|
scene.scale_factor(),
|
||||||
) {
|
) {
|
||||||
|
// Snap sprite to pixel grid.
|
||||||
|
let origin = (glyph.origin * scene.scale_factor()).floor() + sprite.offset.to_f32();
|
||||||
sprites_by_atlas
|
sprites_by_atlas
|
||||||
.entry(sprite.atlas_id)
|
.entry(sprite.atlas_id)
|
||||||
.or_insert_with(Vec::new)
|
.or_insert_with(Vec::new)
|
||||||
.push(shaders::GPUISprite {
|
.push(shaders::GPUISprite {
|
||||||
origin: (glyph.origin * scene.scale_factor() + sprite.offset).to_float2(),
|
origin: origin.to_float2(),
|
||||||
size: sprite.size.to_float2(),
|
size: sprite.size.to_float2(),
|
||||||
atlas_origin: sprite.atlas_origin.to_float2(),
|
atlas_origin: sprite.atlas_origin.to_float2(),
|
||||||
color: glyph.color.to_uchar4(),
|
color: glyph.color.to_uchar4(),
|
||||||
|
|
|
@ -23,7 +23,7 @@ struct GlyphDescriptor {
|
||||||
pub struct GlyphSprite {
|
pub struct GlyphSprite {
|
||||||
pub atlas_id: usize,
|
pub atlas_id: usize,
|
||||||
pub atlas_origin: Vector2I,
|
pub atlas_origin: Vector2I,
|
||||||
pub offset: Vector2F,
|
pub offset: Vector2I,
|
||||||
pub size: Vector2I,
|
pub size: Vector2I,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,13 +109,10 @@ impl SpriteCache {
|
||||||
bounds
|
bounds
|
||||||
});
|
});
|
||||||
|
|
||||||
// Snap sprite to pixel grid.
|
|
||||||
let offset = glyph_bounds.origin().to_f32()
|
|
||||||
- vec2f(target_position.x().fract(), target_position.y().fract());
|
|
||||||
Some(GlyphSprite {
|
Some(GlyphSprite {
|
||||||
atlas_id: atlasses.len() - 1,
|
atlas_id: atlasses.len() - 1,
|
||||||
atlas_origin: atlas_bounds.origin(),
|
atlas_origin: atlas_bounds.origin(),
|
||||||
offset,
|
offset: glyph_bounds.origin(),
|
||||||
size: glyph_bounds.size(),
|
size: glyph_bounds.size(),
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue