├── .gitignore ├── media ├── video1.gif ├── video2.gif ├── galaxien1.png ├── galaxien2.png ├── 3dgalaxien01.png ├── 3dgalaxien02.png ├── 3dgalaxien03.png ├── 3dgalaxien04.png ├── 3dgalaxien05.png ├── 3dgalaxien06.png └── depthbuffer.png ├── src ├── shader.frag ├── shader.vert ├── shader.comp ├── config.rs ├── galaxygen.rs ├── main.rs └── render.rs ├── Cargo.toml ├── examples ├── zwei-koerper-1.ron ├── zwei-koerper-2.ron ├── zwei-koerper-3.ron ├── drei-koerper-mond.ron ├── drei-koerper.ron ├── two-galaxies-2.ron └── two-galaxies.ron ├── README.md └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | **/*.rs.bk 3 | *.spv 4 | -------------------------------------------------------------------------------- /media/video1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timokoesters/nbodysim/HEAD/media/video1.gif -------------------------------------------------------------------------------- /media/video2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timokoesters/nbodysim/HEAD/media/video2.gif -------------------------------------------------------------------------------- /media/galaxien1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timokoesters/nbodysim/HEAD/media/galaxien1.png -------------------------------------------------------------------------------- /media/galaxien2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timokoesters/nbodysim/HEAD/media/galaxien2.png -------------------------------------------------------------------------------- /media/3dgalaxien01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timokoesters/nbodysim/HEAD/media/3dgalaxien01.png -------------------------------------------------------------------------------- /media/3dgalaxien02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timokoesters/nbodysim/HEAD/media/3dgalaxien02.png -------------------------------------------------------------------------------- /media/3dgalaxien03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timokoesters/nbodysim/HEAD/media/3dgalaxien03.png -------------------------------------------------------------------------------- /media/3dgalaxien04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timokoesters/nbodysim/HEAD/media/3dgalaxien04.png -------------------------------------------------------------------------------- /media/3dgalaxien05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timokoesters/nbodysim/HEAD/media/3dgalaxien05.png -------------------------------------------------------------------------------- /media/3dgalaxien06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timokoesters/nbodysim/HEAD/media/3dgalaxien06.png -------------------------------------------------------------------------------- /media/depthbuffer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/timokoesters/nbodysim/HEAD/media/depthbuffer.png -------------------------------------------------------------------------------- /src/shader.frag: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | layout(location = 0) in vec3 fragColor; 4 | layout(location = 0) out vec4 outColor; 5 | 6 | void main() { 7 | outColor = vec4(fragColor, 1.0); 8 | } 9 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "nbodysim" 3 | version = "1.0.0" 4 | authors = ["timokoesters "] 5 | edition = "2018" 6 | 7 | [dependencies] 8 | winit = "0.25.0" 9 | wgpu = "0.4.0" 10 | cgmath = "0.18.0" 11 | raw-window-handle = "0.3.3" 12 | rand = "0.8.4" 13 | rand_distr = "0.4.1" 14 | ron = "0.6.4" 15 | serde = "1.0.104" 16 | 17 | [build-dependencies] 18 | glsl-to-spirv = "0.1.7" 19 | -------------------------------------------------------------------------------- /examples/zwei-koerper-1.ron: -------------------------------------------------------------------------------- 1 | ( 2 | camera_pos: ( 3 | 1E9, 4 | 0.0, 5 | 0.0, 6 | ), 7 | safety: 0.0, 8 | constructions: [ 9 | Particle ( 10 | pos: (0.0, 0.0, 0.0), 11 | vel: (0.0, 0.0, -3E5), 12 | mass: 1E32, 13 | ), 14 | Particle ( 15 | pos: (0.0, 3E8, 0.0), 16 | vel: (0.0, 0.0, 3E6), 17 | mass: 1E31, 18 | ), 19 | ], 20 | ) 21 | -------------------------------------------------------------------------------- /examples/zwei-koerper-2.ron: -------------------------------------------------------------------------------- 1 | ( 2 | camera_pos: ( 3 | 0.0, 4 | 0.0, 5 | 1E9, 6 | ), 7 | safety: 0.0, 8 | constructions: [ 9 | Particle ( 10 | pos: (-1E9, 0.0, 0.0), 11 | vel: (0.0, -5E5, 0.0), 12 | mass: 1E32, 13 | ), 14 | Particle ( 15 | pos: (1E9, 0.0, 0.0), 16 | vel: (0.0, 5E5, 0.0), 17 | mass: 1E32, 18 | ), 19 | ], 20 | ) 21 | -------------------------------------------------------------------------------- /examples/zwei-koerper-3.ron: -------------------------------------------------------------------------------- 1 | ( 2 | camera_pos: ( 3 | 0.0, 4 | 0.0, 5 | 1E9, 6 | ), 7 | safety: 0.0, 8 | constructions: [ 9 | Particle ( 10 | pos: (-1E9, -3E8, 0.0), 11 | vel: (0.0, 0.0, 0.0), 12 | mass: 4E29, 13 | ), 14 | Particle ( 15 | pos: (-1E9, 0.0, 0.0), 16 | vel: (1E6, 0.0, 0.0), 17 | mass: 1E31, 18 | ), 19 | ], 20 | ) 21 | -------------------------------------------------------------------------------- /examples/drei-koerper-mond.ron: -------------------------------------------------------------------------------- 1 | ( 2 | camera_pos: ( 3 | 0.0, 4 | 0.0, 5 | 1E9, 6 | ), 7 | safety: 0.0, 8 | constructions: [ 9 | Particle ( 10 | pos: (0.0, 0.0, 0.0), 11 | vel: (0.0, 0.0, 0.0), 12 | mass: 1E32, 13 | ), 14 | Particle ( 15 | pos: (9E8, 0.0, 0.0), 16 | vel: (0.0, 3E6, 0.0), 17 | mass: 1E31, 18 | ), 19 | Particle ( 20 | pos: (8E8, 0.0, 0.0), 21 | vel: (0.0, 5E6, 0.0), 22 | mass: 1E30, 23 | ), 24 | ], 25 | ) 26 | -------------------------------------------------------------------------------- /examples/drei-koerper.ron: -------------------------------------------------------------------------------- 1 | ( 2 | camera_pos: ( 3 | 0.0, 4 | 0.0, 5 | 1E9, 6 | ), 7 | safety: 1E15, 8 | constructions: [ 9 | Particle ( 10 | pos: (0.0, 0.0, 0.0), 11 | vel: (0.0, -3E4, 0.0), 12 | mass: 1E31, 13 | ), 14 | Particle ( 15 | pos: (2E8, 3E8, 0.0), 16 | vel: (1E6, -2E5, 0.0), 17 | mass: 1E31, 18 | ), 19 | Particle ( 20 | pos: (5E8, -1E8, 0.0), 21 | vel: (-2E5, 3E5, 0.0), 22 | mass: 1E31, 23 | ), 24 | ], 25 | ) 26 | -------------------------------------------------------------------------------- /examples/two-galaxies-2.ron: -------------------------------------------------------------------------------- 1 | ( 2 | camera_pos: ( 3 | 0.0, 4 | 0.0, 5 | 1E10, 6 | ), 7 | safety: 1E20, 8 | constructions: [ 9 | Galaxy ( 10 | center_pos: (-1E11, -1E11, 0.0), 11 | center_vel: (10E6, 0.0, 0.0), 12 | center_mass: 1E35, 13 | amount: 100000, 14 | normal: (1.0, 0.0, 0.0), 15 | ), 16 | Galaxy ( 17 | center_pos: (1E11, 1E11, 0.0), 18 | center_vel: (0.0, 0.0, 0.0), 19 | center_mass: 3E35, 20 | amount: 100000, 21 | normal: (1.0, 1.0, 0.0), 22 | ) 23 | ], 24 | ) 25 | -------------------------------------------------------------------------------- /examples/two-galaxies.ron: -------------------------------------------------------------------------------- 1 | ( 2 | camera_pos: ( 3 | 0.0, 4 | 0.0, 5 | 1E10, 6 | ), 7 | safety: 1E20, 8 | constructions: [ 9 | Galaxy ( 10 | center_pos: (-2E11, -1E11, 0.0), 11 | center_vel: (13E6, 0.0, 0.0), 12 | center_mass: 1E35, 13 | amount: 100000, 14 | normal: (1.0, 0.0, 0.0), 15 | ), 16 | Galaxy ( 17 | center_pos: (2E11, 1E11, 0.0), 18 | center_vel: (0.0, 0.0, 0.0), 19 | center_mass: 1E35, 20 | amount: 100000, 21 | normal: (1.0, 0.0, 0.0), 22 | ) 23 | ], 24 | ) 25 | -------------------------------------------------------------------------------- /src/shader.vert: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | out gl_PerVertex { 4 | vec4 gl_Position; 5 | float gl_PointSize; 6 | }; 7 | 8 | layout(location = 0) out vec3 fragColor; 9 | 10 | struct Particle { 11 | vec3 pos; // 0, 1, 2 12 | float radius; // 7 13 | vec3 vel; // 4, 5, 6 14 | double mass; // 7, 8 15 | }; 16 | 17 | layout(set = 0, binding = 0) uniform GlobalsBuffer { 18 | mat4 matrix; 19 | vec3 camera_pos; 20 | uint particles; 21 | float delta; 22 | }; 23 | 24 | layout(std430, set = 0, binding = 2) buffer DataCurrent { 25 | Particle data[]; 26 | }; 27 | 28 | void main() { 29 | int i = gl_VertexIndex; 30 | 31 | // Early return 32 | if(data[i].mass < 0) { 33 | gl_PointSize = 0; 34 | return; 35 | } 36 | 37 | // Render 38 | gl_Position = matrix * vec4(data[i].pos, 1.0); 39 | 40 | if (data[i].mass > 0) { 41 | gl_PointSize = clamp(30 * 1E11 / gl_Position.z, 1, 20); 42 | } else { 43 | gl_PointSize = clamp(1 * 1E11 / gl_Position.z, 1, 5); 44 | } 45 | 46 | if(data[i].mass > 1E33) { 47 | // Color objects with big mass black 48 | fragColor = vec3(0.0, 0.0, 0.0); 49 | } else { 50 | // Give different colors to half of all particles 51 | if(i < particles/2+1) { 52 | fragColor = vec3(0.722, 0.22, 0.231); 53 | } 54 | else { 55 | fragColor = vec3(0.345, 0.522, 0.635); 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | N-Body-Simulation 2 | ================= 3 | 4 | Features: 5 | - 3D 6 | - Realtime 7 | - GPU Acceleration using wgpu 8 | - Save configurations in external files (see examples/) 9 | 10 | Controls: 11 | - Move: WASD, Shift, Space, Move mouse 12 | - Change movement speed: Scroll wheel 13 | - Change simulation speed: 0-6 number keys 14 | - Print fps to console: F 15 | 16 | ## Usage 17 | 18 | ### From binary 19 | 20 | Download the latest executable from [the GitHub release page](https://github.com/timokoesters/nbodysim/releases). 21 | You can either start the binary on its own or give it the path to a configuration as an argument like this: 22 | ```bash 23 | $ ./nbodysim examples/two-galaxies.ron 24 | ``` 25 | You can see example configurations [here](https://github.com/timokoesters/nbodysim/tree/master/examples). 26 | 27 | ### From source 28 | First, make sure you have rust installed. You can find installation instructions [here](https://www.rust-lang.org/tools/install). 29 | ```bash 30 | # Clone the repo 31 | $ git clone https://github.com/timokoesters/nbodysim.git 32 | $ cd nbodysim 33 | 34 | # Compile 35 | $ cargo build --release 36 | 37 | # Run default config 38 | $ cargo run --release 39 | 40 | # Run custom config 41 | $ cargo run --release -- examples/two-galaxies.ron 42 | ``` 43 | 44 | ![two galaxies](media/3dgalaxien01.png) 45 | ![two galaxies](media/3dgalaxien02.png) 46 | ![two galaxies](media/3dgalaxien03.png) 47 | ![two galaxies](media/3dgalaxien04.png) 48 | ![two galaxies](media/3dgalaxien05.png) 49 | ![two galaxies](media/3dgalaxien06.png) 50 | ![two bodies](media/video1.gif) 51 | ![two bodies](media/video2.gif) 52 | ![two galaxies](media/galaxien1.png) 53 | ![two galaxies](media/galaxien2.png) 54 | -------------------------------------------------------------------------------- /src/shader.comp: -------------------------------------------------------------------------------- 1 | #version 450 2 | 3 | const float G = 6.67408E-11; 4 | const uint PARTICLES_PER_GROUP = 256; // REMEMBER TO CHANGE MAIN.RS 5 | 6 | layout(local_size_x = PARTICLES_PER_GROUP) in; 7 | 8 | struct Particle { 9 | vec3 pos; // 0, 1, 2 10 | float radius; // 7 11 | vec3 vel; // 4, 5, 6 12 | double mass; // 7, 8 13 | }; 14 | 15 | layout(set = 0, binding = 0) uniform GlobalsBuffer { 16 | mat4 matrix; 17 | vec3 camera_pos; 18 | uint particles; 19 | double safety; 20 | float delta; 21 | }; 22 | 23 | layout(std430, set = 0, binding = 1) buffer DataOld { 24 | Particle data_old[]; 25 | }; 26 | 27 | layout(std430, set = 0, binding = 2) buffer DataCurrent { 28 | Particle data[]; 29 | }; 30 | 31 | double length2(dvec3 v) { 32 | return v.x * v.x + v.y * v.y + v.z * v.z; 33 | } 34 | 35 | void main() { 36 | // Get index of current particle 37 | uint i = gl_GlobalInvocationID.x; 38 | 39 | // Early return 40 | if(data_old[i].mass < 0) { 41 | return; 42 | } 43 | 44 | // Gravity 45 | if(delta > 0.0) { 46 | dvec3 temp = dvec3(0.0, 0.0, 0.0); 47 | 48 | // Go through all other particles... 49 | for(int j = 0; j < particles; j++) { 50 | // Skip self 51 | if(j == i) { continue; } 52 | 53 | // If a single particle with no mass is encountered, the entire loop 54 | // terminates (because they are sorted by mass) 55 | if(data_old[j].mass == 0) { break; } 56 | 57 | dvec3 diff = data_old[j].pos - data_old[i].pos; 58 | temp += normalize(diff) * data_old[j].mass / (length2(diff)+safety); 59 | } 60 | 61 | // Update data 62 | data[i].vel += vec3(temp * G * delta); 63 | data[i].pos += data[i].vel * delta; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/config.rs: -------------------------------------------------------------------------------- 1 | //! This module is responsible for defining the external config format and parsing it. 2 | 3 | use { 4 | crate::{galaxygen, Particle}, 5 | serde::Deserialize, 6 | }; 7 | 8 | #[derive(Deserialize, Clone, Debug)] 9 | /// The configuration that specifies the initial values of the simulation. 10 | pub struct Config { 11 | pub camera_pos: [f32; 3], 12 | pub safety: f64, 13 | pub constructions: Vec, 14 | } 15 | 16 | #[derive(Deserialize, Clone, Debug)] 17 | /// Description of a (group of) particles. 18 | pub enum Construction { 19 | Particle { 20 | pos: [f32; 3], 21 | vel: [f32; 3], 22 | mass: f64, 23 | }, 24 | Galaxy { 25 | center_pos: [f32; 3], 26 | center_vel: [f32; 3], 27 | center_mass: f64, 28 | amount: u32, 29 | normal: [f32; 3], 30 | }, 31 | } 32 | 33 | impl Config { 34 | /// Build the actual particles from the constructions. 35 | pub fn construct_particles(&self) -> Vec { 36 | let mut particles = Vec::new(); 37 | 38 | // Those with mass first 39 | for c in &self.constructions { 40 | particles.push(match c { 41 | Construction::Particle { pos, vel, mass } => { 42 | Particle::new((*pos).into(), (*vel).into(), *mass, 1.0) 43 | } 44 | Construction::Galaxy { 45 | center_pos, 46 | center_vel, 47 | center_mass, 48 | .. 49 | } => Particle::new( 50 | (*center_pos).into(), 51 | (*center_vel).into(), 52 | *center_mass, 53 | 1.0, 54 | ), 55 | }) 56 | } 57 | 58 | // Particles without mass last 59 | for c in &self.constructions { 60 | if let Construction::Galaxy { 61 | center_pos, 62 | center_vel, 63 | center_mass, 64 | amount, 65 | normal, 66 | } = c 67 | { 68 | galaxygen::generate_galaxy( 69 | &mut particles, 70 | *amount, 71 | self.safety, 72 | (*center_pos).into(), 73 | (*center_vel).into(), 74 | *center_mass, 75 | (*normal).into(), 76 | ); 77 | } 78 | } 79 | 80 | particles 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/galaxygen.rs: -------------------------------------------------------------------------------- 1 | //! This module can generate spiral galaxies based on some parameters. 2 | 3 | use { 4 | crate::Particle, 5 | cgmath::{ 6 | prelude::*, 7 | {Point3, Vector3}, 8 | }, 9 | rand::prelude::*, 10 | std::f32::consts::PI, 11 | }; 12 | 13 | const G: f64 = 6.67408E-11; 14 | const ARMS: u32 = 2; 15 | 16 | /// Fill the particles vector with many stars of a spiral galaxy. 17 | pub fn generate_galaxy( 18 | particles: &mut Vec, 19 | amount: u32, 20 | safety: f64, 21 | center_pos: Point3, 22 | center_vel: Vector3, 23 | center_mass: f64, 24 | mut normal: Vector3, 25 | ) { 26 | // Helpers 27 | normal = normal.normalize(); 28 | let tangent = normal.cross(Vector3::new(-normal.z, normal.x, normal.y)); 29 | let bitangent = normal.cross(tangent); 30 | 31 | // Generate center of the galaxy 32 | for _ in 0..amount / 5 { 33 | let radius = 5E9 34 | + (rand_distr::Normal::::new(0.0, 1E11) 35 | .unwrap() 36 | .sample(&mut thread_rng())) 37 | .abs(); 38 | let angle = thread_rng().gen::() * 2.0 * PI; 39 | 40 | let diff = tangent * angle.sin() + bitangent * angle.cos(); 41 | 42 | let fly_direction = diff.cross(normal).normalize(); 43 | 44 | let pos = center_pos + diff * radius; 45 | 46 | let mass = 0E30; 47 | let density = 1.408; 48 | 49 | // Fg = Fr 50 | // G * m1 * m2 / (r^2 + C) = m1 * v^2 / r 51 | // sqrt(G * m2 * r / (r^2 + C)) = v 52 | let speed = (G * center_mass * radius as f64 / (radius as f64 * radius as f64 + safety)) 53 | .sqrt() as f32; 54 | let vel = center_vel + fly_direction * speed; 55 | 56 | particles.push(Particle::new(pos, vel, mass, density)); 57 | } 58 | 59 | // Generate spiral arms of the galaxy 60 | for _ in 0..amount / 5 * 4 { 61 | // Choose arm 62 | let arm = rand_distr::Uniform::from(0..ARMS).sample(&mut thread_rng()); 63 | 64 | let radius = 5E9 65 | + (rand_distr::Normal::::new(0.0, 1E11) 66 | .unwrap() 67 | .sample(&mut thread_rng())) 68 | .abs(); 69 | 70 | let angle = arm as f32 / ARMS as f32 * 2.0 * PI - radius * 1E-11 71 | + rand_distr::Normal::new(0.0, PI / 16.0) 72 | .unwrap() 73 | .sample(&mut thread_rng()); 74 | 75 | let diff = tangent * angle.sin() + bitangent * angle.cos(); 76 | 77 | let fly_direction = diff.cross(normal).normalize(); 78 | 79 | let pos = center_pos + diff * radius; 80 | 81 | let mass = 0E30; 82 | let density = 1.408; 83 | 84 | // Fg = Fg 85 | // G * m1 * m2 / (r^2 + C) = m1 * v^2 / r 86 | // sqrt(G * m2 * r / (r^2 + C)) = v 87 | let speed = (G * center_mass * radius as f64 / (radius as f64 * radius as f64 + safety)) 88 | .sqrt() as f32; 89 | let vel = center_vel + fly_direction * speed; 90 | 91 | particles.push(Particle::new(pos, vel, mass, density)); 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | //! This is the main file of the project. It contains structures used by all other parts of the 2 | //! engine and the main method 3 | 4 | #![deny( 5 | rust_2018_compatibility, 6 | rust_2018_idioms, 7 | future_incompatible, 8 | nonstandard_style, 9 | unused, 10 | missing_copy_implementations, 11 | clippy::all 12 | )] 13 | 14 | mod config; 15 | mod galaxygen; 16 | mod render; 17 | 18 | use { 19 | cgmath::{Matrix4, Point3, Vector3}, 20 | config::{Config, Construction}, 21 | ron::de::from_reader, 22 | std::{env, f32::consts::PI, fs::File}, 23 | }; 24 | 25 | #[derive(Clone, Copy, Debug)] 26 | #[repr(C)] 27 | /// An object with a position, velocity and mass that can be sent to the GPU. 28 | pub struct Particle { 29 | /// Position 30 | pos: Point3, // 4, 8, 12 31 | 32 | /// The radius of the particle (currently unused) 33 | radius: f32, // 16 34 | 35 | /// Velocity 36 | vel: Vector3, // 4, 8, 12 37 | _p: f32, // 16 38 | 39 | /// Mass 40 | mass: f64, // 4, 8 41 | _p2: [f32; 2], // 12, 16 42 | } 43 | 44 | #[derive(Clone, Copy, Debug)] 45 | #[repr(C)] 46 | /// All variables that define the state of the program. Will be sent to the GPU. 47 | pub struct Globals { 48 | /// The camera matrix (projection x view matrix) 49 | matrix: Matrix4, // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 50 | /// The current camera position (used for particle size) 51 | camera_pos: Point3, // 16, 17, 18 52 | /// The number of particles 53 | particles: u32, // 19 54 | /// Newton's law of gravitation has problems with 1D particles, this value works against 55 | /// gravitation in close ranges. 56 | safety: f64, // 20, 21 57 | /// How much time passes each frame 58 | delta: f32, // 22 59 | 60 | _p: f32, // 23 61 | } 62 | 63 | impl Particle { 64 | fn new(pos: Point3, vel: Vector3, mass: f64, density: f64) -> Self { 65 | Self { 66 | pos, 67 | // V = 4/3*pi*r^3 68 | // V = m/ d 69 | // 4/3*pi*r^3 = m / d 70 | // r^3 = 3*m / (4*d*pi) 71 | // r = cbrt(3*m / (4*d*pi)) 72 | radius: (3.0 * mass / (4.0 * density * PI as f64)).cbrt() as f32, 73 | vel, 74 | mass, 75 | _p: 0.0, 76 | _p2: [0.0; 2], 77 | } 78 | } 79 | } 80 | 81 | fn main() { 82 | let config = read_config().unwrap_or_else(|| { 83 | println!("Using default config."); 84 | default_config() 85 | }); 86 | 87 | // Construct particles from config 88 | let particles = config.construct_particles(); 89 | 90 | let globals = Globals { 91 | matrix: Matrix4::from_translation(Vector3::new(0.0, 0.0, 0.0)), 92 | camera_pos: config.camera_pos.into(), 93 | particles: particles.len() as u32, 94 | safety: config.safety, 95 | delta: 0.0, 96 | _p: 0.0, 97 | }; 98 | 99 | render::run(globals, particles); 100 | } 101 | 102 | /// Read configuration file 103 | fn read_config() -> Option { 104 | let input_path = env::args().nth(1)?; 105 | let f = File::open(&input_path).expect("Failed opening file!"); 106 | let config = from_reader(f).expect("Failed to parse config!"); 107 | 108 | Some(config) 109 | } 110 | 111 | fn default_config() -> Config { 112 | Config { 113 | camera_pos: [0.0, 0.0, 1e10], 114 | safety: 1e20, 115 | constructions: vec![ 116 | Construction::Galaxy { 117 | center_pos: [-1e11, -1e11, 0.0], 118 | center_vel: [10e6, 0.0, 0.0], 119 | center_mass: 1e35, 120 | amount: 100000, 121 | normal: [1.0, 0.0, 0.0], 122 | }, 123 | Construction::Galaxy { 124 | center_pos: [1e11, 1e11, 0.0], 125 | center_vel: [0.0, 0.0, 0.0], 126 | center_mass: 3e35, 127 | amount: 100000, 128 | normal: [1.0, 1.0, 0.0], 129 | }, 130 | ], 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /src/render.rs: -------------------------------------------------------------------------------- 1 | //! This module handles everything that has to do with the window. That includes opening a window, 2 | //! parsing events and rendering. See shader.comp for the physics simulation algorithm. 3 | 4 | use { 5 | crate::{Globals, Particle}, 6 | cgmath::{prelude::*, Matrix4, PerspectiveFov, Point3, Quaternion, Rad, Vector3}, 7 | std::{collections::HashSet, f32::consts::PI, io::Cursor, time::Instant}, 8 | winit::{ 9 | event, 10 | event_loop::{ControlFlow, EventLoop}, 11 | }, 12 | }; 13 | 14 | const TICKS_PER_FRAME: u32 = 3; // Number of simulation steps per redraw 15 | const PARTICLES_PER_GROUP: u32 = 256; // REMEMBER TO CHANGE SHADER.COMP 16 | 17 | fn build_matrix(pos: Point3, dir: Vector3, aspect: f32) -> Matrix4 { 18 | Matrix4::from(PerspectiveFov { 19 | fovy: Rad(PI / 2.0), 20 | aspect, 21 | near: 1E8, 22 | far: 1E14, 23 | }) * Matrix4::look_to_rh(pos, dir, Vector3::new(0.0, 1.0, 0.0)) 24 | } 25 | 26 | pub fn run(mut globals: Globals, particles: Vec) { 27 | // How many bytes do the particles need 28 | let particles_size = (particles.len() * std::mem::size_of::()) as u64; 29 | 30 | let work_group_count = ((particles.len() as f32) / (PARTICLES_PER_GROUP as f32)).ceil() as u32; 31 | 32 | let event_loop = EventLoop::new(); 33 | 34 | #[cfg(not(feature = "gl"))] 35 | let (window, mut size, surface) = { 36 | let window = winit::window::Window::new(&event_loop).unwrap(); 37 | 38 | let size = window.inner_size(); 39 | 40 | let surface = wgpu::Surface::create(&window); 41 | 42 | (window, size, surface) 43 | }; 44 | 45 | #[cfg(feature = "gl")] 46 | let (window, mut size, surface) = { 47 | let wb = winit::WindowBuilder::new(); 48 | let cb = wgpu::glutin::ContextBuilder::new().with_vsync(true); 49 | let context = cb.build_windowed(wb, &event_loop).unwrap(); 50 | 51 | let size = context 52 | .window() 53 | .get_inner_size() 54 | .unwrap() 55 | .to_physical(context.window().get_hidpi_factor()); 56 | 57 | let (context, window) = unsafe { context.make_current().unwrap().split() }; 58 | 59 | let surface = wgpu::Surface::create(&window); 60 | 61 | (window, size, surface) 62 | }; 63 | 64 | // Try to grab mouse 65 | let _ = window.set_cursor_grab(true); 66 | 67 | window.set_cursor_visible(false); 68 | window.set_fullscreen(Some(winit::window::Fullscreen::Borderless( 69 | window.primary_monitor(), 70 | ))); 71 | 72 | // Pick a GPU 73 | let adapter = wgpu::Adapter::request(&wgpu::RequestAdapterOptions { 74 | power_preference: wgpu::PowerPreference::HighPerformance, 75 | backends: wgpu::BackendBit::PRIMARY, 76 | }) 77 | .unwrap(); 78 | println!("{:?}", adapter.get_info()); 79 | 80 | // Request access to that GPU 81 | let (device, mut queue) = adapter.request_device(&wgpu::DeviceDescriptor { 82 | extensions: wgpu::Extensions { 83 | anisotropic_filtering: false, 84 | }, 85 | limits: wgpu::Limits::default(), 86 | }); 87 | 88 | // Load compute shader for the simulation 89 | let cs = include_bytes!("shader.comp.spv"); 90 | let cs_module = device.create_shader_module(&wgpu::read_spirv(Cursor::new(cs.iter())).unwrap()); 91 | 92 | // Load vertex shader to set calculate perspective, size and position of particles 93 | let vs = include_bytes!("shader.vert.spv"); 94 | let vs_module = device.create_shader_module(&wgpu::read_spirv(Cursor::new(vs.iter())).unwrap()); 95 | 96 | // Load fragment shader 97 | let fs = include_bytes!("shader.frag.spv"); 98 | let fs_module = device.create_shader_module(&wgpu::read_spirv(Cursor::new(fs.iter())).unwrap()); 99 | 100 | // Create globals buffer to give global information to the shader 101 | let globals_buffer = device 102 | .create_buffer_mapped(1, wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::COPY_DST) 103 | .fill_from_slice(&[globals]); 104 | 105 | // Create buffer for the previous state of the particles 106 | let old_buffer = device.create_buffer(&wgpu::BufferDescriptor { 107 | size: particles_size, 108 | usage: wgpu::BufferUsage::STORAGE 109 | | wgpu::BufferUsage::STORAGE_READ 110 | | wgpu::BufferUsage::COPY_DST, 111 | }); 112 | 113 | // Create buffer for the current state of the particles 114 | let current_buffer_initializer = device 115 | .create_buffer_mapped(particles.len(), wgpu::BufferUsage::COPY_SRC) 116 | .fill_from_slice(&particles); 117 | 118 | let current_buffer = device.create_buffer(&wgpu::BufferDescriptor { 119 | size: particles_size, 120 | usage: wgpu::BufferUsage::STORAGE 121 | | wgpu::BufferUsage::COPY_SRC 122 | | wgpu::BufferUsage::COPY_DST, 123 | }); 124 | 125 | // Create swap chain to render images to 126 | let mut swap_chain_descriptor = wgpu::SwapChainDescriptor { 127 | usage: wgpu::TextureUsage::OUTPUT_ATTACHMENT, 128 | format: wgpu::TextureFormat::Bgra8UnormSrgb, 129 | width: size.width, 130 | height: size.height, 131 | present_mode: wgpu::PresentMode::Vsync, 132 | }; 133 | 134 | let mut swap_chain = device.create_swap_chain(&surface, &swap_chain_descriptor); 135 | 136 | // Texture to keep track of which particle is in front (for the camera) 137 | let depth_texture = device.create_texture(&wgpu::TextureDescriptor { 138 | size: wgpu::Extent3d { 139 | width: swap_chain_descriptor.width, 140 | height: swap_chain_descriptor.height, 141 | depth: 1, 142 | }, 143 | array_layer_count: 1, 144 | mip_level_count: 1, 145 | sample_count: 1, 146 | dimension: wgpu::TextureDimension::D2, 147 | format: wgpu::TextureFormat::Depth32Float, 148 | usage: wgpu::TextureUsage::OUTPUT_ATTACHMENT | wgpu::TextureUsage::SAMPLED, 149 | }); 150 | let mut depth_view = depth_texture.create_default_view(); 151 | 152 | // Describe the buffers that will be available to the GPU 153 | let bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { 154 | bindings: &[ 155 | // Globals 156 | wgpu::BindGroupLayoutBinding { 157 | binding: 0, 158 | visibility: wgpu::ShaderStage::COMPUTE | wgpu::ShaderStage::VERTEX, 159 | ty: wgpu::BindingType::UniformBuffer { dynamic: false }, 160 | }, 161 | // Old Particle data 162 | wgpu::BindGroupLayoutBinding { 163 | binding: 1, 164 | visibility: wgpu::ShaderStage::COMPUTE, 165 | ty: wgpu::BindingType::StorageBuffer { 166 | dynamic: false, 167 | readonly: true, 168 | }, 169 | }, 170 | // Current Particle data 171 | wgpu::BindGroupLayoutBinding { 172 | binding: 2, 173 | visibility: wgpu::ShaderStage::COMPUTE | wgpu::ShaderStage::VERTEX, 174 | ty: wgpu::BindingType::StorageBuffer { 175 | dynamic: false, 176 | readonly: false, 177 | }, 178 | }, 179 | ], 180 | }); 181 | 182 | // Create the resources described by the bind_group_layout 183 | let bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { 184 | layout: &bind_group_layout, 185 | bindings: &[ 186 | // Globals 187 | wgpu::Binding { 188 | binding: 0, 189 | resource: wgpu::BindingResource::Buffer { 190 | buffer: &globals_buffer, 191 | range: 0..std::mem::size_of::() as u64, 192 | }, 193 | }, 194 | // Old Particle data 195 | wgpu::Binding { 196 | binding: 1, 197 | resource: wgpu::BindingResource::Buffer { 198 | buffer: &old_buffer, 199 | range: 0..particles_size, 200 | }, 201 | }, 202 | // Current Particle data 203 | wgpu::Binding { 204 | binding: 2, 205 | resource: wgpu::BindingResource::Buffer { 206 | buffer: ¤t_buffer, 207 | range: 0..particles_size, 208 | }, 209 | }, 210 | ], 211 | }); 212 | 213 | // Combine all bind_group_layouts 214 | let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { 215 | bind_group_layouts: &[&bind_group_layout], 216 | }); 217 | 218 | // Create compute pipeline 219 | let compute_pipeline = device.create_compute_pipeline(&wgpu::ComputePipelineDescriptor { 220 | layout: &pipeline_layout, 221 | compute_stage: wgpu::ProgrammableStageDescriptor { 222 | module: &cs_module, 223 | entry_point: "main", 224 | }, 225 | }); 226 | 227 | // Create render pipeline 228 | let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { 229 | layout: &pipeline_layout, 230 | vertex_stage: wgpu::ProgrammableStageDescriptor { 231 | module: &vs_module, 232 | entry_point: "main", 233 | }, 234 | fragment_stage: Some(wgpu::ProgrammableStageDescriptor { 235 | module: &fs_module, 236 | entry_point: "main", 237 | }), 238 | rasterization_state: Some(wgpu::RasterizationStateDescriptor { 239 | front_face: wgpu::FrontFace::Ccw, 240 | cull_mode: wgpu::CullMode::Front, 241 | depth_bias: 2, 242 | depth_bias_slope_scale: 2.0, 243 | depth_bias_clamp: 0.0, 244 | }), 245 | primitive_topology: wgpu::PrimitiveTopology::PointList, // Draw vertices as blocky points 246 | color_states: &[wgpu::ColorStateDescriptor { 247 | format: wgpu::TextureFormat::Bgra8UnormSrgb, 248 | color_blend: wgpu::BlendDescriptor::REPLACE, 249 | alpha_blend: wgpu::BlendDescriptor::REPLACE, 250 | write_mask: wgpu::ColorWrite::ALL, 251 | }], 252 | depth_stencil_state: Some(wgpu::DepthStencilStateDescriptor { 253 | format: wgpu::TextureFormat::Depth32Float, 254 | depth_write_enabled: true, 255 | depth_compare: wgpu::CompareFunction::LessEqual, 256 | stencil_front: wgpu::StencilStateFaceDescriptor::IGNORE, 257 | stencil_back: wgpu::StencilStateFaceDescriptor::IGNORE, 258 | stencil_read_mask: 0, 259 | stencil_write_mask: 0, 260 | }), 261 | index_format: wgpu::IndexFormat::Uint16, 262 | vertex_buffers: &[], 263 | sample_count: 1, 264 | sample_mask: !0, 265 | alpha_to_coverage_enabled: false, 266 | }); 267 | 268 | // Where is the camera looking at? 269 | let mut camera_dir = -globals.camera_pos.to_vec(); 270 | camera_dir = camera_dir.normalize(); 271 | globals.matrix = build_matrix( 272 | globals.camera_pos, 273 | camera_dir, 274 | size.width as f32 / size.height as f32, 275 | ); 276 | 277 | // Speed of the camera 278 | let mut fly_speed = 1E10; 279 | 280 | // Which keys are currently held down? 281 | let mut pressed_keys = HashSet::new(); 282 | 283 | // Vector that points to the right of the camera 284 | let mut right = camera_dir.cross(Vector3::new(0.0, 1.0, 0.0)).normalize(); 285 | 286 | // Time of the last tick 287 | let mut last_tick = Instant::now(); 288 | 289 | // Initial setup 290 | { 291 | let mut encoder = 292 | device.create_command_encoder(&wgpu::CommandEncoderDescriptor { todo: 0 }); 293 | 294 | // Initialize current particle buffer 295 | encoder.copy_buffer_to_buffer( 296 | ¤t_buffer_initializer, 297 | 0, 298 | ¤t_buffer, 299 | 0, 300 | particles_size, 301 | ); 302 | 303 | queue.submit(&[encoder.finish()]); 304 | } 305 | 306 | // Start main loop 307 | event_loop.run(move |event, _, control_flow| { 308 | *control_flow = if cfg!(feature = "metal-auto-capture") { 309 | ControlFlow::Exit 310 | } else { 311 | ControlFlow::Poll 312 | }; 313 | match event { 314 | // Move mouse 315 | event::Event::DeviceEvent { 316 | event: event::DeviceEvent::MouseMotion { delta }, 317 | .. 318 | } => { 319 | camera_dir = Quaternion::from_angle_y(Rad(-delta.0 as f32 / 300.0)) 320 | .rotate_vector(camera_dir); 321 | camera_dir = Quaternion::from_axis_angle(right, Rad(delta.1 as f32 / 300.0)) 322 | .rotate_vector(camera_dir); 323 | } 324 | 325 | event::Event::WindowEvent { event, .. } => match event { 326 | // Close window 327 | event::WindowEvent::CloseRequested => { 328 | *control_flow = ControlFlow::Exit; 329 | } 330 | 331 | // Keyboard input 332 | event::WindowEvent::KeyboardInput { 333 | input: 334 | event::KeyboardInput { 335 | virtual_keycode: Some(keycode), 336 | state: event::ElementState::Pressed, 337 | .. 338 | }, 339 | .. 340 | } => { 341 | match keycode { 342 | // Exit 343 | event::VirtualKeyCode::Escape => { 344 | *control_flow = ControlFlow::Exit; 345 | } 346 | event::VirtualKeyCode::Key0 => { 347 | globals.delta = 0.0; 348 | } 349 | event::VirtualKeyCode::Key1 => { 350 | globals.delta = 1E0; 351 | } 352 | event::VirtualKeyCode::Key2 => { 353 | globals.delta = 2E0; 354 | } 355 | event::VirtualKeyCode::Key3 => { 356 | globals.delta = 4E0; 357 | } 358 | event::VirtualKeyCode::Key4 => { 359 | globals.delta = 8E0; 360 | } 361 | event::VirtualKeyCode::Key5 => { 362 | globals.delta = 16E0; 363 | } 364 | event::VirtualKeyCode::Key6 => { 365 | globals.delta = 32E0; 366 | } 367 | event::VirtualKeyCode::F => { 368 | let delta = last_tick.elapsed(); 369 | println!("delta: {:?}, fps: {:.2}", delta, 1.0 / delta.as_secs_f32()); 370 | } 371 | event::VirtualKeyCode::F11 => { 372 | if window.fullscreen().is_some() { 373 | window.set_fullscreen(None); 374 | } else { 375 | window.set_fullscreen(Some(winit::window::Fullscreen::Borderless( 376 | window.primary_monitor(), 377 | ))); 378 | } 379 | } 380 | _ => {} 381 | } 382 | pressed_keys.insert(keycode); 383 | } 384 | 385 | // Release key 386 | event::WindowEvent::KeyboardInput { 387 | input: 388 | event::KeyboardInput { 389 | virtual_keycode: Some(keycode), 390 | state: event::ElementState::Released, 391 | .. 392 | }, 393 | .. 394 | } => { 395 | pressed_keys.remove(&keycode); 396 | } 397 | 398 | // Mouse scroll 399 | event::WindowEvent::MouseWheel { delta, .. } => { 400 | fly_speed *= (1.0 401 | + (match delta { 402 | event::MouseScrollDelta::LineDelta(_, c) => c as f32 / 8.0, 403 | event::MouseScrollDelta::PixelDelta(pos) => pos.y as f32 / 64.0, 404 | })) 405 | .min(4.0) 406 | .max(0.25); 407 | 408 | fly_speed = fly_speed.min(1E13).max(1E9); 409 | } 410 | 411 | // Resize window 412 | event::WindowEvent::Resized(new_size) => { 413 | size = new_size; 414 | 415 | // Reset swap chain, it's outdated 416 | swap_chain_descriptor.width = new_size.width; 417 | swap_chain_descriptor.height = new_size.height; 418 | swap_chain = device.create_swap_chain(&surface, &swap_chain_descriptor); 419 | 420 | // Reset depth texture 421 | let depth_texture = device.create_texture(&wgpu::TextureDescriptor { 422 | size: wgpu::Extent3d { 423 | width: swap_chain_descriptor.width, 424 | height: swap_chain_descriptor.height, 425 | depth: 1, 426 | }, 427 | array_layer_count: 1, 428 | mip_level_count: 1, 429 | sample_count: 1, 430 | dimension: wgpu::TextureDimension::D2, 431 | format: wgpu::TextureFormat::Depth32Float, 432 | usage: wgpu::TextureUsage::OUTPUT_ATTACHMENT, 433 | }); 434 | depth_view = depth_texture.create_default_view(); 435 | } 436 | _ => {} 437 | }, 438 | 439 | // Simulate and redraw 440 | event::Event::RedrawRequested(_window_id) => { 441 | let delta = last_tick.elapsed(); 442 | let dt = delta.as_secs_f32(); 443 | last_tick = Instant::now(); 444 | 445 | let frame = swap_chain.get_next_texture(); 446 | let mut encoder = 447 | device.create_command_encoder(&wgpu::CommandEncoderDescriptor { todo: 0 }); 448 | 449 | camera_dir.normalize(); 450 | right = camera_dir.cross(Vector3::new(0.0, 1.0, 0.0)); 451 | right = right.normalize(); 452 | 453 | if pressed_keys.contains(&event::VirtualKeyCode::A) { 454 | globals.camera_pos += -right * fly_speed * dt; 455 | } 456 | 457 | if pressed_keys.contains(&event::VirtualKeyCode::D) { 458 | globals.camera_pos += right * fly_speed * dt; 459 | } 460 | 461 | if pressed_keys.contains(&event::VirtualKeyCode::W) { 462 | globals.camera_pos += camera_dir * fly_speed * dt; 463 | } 464 | 465 | if pressed_keys.contains(&event::VirtualKeyCode::S) { 466 | globals.camera_pos += -camera_dir * fly_speed * dt; 467 | } 468 | 469 | if pressed_keys.contains(&event::VirtualKeyCode::Space) { 470 | globals.camera_pos.y -= fly_speed * dt; 471 | } 472 | 473 | if pressed_keys.contains(&event::VirtualKeyCode::LShift) { 474 | globals.camera_pos.y += fly_speed * dt; 475 | } 476 | 477 | globals.matrix = build_matrix( 478 | globals.camera_pos, 479 | camera_dir, 480 | size.width as f32 / size.height as f32, 481 | ); 482 | 483 | // Create new globals buffer 484 | let new_globals_buffer = device 485 | .create_buffer_mapped( 486 | 1, 487 | wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::COPY_SRC, 488 | ) 489 | .fill_from_slice(&[globals]); 490 | 491 | // Upload the new globals buffer to the GPU 492 | encoder.copy_buffer_to_buffer( 493 | &new_globals_buffer, 494 | 0, 495 | &globals_buffer, 496 | 0, 497 | std::mem::size_of::() as u64, 498 | ); 499 | 500 | // Compute the simulation a few times 501 | for _ in 0..TICKS_PER_FRAME { 502 | encoder.copy_buffer_to_buffer( 503 | ¤t_buffer, 504 | 0, 505 | &old_buffer, 506 | 0, 507 | particles_size, 508 | ); 509 | let mut cpass = encoder.begin_compute_pass(); 510 | cpass.set_pipeline(&compute_pipeline); 511 | cpass.set_bind_group(0, &bind_group, &[]); 512 | cpass.dispatch(work_group_count, 1, 1); 513 | } 514 | 515 | { 516 | // Render the current state 517 | let mut rpass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { 518 | color_attachments: &[wgpu::RenderPassColorAttachmentDescriptor { 519 | attachment: &frame.view, 520 | resolve_target: None, 521 | load_op: wgpu::LoadOp::Clear, 522 | store_op: wgpu::StoreOp::Store, 523 | clear_color: wgpu::Color { 524 | r: 0.03, 525 | g: 0.03, 526 | b: 0.03, 527 | a: 1.0, 528 | }, 529 | }], 530 | depth_stencil_attachment: Some( 531 | wgpu::RenderPassDepthStencilAttachmentDescriptor { 532 | attachment: &depth_view, 533 | depth_load_op: wgpu::LoadOp::Clear, 534 | depth_store_op: wgpu::StoreOp::Store, 535 | clear_depth: 1.0, 536 | stencil_load_op: wgpu::LoadOp::Clear, 537 | stencil_store_op: wgpu::StoreOp::Store, 538 | clear_stencil: 0, 539 | }, 540 | ), 541 | }); 542 | rpass.set_pipeline(&render_pipeline); 543 | rpass.set_bind_group(0, &bind_group, &[]); 544 | rpass.draw(0..particles.len() as u32, 0..1); 545 | } 546 | 547 | queue.submit(&[encoder.finish()]); 548 | } 549 | 550 | // No more events in queue 551 | event::Event::MainEventsCleared => { 552 | window.request_redraw(); 553 | } 554 | _ => {} 555 | } 556 | }); 557 | } 558 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "ab_glyph_rasterizer" 7 | version = "0.1.4" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "d9fe5e32de01730eb1f6b7f5b51c17e03e2325bf40a74f754f04f130043affff" 10 | 11 | [[package]] 12 | name = "andrew" 13 | version = "0.3.1" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "8c4afb09dd642feec8408e33f92f3ffc4052946f6b20f32fb99c1f58cd4fa7cf" 16 | dependencies = [ 17 | "bitflags", 18 | "rusttype", 19 | "walkdir", 20 | "xdg", 21 | "xml-rs", 22 | ] 23 | 24 | [[package]] 25 | name = "approx" 26 | version = "0.4.0" 27 | source = "registry+https://github.com/rust-lang/crates.io-index" 28 | checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278" 29 | dependencies = [ 30 | "num-traits", 31 | ] 32 | 33 | [[package]] 34 | name = "arrayref" 35 | version = "0.3.6" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" 38 | 39 | [[package]] 40 | name = "arrayvec" 41 | version = "0.5.2" 42 | source = "registry+https://github.com/rust-lang/crates.io-index" 43 | checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" 44 | 45 | [[package]] 46 | name = "ash" 47 | version = "0.29.0" 48 | source = "registry+https://github.com/rust-lang/crates.io-index" 49 | checksum = "003d1fb2eb12eb06d4a03dbe02eea67a9fac910fa97932ab9e3a75b96a1ea5e5" 50 | dependencies = [ 51 | "shared_library", 52 | ] 53 | 54 | [[package]] 55 | name = "atom" 56 | version = "0.3.6" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | checksum = "c9ff149ed9780025acfdb36862d35b28856bb693ceb451259a7164442f22fdc3" 59 | 60 | [[package]] 61 | name = "autocfg" 62 | version = "1.0.1" 63 | source = "registry+https://github.com/rust-lang/crates.io-index" 64 | checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" 65 | 66 | [[package]] 67 | name = "base64" 68 | version = "0.13.0" 69 | source = "registry+https://github.com/rust-lang/crates.io-index" 70 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 71 | 72 | [[package]] 73 | name = "bitflags" 74 | version = "1.3.1" 75 | source = "registry+https://github.com/rust-lang/crates.io-index" 76 | checksum = "2da1976d75adbe5fbc88130ecd119529cf1cc6a93ae1546d8696ee66f0d21af1" 77 | 78 | [[package]] 79 | name = "block" 80 | version = "0.1.6" 81 | source = "registry+https://github.com/rust-lang/crates.io-index" 82 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 83 | 84 | [[package]] 85 | name = "block-buffer" 86 | version = "0.3.3" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab" 89 | dependencies = [ 90 | "arrayref", 91 | "byte-tools", 92 | ] 93 | 94 | [[package]] 95 | name = "bumpalo" 96 | version = "3.7.0" 97 | source = "registry+https://github.com/rust-lang/crates.io-index" 98 | checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" 99 | 100 | [[package]] 101 | name = "byte-tools" 102 | version = "0.2.0" 103 | source = "registry+https://github.com/rust-lang/crates.io-index" 104 | checksum = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40" 105 | 106 | [[package]] 107 | name = "byteorder" 108 | version = "1.4.3" 109 | source = "registry+https://github.com/rust-lang/crates.io-index" 110 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 111 | 112 | [[package]] 113 | name = "calloop" 114 | version = "0.6.5" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "0b036167e76041694579972c28cf4877b4f92da222560ddb49008937b6a6727c" 117 | dependencies = [ 118 | "log", 119 | "nix 0.18.0", 120 | ] 121 | 122 | [[package]] 123 | name = "cc" 124 | version = "1.0.69" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2" 127 | 128 | [[package]] 129 | name = "cfg-if" 130 | version = "0.1.10" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 133 | 134 | [[package]] 135 | name = "cfg-if" 136 | version = "1.0.0" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 139 | 140 | [[package]] 141 | name = "cgmath" 142 | version = "0.18.0" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "1a98d30140e3296250832bbaaff83b27dcd6fa3cc70fb6f1f3e5c9c0023b5317" 145 | dependencies = [ 146 | "approx", 147 | "num-traits", 148 | ] 149 | 150 | [[package]] 151 | name = "cloudabi" 152 | version = "0.0.3" 153 | source = "registry+https://github.com/rust-lang/crates.io-index" 154 | checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 155 | dependencies = [ 156 | "bitflags", 157 | ] 158 | 159 | [[package]] 160 | name = "cmake" 161 | version = "0.1.45" 162 | source = "registry+https://github.com/rust-lang/crates.io-index" 163 | checksum = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855" 164 | dependencies = [ 165 | "cc", 166 | ] 167 | 168 | [[package]] 169 | name = "cocoa" 170 | version = "0.20.2" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "0c49e86fc36d5704151f5996b7b3795385f50ce09e3be0f47a0cfde869681cf8" 173 | dependencies = [ 174 | "bitflags", 175 | "block", 176 | "core-foundation 0.7.0", 177 | "core-graphics 0.19.2", 178 | "foreign-types", 179 | "libc", 180 | "objc", 181 | ] 182 | 183 | [[package]] 184 | name = "cocoa" 185 | version = "0.24.0" 186 | source = "registry+https://github.com/rust-lang/crates.io-index" 187 | checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" 188 | dependencies = [ 189 | "bitflags", 190 | "block", 191 | "cocoa-foundation", 192 | "core-foundation 0.9.1", 193 | "core-graphics 0.22.2", 194 | "foreign-types", 195 | "libc", 196 | "objc", 197 | ] 198 | 199 | [[package]] 200 | name = "cocoa-foundation" 201 | version = "0.1.0" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" 204 | dependencies = [ 205 | "bitflags", 206 | "block", 207 | "core-foundation 0.9.1", 208 | "core-graphics-types", 209 | "foreign-types", 210 | "libc", 211 | "objc", 212 | ] 213 | 214 | [[package]] 215 | name = "colorful" 216 | version = "0.2.1" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "0bca1619ff57dd7a56b58a8e25ef4199f123e78e503fe1653410350a1b98ae65" 219 | 220 | [[package]] 221 | name = "copyless" 222 | version = "0.1.5" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "a2df960f5d869b2dd8532793fde43eb5427cceb126c929747a26823ab0eeb536" 225 | 226 | [[package]] 227 | name = "core-foundation" 228 | version = "0.7.0" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" 231 | dependencies = [ 232 | "core-foundation-sys 0.7.0", 233 | "libc", 234 | ] 235 | 236 | [[package]] 237 | name = "core-foundation" 238 | version = "0.9.1" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" 241 | dependencies = [ 242 | "core-foundation-sys 0.8.2", 243 | "libc", 244 | ] 245 | 246 | [[package]] 247 | name = "core-foundation-sys" 248 | version = "0.7.0" 249 | source = "registry+https://github.com/rust-lang/crates.io-index" 250 | checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" 251 | 252 | [[package]] 253 | name = "core-foundation-sys" 254 | version = "0.8.2" 255 | source = "registry+https://github.com/rust-lang/crates.io-index" 256 | checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" 257 | 258 | [[package]] 259 | name = "core-graphics" 260 | version = "0.19.2" 261 | source = "registry+https://github.com/rust-lang/crates.io-index" 262 | checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" 263 | dependencies = [ 264 | "bitflags", 265 | "core-foundation 0.7.0", 266 | "foreign-types", 267 | "libc", 268 | ] 269 | 270 | [[package]] 271 | name = "core-graphics" 272 | version = "0.22.2" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | checksum = "269f35f69b542b80e736a20a89a05215c0ce80c2c03c514abb2e318b78379d86" 275 | dependencies = [ 276 | "bitflags", 277 | "core-foundation 0.9.1", 278 | "core-graphics-types", 279 | "foreign-types", 280 | "libc", 281 | ] 282 | 283 | [[package]] 284 | name = "core-graphics-types" 285 | version = "0.1.1" 286 | source = "registry+https://github.com/rust-lang/crates.io-index" 287 | checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" 288 | dependencies = [ 289 | "bitflags", 290 | "core-foundation 0.9.1", 291 | "foreign-types", 292 | "libc", 293 | ] 294 | 295 | [[package]] 296 | name = "core-video-sys" 297 | version = "0.1.4" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" 300 | dependencies = [ 301 | "cfg-if 0.1.10", 302 | "core-foundation-sys 0.7.0", 303 | "core-graphics 0.19.2", 304 | "libc", 305 | "objc", 306 | ] 307 | 308 | [[package]] 309 | name = "crossbeam" 310 | version = "0.8.1" 311 | source = "registry+https://github.com/rust-lang/crates.io-index" 312 | checksum = "4ae5588f6b3c3cb05239e90bd110f257254aecd01e4635400391aeae07497845" 313 | dependencies = [ 314 | "cfg-if 1.0.0", 315 | "crossbeam-channel", 316 | "crossbeam-deque", 317 | "crossbeam-epoch", 318 | "crossbeam-queue", 319 | "crossbeam-utils", 320 | ] 321 | 322 | [[package]] 323 | name = "crossbeam-channel" 324 | version = "0.5.1" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" 327 | dependencies = [ 328 | "cfg-if 1.0.0", 329 | "crossbeam-utils", 330 | ] 331 | 332 | [[package]] 333 | name = "crossbeam-deque" 334 | version = "0.8.1" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" 337 | dependencies = [ 338 | "cfg-if 1.0.0", 339 | "crossbeam-epoch", 340 | "crossbeam-utils", 341 | ] 342 | 343 | [[package]] 344 | name = "crossbeam-epoch" 345 | version = "0.9.5" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" 348 | dependencies = [ 349 | "cfg-if 1.0.0", 350 | "crossbeam-utils", 351 | "lazy_static", 352 | "memoffset", 353 | "scopeguard", 354 | ] 355 | 356 | [[package]] 357 | name = "crossbeam-queue" 358 | version = "0.3.2" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "9b10ddc024425c88c2ad148c1b0fd53f4c6d38db9697c9f1588381212fa657c9" 361 | dependencies = [ 362 | "cfg-if 1.0.0", 363 | "crossbeam-utils", 364 | ] 365 | 366 | [[package]] 367 | name = "crossbeam-utils" 368 | version = "0.8.5" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" 371 | dependencies = [ 372 | "cfg-if 1.0.0", 373 | "lazy_static", 374 | ] 375 | 376 | [[package]] 377 | name = "d3d12" 378 | version = "0.3.2" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "d0a60cceb22c7c53035f8980524fdc7f17cf49681a3c154e6757d30afbec6ec4" 381 | dependencies = [ 382 | "bitflags", 383 | "libloading 0.6.7", 384 | "winapi", 385 | ] 386 | 387 | [[package]] 388 | name = "darling" 389 | version = "0.10.2" 390 | source = "registry+https://github.com/rust-lang/crates.io-index" 391 | checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" 392 | dependencies = [ 393 | "darling_core", 394 | "darling_macro", 395 | ] 396 | 397 | [[package]] 398 | name = "darling_core" 399 | version = "0.10.2" 400 | source = "registry+https://github.com/rust-lang/crates.io-index" 401 | checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" 402 | dependencies = [ 403 | "fnv", 404 | "ident_case", 405 | "proc-macro2 1.0.28", 406 | "quote 1.0.9", 407 | "strsim", 408 | "syn 1.0.74", 409 | ] 410 | 411 | [[package]] 412 | name = "darling_macro" 413 | version = "0.10.2" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" 416 | dependencies = [ 417 | "darling_core", 418 | "quote 1.0.9", 419 | "syn 1.0.74", 420 | ] 421 | 422 | [[package]] 423 | name = "derivative" 424 | version = "2.2.0" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 427 | dependencies = [ 428 | "proc-macro2 1.0.28", 429 | "quote 1.0.9", 430 | "syn 1.0.74", 431 | ] 432 | 433 | [[package]] 434 | name = "digest" 435 | version = "0.7.6" 436 | source = "registry+https://github.com/rust-lang/crates.io-index" 437 | checksum = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90" 438 | dependencies = [ 439 | "generic-array", 440 | ] 441 | 442 | [[package]] 443 | name = "dispatch" 444 | version = "0.2.0" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 447 | 448 | [[package]] 449 | name = "dlib" 450 | version = "0.4.2" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "b11f15d1e3268f140f68d390637d5e76d849782d971ae7063e0da69fe9709a76" 453 | dependencies = [ 454 | "libloading 0.6.7", 455 | ] 456 | 457 | [[package]] 458 | name = "dlib" 459 | version = "0.5.0" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" 462 | dependencies = [ 463 | "libloading 0.7.0", 464 | ] 465 | 466 | [[package]] 467 | name = "downcast-rs" 468 | version = "1.2.0" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" 471 | 472 | [[package]] 473 | name = "fake-simd" 474 | version = "0.1.2" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" 477 | 478 | [[package]] 479 | name = "fnv" 480 | version = "1.0.7" 481 | source = "registry+https://github.com/rust-lang/crates.io-index" 482 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 483 | 484 | [[package]] 485 | name = "foreign-types" 486 | version = "0.3.2" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 489 | dependencies = [ 490 | "foreign-types-shared", 491 | ] 492 | 493 | [[package]] 494 | name = "foreign-types-shared" 495 | version = "0.1.1" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 498 | 499 | [[package]] 500 | name = "fxhash" 501 | version = "0.2.1" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 504 | dependencies = [ 505 | "byteorder", 506 | ] 507 | 508 | [[package]] 509 | name = "generic-array" 510 | version = "0.9.1" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | checksum = "6d00328cedcac5e81c683e5620ca6a30756fc23027ebf9bff405c0e8da1fbb7e" 513 | dependencies = [ 514 | "typenum", 515 | ] 516 | 517 | [[package]] 518 | name = "getrandom" 519 | version = "0.2.3" 520 | source = "registry+https://github.com/rust-lang/crates.io-index" 521 | checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" 522 | dependencies = [ 523 | "cfg-if 1.0.0", 524 | "libc", 525 | "wasi", 526 | ] 527 | 528 | [[package]] 529 | name = "gfx-auxil" 530 | version = "0.1.0" 531 | source = "registry+https://github.com/rust-lang/crates.io-index" 532 | checksum = "572eee952a9a23c99cfe3e4fd95d277784058a89ac3c77ff6fa3d80a4e321919" 533 | dependencies = [ 534 | "fxhash", 535 | "gfx-hal", 536 | "spirv_cross", 537 | ] 538 | 539 | [[package]] 540 | name = "gfx-backend-dx11" 541 | version = "0.4.6" 542 | source = "registry+https://github.com/rust-lang/crates.io-index" 543 | checksum = "d7527cfcd7d1eec6b99f81891293bdd2a41d044ace009717264e5f3b10ce5b86" 544 | dependencies = [ 545 | "bitflags", 546 | "gfx-auxil", 547 | "gfx-hal", 548 | "libloading 0.5.2", 549 | "log", 550 | "parking_lot 0.10.2", 551 | "range-alloc", 552 | "raw-window-handle", 553 | "smallvec 0.6.14", 554 | "spirv_cross", 555 | "winapi", 556 | "wio", 557 | ] 558 | 559 | [[package]] 560 | name = "gfx-backend-dx12" 561 | version = "0.4.3" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "305620be6365b7dd8ef8e2bf320174f7aad4a23efb34136ee5b4d4d28bbe1714" 564 | dependencies = [ 565 | "bitflags", 566 | "d3d12", 567 | "gfx-auxil", 568 | "gfx-hal", 569 | "log", 570 | "range-alloc", 571 | "raw-window-handle", 572 | "smallvec 0.6.14", 573 | "spirv_cross", 574 | "winapi", 575 | ] 576 | 577 | [[package]] 578 | name = "gfx-backend-empty" 579 | version = "0.4.0" 580 | source = "registry+https://github.com/rust-lang/crates.io-index" 581 | checksum = "3d383e6bc48867cb37d298a20139fd1eec298f8f6d594690cd1c50ef25470cc7" 582 | dependencies = [ 583 | "gfx-hal", 584 | "raw-window-handle", 585 | ] 586 | 587 | [[package]] 588 | name = "gfx-backend-metal" 589 | version = "0.4.5" 590 | source = "registry+https://github.com/rust-lang/crates.io-index" 591 | checksum = "05b6130b9a72129ebb5c91d3d75a142a7fa54dcc112603231582e3fdc0b84247" 592 | dependencies = [ 593 | "arrayvec", 594 | "bitflags", 595 | "block", 596 | "cocoa 0.20.2", 597 | "copyless", 598 | "core-graphics 0.19.2", 599 | "foreign-types", 600 | "gfx-auxil", 601 | "gfx-hal", 602 | "lazy_static", 603 | "log", 604 | "metal", 605 | "objc", 606 | "parking_lot 0.10.2", 607 | "range-alloc", 608 | "raw-window-handle", 609 | "smallvec 0.6.14", 610 | "spirv_cross", 611 | "storage-map", 612 | ] 613 | 614 | [[package]] 615 | name = "gfx-backend-vulkan" 616 | version = "0.4.3" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | checksum = "f1b8d901941d1734d307dacd8e5f00c89ee8fb8e78b4dab3edd91248150b26b4" 619 | dependencies = [ 620 | "arrayvec", 621 | "ash", 622 | "byteorder", 623 | "core-graphics 0.19.2", 624 | "gfx-hal", 625 | "lazy_static", 626 | "log", 627 | "objc", 628 | "raw-window-handle", 629 | "smallvec 0.6.14", 630 | "winapi", 631 | "x11", 632 | ] 633 | 634 | [[package]] 635 | name = "gfx-hal" 636 | version = "0.4.1" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | checksum = "7c88981665c780447bb08eb099e1ded330754a7246719bab927ee4a949c0ba7f" 639 | dependencies = [ 640 | "bitflags", 641 | "raw-window-handle", 642 | "smallvec 0.6.14", 643 | ] 644 | 645 | [[package]] 646 | name = "glsl-to-spirv" 647 | version = "0.1.7" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | checksum = "28caebc98746d507603a2d3df66dcbe04e41d4febad0320f3eec1ef72b6bbef1" 650 | dependencies = [ 651 | "cmake", 652 | "sha2", 653 | "tempfile", 654 | ] 655 | 656 | [[package]] 657 | name = "hibitset" 658 | version = "0.6.3" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "93a1bb8316a44459a7d14253c4d28dd7395cbd23cc04a68c46e851b8e46d64b1" 661 | dependencies = [ 662 | "atom", 663 | ] 664 | 665 | [[package]] 666 | name = "ident_case" 667 | version = "1.0.1" 668 | source = "registry+https://github.com/rust-lang/crates.io-index" 669 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 670 | 671 | [[package]] 672 | name = "instant" 673 | version = "0.1.10" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" 676 | dependencies = [ 677 | "cfg-if 1.0.0", 678 | ] 679 | 680 | [[package]] 681 | name = "jni-sys" 682 | version = "0.3.0" 683 | source = "registry+https://github.com/rust-lang/crates.io-index" 684 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 685 | 686 | [[package]] 687 | name = "js-sys" 688 | version = "0.3.52" 689 | source = "registry+https://github.com/rust-lang/crates.io-index" 690 | checksum = "ce791b7ca6638aae45be056e068fc756d871eb3b3b10b8efa62d1c9cec616752" 691 | dependencies = [ 692 | "wasm-bindgen", 693 | ] 694 | 695 | [[package]] 696 | name = "lazy_static" 697 | version = "1.4.0" 698 | source = "registry+https://github.com/rust-lang/crates.io-index" 699 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 700 | 701 | [[package]] 702 | name = "libc" 703 | version = "0.2.99" 704 | source = "registry+https://github.com/rust-lang/crates.io-index" 705 | checksum = "a7f823d141fe0a24df1e23b4af4e3c7ba9e5966ec514ea068c93024aa7deb765" 706 | 707 | [[package]] 708 | name = "libloading" 709 | version = "0.5.2" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" 712 | dependencies = [ 713 | "cc", 714 | "winapi", 715 | ] 716 | 717 | [[package]] 718 | name = "libloading" 719 | version = "0.6.7" 720 | source = "registry+https://github.com/rust-lang/crates.io-index" 721 | checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" 722 | dependencies = [ 723 | "cfg-if 1.0.0", 724 | "winapi", 725 | ] 726 | 727 | [[package]] 728 | name = "libloading" 729 | version = "0.7.0" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" 732 | dependencies = [ 733 | "cfg-if 1.0.0", 734 | "winapi", 735 | ] 736 | 737 | [[package]] 738 | name = "libm" 739 | version = "0.2.1" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" 742 | 743 | [[package]] 744 | name = "lock_api" 745 | version = "0.3.4" 746 | source = "registry+https://github.com/rust-lang/crates.io-index" 747 | checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" 748 | dependencies = [ 749 | "scopeguard", 750 | ] 751 | 752 | [[package]] 753 | name = "lock_api" 754 | version = "0.4.4" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb" 757 | dependencies = [ 758 | "scopeguard", 759 | ] 760 | 761 | [[package]] 762 | name = "log" 763 | version = "0.4.14" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" 766 | dependencies = [ 767 | "cfg-if 1.0.0", 768 | ] 769 | 770 | [[package]] 771 | name = "malloc_buf" 772 | version = "0.0.6" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 775 | dependencies = [ 776 | "libc", 777 | ] 778 | 779 | [[package]] 780 | name = "maybe-uninit" 781 | version = "2.0.0" 782 | source = "registry+https://github.com/rust-lang/crates.io-index" 783 | checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" 784 | 785 | [[package]] 786 | name = "memchr" 787 | version = "2.3.4" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" 790 | 791 | [[package]] 792 | name = "memmap2" 793 | version = "0.1.0" 794 | source = "registry+https://github.com/rust-lang/crates.io-index" 795 | checksum = "d9b70ca2a6103ac8b665dc150b142ef0e4e89df640c9e6cf295d189c3caebe5a" 796 | dependencies = [ 797 | "libc", 798 | ] 799 | 800 | [[package]] 801 | name = "memoffset" 802 | version = "0.6.4" 803 | source = "registry+https://github.com/rust-lang/crates.io-index" 804 | checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" 805 | dependencies = [ 806 | "autocfg", 807 | ] 808 | 809 | [[package]] 810 | name = "metal" 811 | version = "0.18.0" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | checksum = "e198a0ee42bdbe9ef2c09d0b9426f3b2b47d90d93a4a9b0395c4cea605e92dc0" 814 | dependencies = [ 815 | "bitflags", 816 | "block", 817 | "cocoa 0.20.2", 818 | "core-graphics 0.19.2", 819 | "foreign-types", 820 | "log", 821 | "objc", 822 | ] 823 | 824 | [[package]] 825 | name = "mio" 826 | version = "0.7.13" 827 | source = "registry+https://github.com/rust-lang/crates.io-index" 828 | checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" 829 | dependencies = [ 830 | "libc", 831 | "log", 832 | "miow", 833 | "ntapi", 834 | "winapi", 835 | ] 836 | 837 | [[package]] 838 | name = "mio-misc" 839 | version = "1.2.1" 840 | source = "registry+https://github.com/rust-lang/crates.io-index" 841 | checksum = "0ddf05411bb159cdb5801bb10002afb66cb4572be656044315e363460ce69dc2" 842 | dependencies = [ 843 | "crossbeam", 844 | "crossbeam-queue", 845 | "log", 846 | "mio", 847 | ] 848 | 849 | [[package]] 850 | name = "miow" 851 | version = "0.3.7" 852 | source = "registry+https://github.com/rust-lang/crates.io-index" 853 | checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" 854 | dependencies = [ 855 | "winapi", 856 | ] 857 | 858 | [[package]] 859 | name = "nbodysim" 860 | version = "1.0.0" 861 | dependencies = [ 862 | "cgmath", 863 | "glsl-to-spirv", 864 | "rand", 865 | "rand_distr", 866 | "raw-window-handle", 867 | "ron", 868 | "serde", 869 | "wgpu", 870 | "winit", 871 | ] 872 | 873 | [[package]] 874 | name = "ndk" 875 | version = "0.3.0" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "8794322172319b972f528bf90c6b467be0079f1fa82780ffb431088e741a73ab" 878 | dependencies = [ 879 | "jni-sys", 880 | "ndk-sys", 881 | "num_enum", 882 | "thiserror", 883 | ] 884 | 885 | [[package]] 886 | name = "ndk-glue" 887 | version = "0.3.0" 888 | source = "registry+https://github.com/rust-lang/crates.io-index" 889 | checksum = "c5caf0c24d51ac1c905c27d4eda4fa0635bbe0de596b8f79235e0b17a4d29385" 890 | dependencies = [ 891 | "lazy_static", 892 | "libc", 893 | "log", 894 | "ndk", 895 | "ndk-macro", 896 | "ndk-sys", 897 | ] 898 | 899 | [[package]] 900 | name = "ndk-macro" 901 | version = "0.2.0" 902 | source = "registry+https://github.com/rust-lang/crates.io-index" 903 | checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" 904 | dependencies = [ 905 | "darling", 906 | "proc-macro-crate 0.1.5", 907 | "proc-macro2 1.0.28", 908 | "quote 1.0.9", 909 | "syn 1.0.74", 910 | ] 911 | 912 | [[package]] 913 | name = "ndk-sys" 914 | version = "0.2.1" 915 | source = "registry+https://github.com/rust-lang/crates.io-index" 916 | checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d" 917 | 918 | [[package]] 919 | name = "nix" 920 | version = "0.18.0" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055" 923 | dependencies = [ 924 | "bitflags", 925 | "cc", 926 | "cfg-if 0.1.10", 927 | "libc", 928 | ] 929 | 930 | [[package]] 931 | name = "nix" 932 | version = "0.20.0" 933 | source = "registry+https://github.com/rust-lang/crates.io-index" 934 | checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" 935 | dependencies = [ 936 | "bitflags", 937 | "cc", 938 | "cfg-if 1.0.0", 939 | "libc", 940 | ] 941 | 942 | [[package]] 943 | name = "nom" 944 | version = "6.2.1" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | checksum = "9c5c51b9083a3c620fa67a2a635d1ce7d95b897e957d6b28ff9a5da960a103a6" 947 | dependencies = [ 948 | "memchr", 949 | "version_check", 950 | ] 951 | 952 | [[package]] 953 | name = "ntapi" 954 | version = "0.3.6" 955 | source = "registry+https://github.com/rust-lang/crates.io-index" 956 | checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" 957 | dependencies = [ 958 | "winapi", 959 | ] 960 | 961 | [[package]] 962 | name = "num-traits" 963 | version = "0.2.14" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" 966 | dependencies = [ 967 | "autocfg", 968 | "libm", 969 | ] 970 | 971 | [[package]] 972 | name = "num_enum" 973 | version = "0.5.3" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | checksum = "ee2c8fd66061a707503d515639b8af10fd3807a5b5ee6959f7ff1bd303634bd5" 976 | dependencies = [ 977 | "derivative", 978 | "num_enum_derive", 979 | ] 980 | 981 | [[package]] 982 | name = "num_enum_derive" 983 | version = "0.5.3" 984 | source = "registry+https://github.com/rust-lang/crates.io-index" 985 | checksum = "474fd1d096da3ad17084694eebed40ba09c4a36c5255cd772bd8b98859cc562e" 986 | dependencies = [ 987 | "proc-macro-crate 1.0.0", 988 | "proc-macro2 1.0.28", 989 | "quote 1.0.9", 990 | "syn 1.0.74", 991 | ] 992 | 993 | [[package]] 994 | name = "objc" 995 | version = "0.2.7" 996 | source = "registry+https://github.com/rust-lang/crates.io-index" 997 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 998 | dependencies = [ 999 | "malloc_buf", 1000 | "objc_exception", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "objc_exception" 1005 | version = "0.1.2" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" 1008 | dependencies = [ 1009 | "cc", 1010 | ] 1011 | 1012 | [[package]] 1013 | name = "once_cell" 1014 | version = "1.8.0" 1015 | source = "registry+https://github.com/rust-lang/crates.io-index" 1016 | checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" 1017 | 1018 | [[package]] 1019 | name = "owned_ttf_parser" 1020 | version = "0.6.0" 1021 | source = "registry+https://github.com/rust-lang/crates.io-index" 1022 | checksum = "9f923fb806c46266c02ab4a5b239735c144bdeda724a50ed058e5226f594cde3" 1023 | dependencies = [ 1024 | "ttf-parser", 1025 | ] 1026 | 1027 | [[package]] 1028 | name = "parking_lot" 1029 | version = "0.9.0" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" 1032 | dependencies = [ 1033 | "lock_api 0.3.4", 1034 | "parking_lot_core 0.6.2", 1035 | "rustc_version", 1036 | ] 1037 | 1038 | [[package]] 1039 | name = "parking_lot" 1040 | version = "0.10.2" 1041 | source = "registry+https://github.com/rust-lang/crates.io-index" 1042 | checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" 1043 | dependencies = [ 1044 | "lock_api 0.3.4", 1045 | "parking_lot_core 0.7.2", 1046 | ] 1047 | 1048 | [[package]] 1049 | name = "parking_lot" 1050 | version = "0.11.1" 1051 | source = "registry+https://github.com/rust-lang/crates.io-index" 1052 | checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" 1053 | dependencies = [ 1054 | "instant", 1055 | "lock_api 0.4.4", 1056 | "parking_lot_core 0.8.3", 1057 | ] 1058 | 1059 | [[package]] 1060 | name = "parking_lot_core" 1061 | version = "0.6.2" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" 1064 | dependencies = [ 1065 | "cfg-if 0.1.10", 1066 | "cloudabi", 1067 | "libc", 1068 | "redox_syscall 0.1.57", 1069 | "rustc_version", 1070 | "smallvec 0.6.14", 1071 | "winapi", 1072 | ] 1073 | 1074 | [[package]] 1075 | name = "parking_lot_core" 1076 | version = "0.7.2" 1077 | source = "registry+https://github.com/rust-lang/crates.io-index" 1078 | checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" 1079 | dependencies = [ 1080 | "cfg-if 0.1.10", 1081 | "cloudabi", 1082 | "libc", 1083 | "redox_syscall 0.1.57", 1084 | "smallvec 1.6.1", 1085 | "winapi", 1086 | ] 1087 | 1088 | [[package]] 1089 | name = "parking_lot_core" 1090 | version = "0.8.3" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" 1093 | dependencies = [ 1094 | "cfg-if 1.0.0", 1095 | "instant", 1096 | "libc", 1097 | "redox_syscall 0.2.10", 1098 | "smallvec 1.6.1", 1099 | "winapi", 1100 | ] 1101 | 1102 | [[package]] 1103 | name = "percent-encoding" 1104 | version = "2.1.0" 1105 | source = "registry+https://github.com/rust-lang/crates.io-index" 1106 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 1107 | 1108 | [[package]] 1109 | name = "pkg-config" 1110 | version = "0.3.19" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" 1113 | 1114 | [[package]] 1115 | name = "ppv-lite86" 1116 | version = "0.2.10" 1117 | source = "registry+https://github.com/rust-lang/crates.io-index" 1118 | checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" 1119 | 1120 | [[package]] 1121 | name = "proc-macro-crate" 1122 | version = "0.1.5" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 1125 | dependencies = [ 1126 | "toml", 1127 | ] 1128 | 1129 | [[package]] 1130 | name = "proc-macro-crate" 1131 | version = "1.0.0" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92" 1134 | dependencies = [ 1135 | "thiserror", 1136 | "toml", 1137 | ] 1138 | 1139 | [[package]] 1140 | name = "proc-macro2" 1141 | version = "0.4.30" 1142 | source = "registry+https://github.com/rust-lang/crates.io-index" 1143 | checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" 1144 | dependencies = [ 1145 | "unicode-xid 0.1.0", 1146 | ] 1147 | 1148 | [[package]] 1149 | name = "proc-macro2" 1150 | version = "1.0.28" 1151 | source = "registry+https://github.com/rust-lang/crates.io-index" 1152 | checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" 1153 | dependencies = [ 1154 | "unicode-xid 0.2.2", 1155 | ] 1156 | 1157 | [[package]] 1158 | name = "quote" 1159 | version = "0.6.13" 1160 | source = "registry+https://github.com/rust-lang/crates.io-index" 1161 | checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" 1162 | dependencies = [ 1163 | "proc-macro2 0.4.30", 1164 | ] 1165 | 1166 | [[package]] 1167 | name = "quote" 1168 | version = "1.0.9" 1169 | source = "registry+https://github.com/rust-lang/crates.io-index" 1170 | checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" 1171 | dependencies = [ 1172 | "proc-macro2 1.0.28", 1173 | ] 1174 | 1175 | [[package]] 1176 | name = "rand" 1177 | version = "0.8.4" 1178 | source = "registry+https://github.com/rust-lang/crates.io-index" 1179 | checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" 1180 | dependencies = [ 1181 | "libc", 1182 | "rand_chacha", 1183 | "rand_core", 1184 | "rand_hc", 1185 | ] 1186 | 1187 | [[package]] 1188 | name = "rand_chacha" 1189 | version = "0.3.1" 1190 | source = "registry+https://github.com/rust-lang/crates.io-index" 1191 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1192 | dependencies = [ 1193 | "ppv-lite86", 1194 | "rand_core", 1195 | ] 1196 | 1197 | [[package]] 1198 | name = "rand_core" 1199 | version = "0.6.3" 1200 | source = "registry+https://github.com/rust-lang/crates.io-index" 1201 | checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" 1202 | dependencies = [ 1203 | "getrandom", 1204 | ] 1205 | 1206 | [[package]] 1207 | name = "rand_distr" 1208 | version = "0.4.1" 1209 | source = "registry+https://github.com/rust-lang/crates.io-index" 1210 | checksum = "051b398806e42b9cd04ad9ec8f81e355d0a382c543ac6672c62f5a5b452ef142" 1211 | dependencies = [ 1212 | "num-traits", 1213 | "rand", 1214 | ] 1215 | 1216 | [[package]] 1217 | name = "rand_hc" 1218 | version = "0.3.1" 1219 | source = "registry+https://github.com/rust-lang/crates.io-index" 1220 | checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" 1221 | dependencies = [ 1222 | "rand_core", 1223 | ] 1224 | 1225 | [[package]] 1226 | name = "range-alloc" 1227 | version = "0.1.2" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | checksum = "63e935c45e09cc6dcf00d2f0b2d630a58f4095320223d47fc68918722f0538b6" 1230 | 1231 | [[package]] 1232 | name = "raw-window-handle" 1233 | version = "0.3.3" 1234 | source = "registry+https://github.com/rust-lang/crates.io-index" 1235 | checksum = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211" 1236 | dependencies = [ 1237 | "libc", 1238 | ] 1239 | 1240 | [[package]] 1241 | name = "redox_syscall" 1242 | version = "0.1.57" 1243 | source = "registry+https://github.com/rust-lang/crates.io-index" 1244 | checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" 1245 | 1246 | [[package]] 1247 | name = "redox_syscall" 1248 | version = "0.2.10" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" 1251 | dependencies = [ 1252 | "bitflags", 1253 | ] 1254 | 1255 | [[package]] 1256 | name = "relevant" 1257 | version = "0.4.2" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | checksum = "bbc232e13d37f4547f5b9b42a5efc380cabe5dbc1807f8b893580640b2ab0308" 1260 | dependencies = [ 1261 | "cfg-if 0.1.10", 1262 | "log", 1263 | ] 1264 | 1265 | [[package]] 1266 | name = "remove_dir_all" 1267 | version = "0.5.3" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" 1270 | dependencies = [ 1271 | "winapi", 1272 | ] 1273 | 1274 | [[package]] 1275 | name = "rendy-descriptor" 1276 | version = "0.5.1" 1277 | source = "registry+https://github.com/rust-lang/crates.io-index" 1278 | checksum = "f475bcc0505946e998590f1f0545c52ef4b559174a1b353a7ce6638def8b621e" 1279 | dependencies = [ 1280 | "gfx-hal", 1281 | "log", 1282 | "relevant", 1283 | "smallvec 0.6.14", 1284 | ] 1285 | 1286 | [[package]] 1287 | name = "rendy-memory" 1288 | version = "0.5.2" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | checksum = "ed492161a819feae7f27f418bb16035276ac20649c60d756699152cb5c1960ec" 1291 | dependencies = [ 1292 | "colorful", 1293 | "gfx-hal", 1294 | "hibitset", 1295 | "log", 1296 | "relevant", 1297 | "slab", 1298 | "smallvec 0.6.14", 1299 | ] 1300 | 1301 | [[package]] 1302 | name = "ron" 1303 | version = "0.6.4" 1304 | source = "registry+https://github.com/rust-lang/crates.io-index" 1305 | checksum = "064ea8613fb712a19faf920022ec8ddf134984f100090764a4e1d768f3827f1f" 1306 | dependencies = [ 1307 | "base64", 1308 | "bitflags", 1309 | "serde", 1310 | ] 1311 | 1312 | [[package]] 1313 | name = "rustc_version" 1314 | version = "0.2.3" 1315 | source = "registry+https://github.com/rust-lang/crates.io-index" 1316 | checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1317 | dependencies = [ 1318 | "semver", 1319 | ] 1320 | 1321 | [[package]] 1322 | name = "rusttype" 1323 | version = "0.9.2" 1324 | source = "registry+https://github.com/rust-lang/crates.io-index" 1325 | checksum = "dc7c727aded0be18c5b80c1640eae0ac8e396abf6fa8477d96cb37d18ee5ec59" 1326 | dependencies = [ 1327 | "ab_glyph_rasterizer", 1328 | "owned_ttf_parser", 1329 | ] 1330 | 1331 | [[package]] 1332 | name = "same-file" 1333 | version = "1.0.6" 1334 | source = "registry+https://github.com/rust-lang/crates.io-index" 1335 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1336 | dependencies = [ 1337 | "winapi-util", 1338 | ] 1339 | 1340 | [[package]] 1341 | name = "scoped-tls" 1342 | version = "1.0.0" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" 1345 | 1346 | [[package]] 1347 | name = "scopeguard" 1348 | version = "1.1.0" 1349 | source = "registry+https://github.com/rust-lang/crates.io-index" 1350 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1351 | 1352 | [[package]] 1353 | name = "semver" 1354 | version = "0.9.0" 1355 | source = "registry+https://github.com/rust-lang/crates.io-index" 1356 | checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1357 | dependencies = [ 1358 | "semver-parser", 1359 | ] 1360 | 1361 | [[package]] 1362 | name = "semver-parser" 1363 | version = "0.7.0" 1364 | source = "registry+https://github.com/rust-lang/crates.io-index" 1365 | checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1366 | 1367 | [[package]] 1368 | name = "serde" 1369 | version = "1.0.127" 1370 | source = "registry+https://github.com/rust-lang/crates.io-index" 1371 | checksum = "f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8" 1372 | dependencies = [ 1373 | "serde_derive", 1374 | ] 1375 | 1376 | [[package]] 1377 | name = "serde_derive" 1378 | version = "1.0.127" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc" 1381 | dependencies = [ 1382 | "proc-macro2 1.0.28", 1383 | "quote 1.0.9", 1384 | "syn 1.0.74", 1385 | ] 1386 | 1387 | [[package]] 1388 | name = "sha2" 1389 | version = "0.7.1" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | checksum = "9eb6be24e4c23a84d7184280d2722f7f2731fcdd4a9d886efbfe4413e4847ea0" 1392 | dependencies = [ 1393 | "block-buffer", 1394 | "byte-tools", 1395 | "digest", 1396 | "fake-simd", 1397 | ] 1398 | 1399 | [[package]] 1400 | name = "shared_library" 1401 | version = "0.1.9" 1402 | source = "registry+https://github.com/rust-lang/crates.io-index" 1403 | checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" 1404 | dependencies = [ 1405 | "lazy_static", 1406 | "libc", 1407 | ] 1408 | 1409 | [[package]] 1410 | name = "slab" 1411 | version = "0.4.4" 1412 | source = "registry+https://github.com/rust-lang/crates.io-index" 1413 | checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" 1414 | 1415 | [[package]] 1416 | name = "smallvec" 1417 | version = "0.6.14" 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" 1419 | checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" 1420 | dependencies = [ 1421 | "maybe-uninit", 1422 | ] 1423 | 1424 | [[package]] 1425 | name = "smallvec" 1426 | version = "1.6.1" 1427 | source = "registry+https://github.com/rust-lang/crates.io-index" 1428 | checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" 1429 | 1430 | [[package]] 1431 | name = "smithay-client-toolkit" 1432 | version = "0.12.3" 1433 | source = "registry+https://github.com/rust-lang/crates.io-index" 1434 | checksum = "4750c76fd5d3ac95fa3ed80fe667d6a3d8590a960e5b575b98eea93339a80b80" 1435 | dependencies = [ 1436 | "andrew", 1437 | "bitflags", 1438 | "calloop", 1439 | "dlib 0.4.2", 1440 | "lazy_static", 1441 | "log", 1442 | "memmap2", 1443 | "nix 0.18.0", 1444 | "wayland-client", 1445 | "wayland-cursor", 1446 | "wayland-protocols", 1447 | ] 1448 | 1449 | [[package]] 1450 | name = "spirv_cross" 1451 | version = "0.16.0" 1452 | source = "registry+https://github.com/rust-lang/crates.io-index" 1453 | checksum = "fbbe441b3ac8ec0ae6a4f05234239bd372a241ce15793eef694e8b24afc267bb" 1454 | dependencies = [ 1455 | "cc", 1456 | "js-sys", 1457 | "wasm-bindgen", 1458 | ] 1459 | 1460 | [[package]] 1461 | name = "storage-map" 1462 | version = "0.2.0" 1463 | source = "registry+https://github.com/rust-lang/crates.io-index" 1464 | checksum = "fd0a4829a5c591dc24a944a736d6b1e4053e51339a79fd5d4702c4c999a9c45e" 1465 | dependencies = [ 1466 | "lock_api 0.3.4", 1467 | ] 1468 | 1469 | [[package]] 1470 | name = "strsim" 1471 | version = "0.9.3" 1472 | source = "registry+https://github.com/rust-lang/crates.io-index" 1473 | checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" 1474 | 1475 | [[package]] 1476 | name = "syn" 1477 | version = "0.15.44" 1478 | source = "registry+https://github.com/rust-lang/crates.io-index" 1479 | checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" 1480 | dependencies = [ 1481 | "proc-macro2 0.4.30", 1482 | "quote 0.6.13", 1483 | "unicode-xid 0.1.0", 1484 | ] 1485 | 1486 | [[package]] 1487 | name = "syn" 1488 | version = "1.0.74" 1489 | source = "registry+https://github.com/rust-lang/crates.io-index" 1490 | checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c" 1491 | dependencies = [ 1492 | "proc-macro2 1.0.28", 1493 | "quote 1.0.9", 1494 | "unicode-xid 0.2.2", 1495 | ] 1496 | 1497 | [[package]] 1498 | name = "synstructure" 1499 | version = "0.10.2" 1500 | source = "registry+https://github.com/rust-lang/crates.io-index" 1501 | checksum = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" 1502 | dependencies = [ 1503 | "proc-macro2 0.4.30", 1504 | "quote 0.6.13", 1505 | "syn 0.15.44", 1506 | "unicode-xid 0.1.0", 1507 | ] 1508 | 1509 | [[package]] 1510 | name = "tempfile" 1511 | version = "3.2.0" 1512 | source = "registry+https://github.com/rust-lang/crates.io-index" 1513 | checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" 1514 | dependencies = [ 1515 | "cfg-if 1.0.0", 1516 | "libc", 1517 | "rand", 1518 | "redox_syscall 0.2.10", 1519 | "remove_dir_all", 1520 | "winapi", 1521 | ] 1522 | 1523 | [[package]] 1524 | name = "thiserror" 1525 | version = "1.0.26" 1526 | source = "registry+https://github.com/rust-lang/crates.io-index" 1527 | checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2" 1528 | dependencies = [ 1529 | "thiserror-impl", 1530 | ] 1531 | 1532 | [[package]] 1533 | name = "thiserror-impl" 1534 | version = "1.0.26" 1535 | source = "registry+https://github.com/rust-lang/crates.io-index" 1536 | checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745" 1537 | dependencies = [ 1538 | "proc-macro2 1.0.28", 1539 | "quote 1.0.9", 1540 | "syn 1.0.74", 1541 | ] 1542 | 1543 | [[package]] 1544 | name = "toml" 1545 | version = "0.5.8" 1546 | source = "registry+https://github.com/rust-lang/crates.io-index" 1547 | checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" 1548 | dependencies = [ 1549 | "serde", 1550 | ] 1551 | 1552 | [[package]] 1553 | name = "ttf-parser" 1554 | version = "0.6.2" 1555 | source = "registry+https://github.com/rust-lang/crates.io-index" 1556 | checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc" 1557 | 1558 | [[package]] 1559 | name = "typenum" 1560 | version = "1.13.0" 1561 | source = "registry+https://github.com/rust-lang/crates.io-index" 1562 | checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" 1563 | 1564 | [[package]] 1565 | name = "unicode-xid" 1566 | version = "0.1.0" 1567 | source = "registry+https://github.com/rust-lang/crates.io-index" 1568 | checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1569 | 1570 | [[package]] 1571 | name = "unicode-xid" 1572 | version = "0.2.2" 1573 | source = "registry+https://github.com/rust-lang/crates.io-index" 1574 | checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" 1575 | 1576 | [[package]] 1577 | name = "vec_map" 1578 | version = "0.8.2" 1579 | source = "registry+https://github.com/rust-lang/crates.io-index" 1580 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 1581 | 1582 | [[package]] 1583 | name = "version_check" 1584 | version = "0.9.3" 1585 | source = "registry+https://github.com/rust-lang/crates.io-index" 1586 | checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" 1587 | 1588 | [[package]] 1589 | name = "walkdir" 1590 | version = "2.3.2" 1591 | source = "registry+https://github.com/rust-lang/crates.io-index" 1592 | checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" 1593 | dependencies = [ 1594 | "same-file", 1595 | "winapi", 1596 | "winapi-util", 1597 | ] 1598 | 1599 | [[package]] 1600 | name = "wasi" 1601 | version = "0.10.2+wasi-snapshot-preview1" 1602 | source = "registry+https://github.com/rust-lang/crates.io-index" 1603 | checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" 1604 | 1605 | [[package]] 1606 | name = "wasm-bindgen" 1607 | version = "0.2.75" 1608 | source = "registry+https://github.com/rust-lang/crates.io-index" 1609 | checksum = "b608ecc8f4198fe8680e2ed18eccab5f0cd4caaf3d83516fa5fb2e927fda2586" 1610 | dependencies = [ 1611 | "cfg-if 1.0.0", 1612 | "wasm-bindgen-macro", 1613 | ] 1614 | 1615 | [[package]] 1616 | name = "wasm-bindgen-backend" 1617 | version = "0.2.75" 1618 | source = "registry+https://github.com/rust-lang/crates.io-index" 1619 | checksum = "580aa3a91a63d23aac5b6b267e2d13cb4f363e31dce6c352fca4752ae12e479f" 1620 | dependencies = [ 1621 | "bumpalo", 1622 | "lazy_static", 1623 | "log", 1624 | "proc-macro2 1.0.28", 1625 | "quote 1.0.9", 1626 | "syn 1.0.74", 1627 | "wasm-bindgen-shared", 1628 | ] 1629 | 1630 | [[package]] 1631 | name = "wasm-bindgen-macro" 1632 | version = "0.2.75" 1633 | source = "registry+https://github.com/rust-lang/crates.io-index" 1634 | checksum = "171ebf0ed9e1458810dfcb31f2e766ad6b3a89dbda42d8901f2b268277e5f09c" 1635 | dependencies = [ 1636 | "quote 1.0.9", 1637 | "wasm-bindgen-macro-support", 1638 | ] 1639 | 1640 | [[package]] 1641 | name = "wasm-bindgen-macro-support" 1642 | version = "0.2.75" 1643 | source = "registry+https://github.com/rust-lang/crates.io-index" 1644 | checksum = "6c2657dd393f03aa2a659c25c6ae18a13a4048cebd220e147933ea837efc589f" 1645 | dependencies = [ 1646 | "proc-macro2 1.0.28", 1647 | "quote 1.0.9", 1648 | "syn 1.0.74", 1649 | "wasm-bindgen-backend", 1650 | "wasm-bindgen-shared", 1651 | ] 1652 | 1653 | [[package]] 1654 | name = "wasm-bindgen-shared" 1655 | version = "0.2.75" 1656 | source = "registry+https://github.com/rust-lang/crates.io-index" 1657 | checksum = "2e0c4a743a309662d45f4ede961d7afa4ba4131a59a639f29b0069c3798bbcc2" 1658 | 1659 | [[package]] 1660 | name = "wayland-client" 1661 | version = "0.28.6" 1662 | source = "registry+https://github.com/rust-lang/crates.io-index" 1663 | checksum = "e3ab332350e502f159382201394a78e3cc12d0f04db863429260164ea40e0355" 1664 | dependencies = [ 1665 | "bitflags", 1666 | "downcast-rs", 1667 | "libc", 1668 | "nix 0.20.0", 1669 | "scoped-tls", 1670 | "wayland-commons", 1671 | "wayland-scanner", 1672 | "wayland-sys", 1673 | ] 1674 | 1675 | [[package]] 1676 | name = "wayland-commons" 1677 | version = "0.28.6" 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" 1679 | checksum = "a21817947c7011bbd0a27e11b17b337bfd022e8544b071a2641232047966fbda" 1680 | dependencies = [ 1681 | "nix 0.20.0", 1682 | "once_cell", 1683 | "smallvec 1.6.1", 1684 | "wayland-sys", 1685 | ] 1686 | 1687 | [[package]] 1688 | name = "wayland-cursor" 1689 | version = "0.28.6" 1690 | source = "registry+https://github.com/rust-lang/crates.io-index" 1691 | checksum = "be610084edd1586d45e7bdd275fe345c7c1873598caa464c4fb835dee70fa65a" 1692 | dependencies = [ 1693 | "nix 0.20.0", 1694 | "wayland-client", 1695 | "xcursor", 1696 | ] 1697 | 1698 | [[package]] 1699 | name = "wayland-protocols" 1700 | version = "0.28.6" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "286620ea4d803bacf61fa087a4242ee316693099ee5a140796aaba02b29f861f" 1703 | dependencies = [ 1704 | "bitflags", 1705 | "wayland-client", 1706 | "wayland-commons", 1707 | "wayland-scanner", 1708 | ] 1709 | 1710 | [[package]] 1711 | name = "wayland-scanner" 1712 | version = "0.28.6" 1713 | source = "registry+https://github.com/rust-lang/crates.io-index" 1714 | checksum = "ce923eb2deb61de332d1f356ec7b6bf37094dc5573952e1c8936db03b54c03f1" 1715 | dependencies = [ 1716 | "proc-macro2 1.0.28", 1717 | "quote 1.0.9", 1718 | "xml-rs", 1719 | ] 1720 | 1721 | [[package]] 1722 | name = "wayland-sys" 1723 | version = "0.28.6" 1724 | source = "registry+https://github.com/rust-lang/crates.io-index" 1725 | checksum = "d841fca9aed7febf9bed2e9796c49bf58d4152ceda8ac949ebe00868d8f0feb8" 1726 | dependencies = [ 1727 | "dlib 0.5.0", 1728 | "lazy_static", 1729 | "pkg-config", 1730 | ] 1731 | 1732 | [[package]] 1733 | name = "wgpu" 1734 | version = "0.4.0" 1735 | source = "registry+https://github.com/rust-lang/crates.io-index" 1736 | checksum = "07e9c1ff587eddd68cdf2a78889c7a2128683161c72c67b94457cf498accaf7b" 1737 | dependencies = [ 1738 | "arrayvec", 1739 | "raw-window-handle", 1740 | "wgpu-native", 1741 | "zerocopy", 1742 | ] 1743 | 1744 | [[package]] 1745 | name = "wgpu-native" 1746 | version = "0.4.3" 1747 | source = "registry+https://github.com/rust-lang/crates.io-index" 1748 | checksum = "26642308af1cc9a28a24c7fc5e5408d9689c8a0c01d7117aa83d5a1ed6e83438" 1749 | dependencies = [ 1750 | "arrayvec", 1751 | "bitflags", 1752 | "copyless", 1753 | "fxhash", 1754 | "gfx-backend-dx11", 1755 | "gfx-backend-dx12", 1756 | "gfx-backend-empty", 1757 | "gfx-backend-metal", 1758 | "gfx-backend-vulkan", 1759 | "gfx-hal", 1760 | "lazy_static", 1761 | "log", 1762 | "parking_lot 0.9.0", 1763 | "raw-window-handle", 1764 | "rendy-descriptor", 1765 | "rendy-memory", 1766 | "smallvec 0.6.14", 1767 | "vec_map", 1768 | ] 1769 | 1770 | [[package]] 1771 | name = "winapi" 1772 | version = "0.3.9" 1773 | source = "registry+https://github.com/rust-lang/crates.io-index" 1774 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1775 | dependencies = [ 1776 | "winapi-i686-pc-windows-gnu", 1777 | "winapi-x86_64-pc-windows-gnu", 1778 | ] 1779 | 1780 | [[package]] 1781 | name = "winapi-i686-pc-windows-gnu" 1782 | version = "0.4.0" 1783 | source = "registry+https://github.com/rust-lang/crates.io-index" 1784 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1785 | 1786 | [[package]] 1787 | name = "winapi-util" 1788 | version = "0.1.5" 1789 | source = "registry+https://github.com/rust-lang/crates.io-index" 1790 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1791 | dependencies = [ 1792 | "winapi", 1793 | ] 1794 | 1795 | [[package]] 1796 | name = "winapi-x86_64-pc-windows-gnu" 1797 | version = "0.4.0" 1798 | source = "registry+https://github.com/rust-lang/crates.io-index" 1799 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1800 | 1801 | [[package]] 1802 | name = "winit" 1803 | version = "0.25.0" 1804 | source = "registry+https://github.com/rust-lang/crates.io-index" 1805 | checksum = "79610794594d5e86be473ef7763f604f2159cbac8c94debd00df8fb41e86c2f8" 1806 | dependencies = [ 1807 | "bitflags", 1808 | "cocoa 0.24.0", 1809 | "core-foundation 0.9.1", 1810 | "core-graphics 0.22.2", 1811 | "core-video-sys", 1812 | "dispatch", 1813 | "instant", 1814 | "lazy_static", 1815 | "libc", 1816 | "log", 1817 | "mio", 1818 | "mio-misc", 1819 | "ndk", 1820 | "ndk-glue", 1821 | "ndk-sys", 1822 | "objc", 1823 | "parking_lot 0.11.1", 1824 | "percent-encoding", 1825 | "raw-window-handle", 1826 | "scopeguard", 1827 | "smithay-client-toolkit", 1828 | "wayland-client", 1829 | "winapi", 1830 | "x11-dl", 1831 | ] 1832 | 1833 | [[package]] 1834 | name = "wio" 1835 | version = "0.2.2" 1836 | source = "registry+https://github.com/rust-lang/crates.io-index" 1837 | checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" 1838 | dependencies = [ 1839 | "winapi", 1840 | ] 1841 | 1842 | [[package]] 1843 | name = "x11" 1844 | version = "2.18.2" 1845 | source = "registry+https://github.com/rust-lang/crates.io-index" 1846 | checksum = "77ecd092546cb16f25783a5451538e73afc8d32e242648d54f4ae5459ba1e773" 1847 | dependencies = [ 1848 | "libc", 1849 | "pkg-config", 1850 | ] 1851 | 1852 | [[package]] 1853 | name = "x11-dl" 1854 | version = "2.18.5" 1855 | source = "registry+https://github.com/rust-lang/crates.io-index" 1856 | checksum = "2bf981e3a5b3301209754218f962052d4d9ee97e478f4d26d4a6eced34c1fef8" 1857 | dependencies = [ 1858 | "lazy_static", 1859 | "libc", 1860 | "maybe-uninit", 1861 | "pkg-config", 1862 | ] 1863 | 1864 | [[package]] 1865 | name = "xcursor" 1866 | version = "0.3.3" 1867 | source = "registry+https://github.com/rust-lang/crates.io-index" 1868 | checksum = "3a9a231574ae78801646617cefd13bfe94be907c0e4fa979cfd8b770aa3c5d08" 1869 | dependencies = [ 1870 | "nom", 1871 | ] 1872 | 1873 | [[package]] 1874 | name = "xdg" 1875 | version = "2.2.0" 1876 | source = "registry+https://github.com/rust-lang/crates.io-index" 1877 | checksum = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" 1878 | 1879 | [[package]] 1880 | name = "xml-rs" 1881 | version = "0.8.4" 1882 | source = "registry+https://github.com/rust-lang/crates.io-index" 1883 | checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" 1884 | 1885 | [[package]] 1886 | name = "zerocopy" 1887 | version = "0.2.8" 1888 | source = "registry+https://github.com/rust-lang/crates.io-index" 1889 | checksum = "992b9b31f80fd4a167f903f879b8ca43d6716cc368ea01df90538baa2dd34056" 1890 | dependencies = [ 1891 | "byteorder", 1892 | "zerocopy-derive", 1893 | ] 1894 | 1895 | [[package]] 1896 | name = "zerocopy-derive" 1897 | version = "0.1.4" 1898 | source = "registry+https://github.com/rust-lang/crates.io-index" 1899 | checksum = "b090467ecd0624026e8a6405d343ac7382592530d54881330b3fc8e400280fa5" 1900 | dependencies = [ 1901 | "proc-macro2 0.4.30", 1902 | "syn 0.15.44", 1903 | "synstructure", 1904 | ] 1905 | --------------------------------------------------------------------------------