Fix transforms
This commit is contained in:
parent
b3681684a6
commit
d98b244bda
|
@ -111,7 +111,7 @@ fn main() {
|
|||
let built_scene = build_scene(&scene, &options);
|
||||
|
||||
unsafe {
|
||||
gl::ClearColor(1.0, 1.0, 1.0, 1.0);
|
||||
gl::ClearColor(0.7, 0.7, 0.7, 1.0);
|
||||
gl::Clear(gl::COLOR_BUFFER_BIT);
|
||||
renderer.render_scene(&built_scene);
|
||||
}
|
||||
|
|
|
@ -403,6 +403,11 @@ mod x86 {
|
|||
unsafe { F32x4(x86_64::_mm_shuffle_ps(self.0, self.0, 0b0100_0100)) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn xwxw(self) -> F32x4 {
|
||||
unsafe { F32x4(x86_64::_mm_shuffle_ps(self.0, self.0, 0b1100_1100)) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn xyyx(self) -> F32x4 {
|
||||
unsafe { F32x4(x86_64::_mm_shuffle_ps(self.0, self.0, 0b0001_0100)) }
|
||||
|
@ -413,11 +418,26 @@ mod x86 {
|
|||
unsafe { F32x4(x86_64::_mm_shuffle_ps(self.0, self.0, 0b1000_1000)) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn xzyw(self) -> F32x4 {
|
||||
unsafe { F32x4(x86_64::_mm_shuffle_ps(self.0, self.0, 0b1101_1000)) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn yxwz(self) -> F32x4 {
|
||||
unsafe { F32x4(x86_64::_mm_shuffle_ps(self.0, self.0, 0b1011_0001)) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn ywyw(self) -> F32x4 {
|
||||
unsafe { F32x4(x86_64::_mm_shuffle_ps(self.0, self.0, 0b1101_1101)) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn zyzy(self) -> F32x4 {
|
||||
unsafe { F32x4(x86_64::_mm_shuffle_ps(self.0, self.0, 0b0110_0110)) }
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn zzww(self) -> F32x4 {
|
||||
unsafe { F32x4(x86_64::_mm_shuffle_ps(self.0, self.0, 0b1111_1010)) }
|
||||
|
|
|
@ -17,7 +17,7 @@ use euclid::{Point2D, Rect, Size2D, Transform2D};
|
|||
use lyon_path::PathEvent;
|
||||
|
||||
/// An affine transform, optimized with SIMD.
|
||||
#[derive(Clone, Copy)]
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub struct Transform2DF32 {
|
||||
// Row-major order.
|
||||
matrix: F32x4,
|
||||
|
@ -68,8 +68,8 @@ impl Transform2DF32 {
|
|||
|
||||
#[inline]
|
||||
pub fn transform_point(&self, point: &Point2DF32) -> Point2DF32 {
|
||||
let x11x12y21y22 = point.0.xxyy() * self.matrix;
|
||||
Point2DF32(x11x12y21y22 + x11x12y21y22.zwzw() + self.vector.0)
|
||||
let bxbzbybw = point.0.xxyy() * self.matrix.xzyw();
|
||||
Point2DF32(bxbzbybw + bxbzbybw.zwzw() + self.vector.0)
|
||||
}
|
||||
|
||||
// TODO(pcwalton): SIMD.
|
||||
|
@ -89,10 +89,10 @@ impl Transform2DF32 {
|
|||
|
||||
#[inline]
|
||||
pub fn post_mul(&self, other: &Transform2DF32) -> Transform2DF32 {
|
||||
let lhs = self.matrix.xzxz() * other.matrix.xxyy();
|
||||
let rhs = self.matrix.ywyw() * other.matrix.zzww();
|
||||
let lhs = self.matrix.xwxw() * other.matrix;
|
||||
let rhs = self.matrix.zyzy() * other.matrix.yxwz();
|
||||
let matrix = lhs + rhs;
|
||||
let vector = other.transform_point(&self.vector) + other.vector;
|
||||
let vector = other.transform_point(&self.vector);
|
||||
Transform2DF32 { matrix, vector }
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ impl SceneExt for Scene {
|
|||
let root = &tree.root();
|
||||
match *root.borrow() {
|
||||
NodeKind::Svg(ref svg) => {
|
||||
println!("view_box={:?}", svg.view_box);
|
||||
scene.view_box = usvg_rect_to_euclid_rect(&svg.view_box.rect);
|
||||
for kid in root.children() {
|
||||
process_node(&mut scene, &kid, &global_transform);
|
||||
|
|
Loading…
Reference in New Issue