Merge branch 'feature/scrollables' into feature/text-input

This commit is contained in:
Héctor Ramón Jiménez 2019-10-31 02:14:14 +01:00
commit 374b54c3ec
4 changed files with 22 additions and 27 deletions

View file

@ -13,5 +13,5 @@ wgpu = { version = "0.3", git = "https://github.com/gfx-rs/wgpu-rs", rev = "ed2c
wgpu_glyph = { version = "0.4", git = "https://github.com/hecrj/wgpu_glyph", rev = "954ac865ca1b7f6b97bf403f8c6174a7120e667c" } wgpu_glyph = { version = "0.4", git = "https://github.com/hecrj/wgpu_glyph", rev = "954ac865ca1b7f6b97bf403f8c6174a7120e667c" }
raw-window-handle = "0.3" raw-window-handle = "0.3"
image = "0.22" image = "0.22"
nalgebra = "0.18" glam = "0.8"
log = "0.4" log = "0.4"

View file

@ -222,11 +222,9 @@ impl Pipeline {
bounds: Rectangle<u32>, bounds: Rectangle<u32>,
target: &wgpu::TextureView, target: &wgpu::TextureView,
) { ) {
let matrix: [f32; 16] = transformation.into();
let transform_buffer = device let transform_buffer = device
.create_buffer_mapped(16, wgpu::BufferUsage::COPY_SRC) .create_buffer_mapped(16, wgpu::BufferUsage::COPY_SRC)
.fill_from_slice(&matrix[..]); .fill_from_slice(transformation.as_ref());
encoder.copy_buffer_to_buffer( encoder.copy_buffer_to_buffer(
&transform_buffer, &transform_buffer,

View file

@ -23,14 +23,12 @@ impl Pipeline {
}], }],
}); });
let matrix: [f32; 16] = Transformation::identity().into();
let transform = device let transform = device
.create_buffer_mapped( .create_buffer_mapped(
16, 16,
wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::COPY_DST, wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::COPY_DST,
) )
.fill_from_slice(&matrix[..]); .fill_from_slice(Transformation::identity().as_ref());
let constants = device.create_bind_group(&wgpu::BindGroupDescriptor { let constants = device.create_bind_group(&wgpu::BindGroupDescriptor {
layout: &constant_layout, layout: &constant_layout,
@ -169,11 +167,9 @@ impl Pipeline {
bounds: Rectangle<u32>, bounds: Rectangle<u32>,
target: &wgpu::TextureView, target: &wgpu::TextureView,
) { ) {
let matrix: [f32; 16] = transformation.into();
let transform_buffer = device let transform_buffer = device
.create_buffer_mapped(16, wgpu::BufferUsage::COPY_SRC) .create_buffer_mapped(16, wgpu::BufferUsage::COPY_SRC)
.fill_from_slice(&matrix[..]); .fill_from_slice(transformation.as_ref());
encoder.copy_buffer_to_buffer( encoder.copy_buffer_to_buffer(
&transform_buffer, &transform_buffer,

View file

@ -1,29 +1,30 @@
use nalgebra::Matrix3; use glam::{Mat4, Vec3, Vec4};
use std::ops::Mul; use std::ops::Mul;
/// A 2D transformation matrix. /// A 2D transformation matrix.
#[derive(Debug, Clone, Copy, PartialEq)] #[derive(Debug, Clone, Copy, PartialEq)]
pub struct Transformation(Matrix3<f32>); pub struct Transformation(Mat4);
impl Transformation { impl Transformation {
/// Get the identity transformation. /// Get the identity transformation.
pub fn identity() -> Transformation { pub fn identity() -> Transformation {
Transformation(Matrix3::identity()) Transformation(Mat4::identity())
} }
/// Creates an orthographic projection. /// Creates an orthographic projection.
#[rustfmt::skip] #[rustfmt::skip]
pub fn orthographic(width: u16, height: u16) -> Transformation { pub fn orthographic(width: u16, height: u16) -> Transformation {
Transformation(nalgebra::Matrix3::new( Transformation(Mat4::from_cols(
2.0 / f32::from(width), 0.0, -1.0, Vec4::new(2.0 / f32::from(width), 0.0, 0.0, 0.0),
0.0, 2.0 / f32::from(height), -1.0, Vec4::new(0.0, 2.0 / f32::from(height), 0.0, 0.0),
0.0, 0.0, 1.0 Vec4::new(0.0, 0.0, -1.0, 0.0),
Vec4::new(-1.0, -1.0, 0.0, 1.0)
)) ))
} }
/// Creates a translate transformation. /// Creates a translate transformation.
pub fn translate(x: f32, y: f32) -> Transformation { pub fn translate(x: f32, y: f32) -> Transformation {
Transformation(Matrix3::new_translation(&nalgebra::Vector2::new(x, y))) Transformation(Mat4::from_translation(Vec3::new(x, y, 0.0)))
} }
} }
@ -35,14 +36,14 @@ impl Mul for Transformation {
} }
} }
impl From<Transformation> for [f32; 16] { impl AsRef<[f32; 16]> for Transformation {
#[rustfmt::skip] fn as_ref(&self) -> &[f32; 16] {
fn from(t: Transformation) -> [f32; 16] { self.0.as_ref()
[ }
t.0[0], t.0[1], 0.0, t.0[2], }
t.0[3], t.0[4], 0.0, t.0[5],
0.0, 0.0, -1.0, 0.0, impl From<Transformation> for [f32; 16] {
t.0[6], t.0[7], 0.0, t.0[8] fn from(t: Transformation) -> [f32; 16] {
] t.as_ref().clone()
} }
} }