mouse controls
This commit is contained in:
@@ -19,7 +19,7 @@ impl ComputeView {
|
||||
impl Default for ComputeView {
|
||||
fn default() -> Self {
|
||||
let val = FixedDec::from_parts(false, 0, vec![0, 0, 0]);
|
||||
Self::new(true, Vector2::zeros(), 0, &val, &val, &val)
|
||||
Self::new(true, Vector2::zeros(), Vector2::zeros(), 0, &val, &val, &val)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ impl ComputeView {
|
||||
fn new(
|
||||
reset: bool,
|
||||
dims: Vector2<u32>,
|
||||
stretch: Vector2<f32>,
|
||||
level: i32,
|
||||
scale: &FixedDec,
|
||||
x: &FixedDec,
|
||||
@@ -36,6 +37,7 @@ impl ComputeView {
|
||||
bytes.extend((reset as u32).to_le_bytes());
|
||||
bytes.extend(level.to_le_bytes());
|
||||
bytes.extend(bytemuck::cast_slice(&[dims.x, dims.y]));
|
||||
bytes.extend(bytemuck::cast_slice(&[stretch.x, stretch.y]));
|
||||
scale.to_bytes(&mut bytes);
|
||||
x.to_bytes(&mut bytes);
|
||||
y.to_bytes(&mut bytes);
|
||||
@@ -46,7 +48,7 @@ impl ComputeView {
|
||||
Self { bytes }
|
||||
}
|
||||
|
||||
pub fn from_camera_size(camera: &Camera, size: &Vector2<u32>, reset: bool, len: usize) -> Self {
|
||||
pub fn from_camera(camera: &Camera, reset: bool, len: usize) -> Self {
|
||||
let mut x = camera.pos.x.clone();
|
||||
x.set_whole_len(1);
|
||||
x.set_dec_len(len as i32 - 1);
|
||||
@@ -54,17 +56,11 @@ impl ComputeView {
|
||||
y.set_whole_len(1);
|
||||
y.set_dec_len(len as i32 - 1);
|
||||
|
||||
let fsize: Vector2<f32> = size.cast();
|
||||
let stretch = if size.x < size.y {
|
||||
Vector2::new(fsize.x / fsize.y, 1.0)
|
||||
} else {
|
||||
Vector2::new(1.0, fsize.y / fsize.x)
|
||||
};
|
||||
|
||||
let stretch = camera.stretch();
|
||||
let mut scale = camera.zoom.mult().clone();
|
||||
scale.set_precision(len);
|
||||
|
||||
Self::new(reset, *size, camera.zoom.level(), &scale, &x, &y)
|
||||
Self::new(reset, camera.size, stretch, camera.zoom.level(), &scale, &x, &y)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,10 +36,9 @@ impl ComputePipeline {
|
||||
encoder: &mut wgpu::CommandEncoder,
|
||||
belt: &mut wgpu::util::StagingBelt,
|
||||
camera: &Camera,
|
||||
size: &Vector2<u32>,
|
||||
len: usize,
|
||||
) {
|
||||
let mut view = ComputeView::from_camera_size(camera, size, false, len);
|
||||
let mut view = ComputeView::from_camera(camera, false, len);
|
||||
if view != self.old_view {
|
||||
for (i, b) in 1u32.to_le_bytes().iter().enumerate() {
|
||||
view.bytes[i] = *b;
|
||||
@@ -49,7 +48,7 @@ impl ComputePipeline {
|
||||
println!("new len: {}", len);
|
||||
self.old_len = len;
|
||||
self.pipeline = self.pipeline(device, &Self::shader(device, len));
|
||||
self.work.set(work_vec(size.x, size.y, len));
|
||||
self.work.set(work_vec(camera.size.x, camera.size.y, len));
|
||||
}
|
||||
let updated = self.work.update(device, encoder, belt)
|
||||
| self.view.update(device, encoder, belt, view.bytes());
|
||||
@@ -66,14 +65,7 @@ impl ComputePipeline {
|
||||
pass.dispatch_workgroups(240, 135, 1);
|
||||
}
|
||||
|
||||
pub fn resize(
|
||||
&mut self,
|
||||
device: &wgpu::Device,
|
||||
encoder: &mut wgpu::CommandEncoder,
|
||||
belt: &mut wgpu::util::StagingBelt,
|
||||
size: Vector2<u32>,
|
||||
len: usize,
|
||||
) {
|
||||
pub fn resize(&mut self, device: &wgpu::Device, size: Vector2<u32>, len: usize) {
|
||||
self.work.set(work_vec(size.x, size.y, len));
|
||||
self.old_len = len;
|
||||
self.output.resize(
|
||||
|
||||
@@ -9,6 +9,7 @@ struct View {
|
||||
reset: u32,
|
||||
level: i32,
|
||||
dims: vec2<u32>,
|
||||
stretch: vec2<f32>,
|
||||
scale: FixedDec,
|
||||
corner_x: FixedDec,
|
||||
corner_y: FixedDec,
|
||||
@@ -28,30 +29,14 @@ fn main(
|
||||
if id.x > view.dims.x - 1 || id.y > view.dims.y - 1 {
|
||||
return;
|
||||
}
|
||||
// TODO: actually use width
|
||||
let varwidth = LEN + 2;
|
||||
let workwidth = varwidth * 2 + 1;
|
||||
let worki = (id.x * view.dims.y + id.y) * workwidth;
|
||||
let xidx = worki + 1;
|
||||
let yidx = xidx + varwidth;
|
||||
|
||||
// let dec = view.corner_x.dec;
|
||||
// var rel_x = FixedDec(POS, dec, array<u32, LEN>());
|
||||
// rel_x.parts[0] = id.x;
|
||||
// rel_x = shr(rel_x, view.level);
|
||||
// var rel_y = FixedDec(POS, dec, array<u32, LEN>());
|
||||
// rel_y.parts[0] = id.y;
|
||||
// rel_y = shr(rel_y, view.level);
|
||||
// let cx = add(view.corner_x, rel_x);
|
||||
// let cy = add(view.corner_y, rel_y);
|
||||
let fdims = vec2<f32>(view.dims);
|
||||
var stretch: vec2<f32>;
|
||||
if fdims.x < fdims.y {
|
||||
stretch = vec2(fdims.x / fdims.y, 1.0);
|
||||
} else {
|
||||
stretch = vec2(1.0, fdims.y / fdims.x);
|
||||
}
|
||||
let fpos = (vec2<f32>(id.xy) / fdims - 0.5) * stretch;
|
||||
let fpos = (vec2<f32>(id.xy) / fdims - 0.5) * view.stretch;
|
||||
let cx = add(mul(from_f32(fpos.x), view.scale), view.corner_x);
|
||||
let cy = add(mul(from_f32(fpos.y), view.scale), view.corner_y);
|
||||
var x: FixedDec;
|
||||
|
||||
Reference in New Issue
Block a user