Преглед изворни кода

Merge pull request #3195 from dmgolembiowski/master

Any interest in Rust '18 port?
Kim Kulling пре 5 година
родитељ
комит
883f18ebe5
59 измењених фајлова са 467 додато и 0 уклоњено
  1. 6 0
      .gitignore
  2. 6 0
      port/assimp_rs/Cargo.lock
  3. 9 0
      port/assimp_rs/Cargo.toml
  4. 1 0
      port/assimp_rs/src/camera/mod.rs
  5. 0 0
      port/assimp_rs/src/core/mod.rs
  6. 0 0
      port/assimp_rs/src/errors/mod.rs
  7. 0 0
      port/assimp_rs/src/formats/mod.rs
  8. 17 0
      port/assimp_rs/src/lib.rs
  9. 0 0
      port/assimp_rs/src/material/mod.rs
  10. 0 0
      port/assimp_rs/src/postprocess/mod.rs
  11. 0 0
      port/assimp_rs/src/shims/mod.rs
  12. 0 0
      port/assimp_rs/src/socket/mod.rs
  13. 44 0
      port/assimp_rs/src/structs/anim/anim.rs
  14. 6 0
      port/assimp_rs/src/structs/anim/mod.rs
  15. 0 0
      port/assimp_rs/src/structs/blob/blob.rs
  16. 2 0
      port/assimp_rs/src/structs/blob/mod.rs
  17. 0 0
      port/assimp_rs/src/structs/bone/bone.rs
  18. 2 0
      port/assimp_rs/src/structs/bone/mod.rs
  19. 0 0
      port/assimp_rs/src/structs/camera/camera.rs
  20. 2 0
      port/assimp_rs/src/structs/camera/mod.rs
  21. 27 0
      port/assimp_rs/src/structs/color/color.rs
  22. 5 0
      port/assimp_rs/src/structs/color/mod.rs
  23. 0 0
      port/assimp_rs/src/structs/face/face.rs
  24. 2 0
      port/assimp_rs/src/structs/face/mod.rs
  25. 0 0
      port/assimp_rs/src/structs/key/key.rs
  26. 2 0
      port/assimp_rs/src/structs/key/mod.rs
  27. 0 0
      port/assimp_rs/src/structs/light/light.rs
  28. 2 0
      port/assimp_rs/src/structs/light/mod.rs
  29. 0 0
      port/assimp_rs/src/structs/material/material.rs
  30. 2 0
      port/assimp_rs/src/structs/material/mod.rs
  31. 64 0
      port/assimp_rs/src/structs/matrix/matrix.rs
  32. 4 0
      port/assimp_rs/src/structs/matrix/mod.rs
  33. 35 0
      port/assimp_rs/src/structs/memory/memory.rs
  34. 2 0
      port/assimp_rs/src/structs/memory/mod.rs
  35. 0 0
      port/assimp_rs/src/structs/mesh/mesh.rs
  36. 3 0
      port/assimp_rs/src/structs/mesh/mod.rs
  37. 0 0
      port/assimp_rs/src/structs/meta/meta.rs
  38. 2 0
      port/assimp_rs/src/structs/meta/mod.rs
  39. 61 0
      port/assimp_rs/src/structs/mod.rs
  40. 2 0
      port/assimp_rs/src/structs/node/mod.rs
  41. 0 0
      port/assimp_rs/src/structs/node/node.rs
  42. 2 0
      port/assimp_rs/src/structs/plane/mod.rs
  43. 23 0
      port/assimp_rs/src/structs/plane/plane.rs
  44. 3 0
      port/assimp_rs/src/structs/quaternion/mod.rs
  45. 7 0
      port/assimp_rs/src/structs/quaternion/quaternion.rs
  46. 2 0
      port/assimp_rs/src/structs/ray/mod.rs
  47. 0 0
      port/assimp_rs/src/structs/ray/ray.rs
  48. 2 0
      port/assimp_rs/src/structs/scene/mod.rs
  49. 0 0
      port/assimp_rs/src/structs/scene/scene.rs
  50. 3 0
      port/assimp_rs/src/structs/string/mod.rs
  51. 41 0
      port/assimp_rs/src/structs/string/string.rs
  52. 3 0
      port/assimp_rs/src/structs/texture/mod.rs
  53. 19 0
      port/assimp_rs/src/structs/texture/texture.rs
  54. 2 0
      port/assimp_rs/src/structs/transform/mod.rs
  55. 0 0
      port/assimp_rs/src/structs/transform/transform.rs
  56. 2 0
      port/assimp_rs/src/structs/vec/mod.rs
  57. 48 0
      port/assimp_rs/src/structs/vec/vec.rs
  58. 2 0
      port/assimp_rs/src/structs/vertex/mod.rs
  59. 0 0
      port/assimp_rs/src/structs/vertex/vertex.rs

+ 6 - 0
.gitignore

@@ -79,6 +79,12 @@ test/gtest/src/gtest-stamp/Debug/
 tools/assimp_view/assimp_viewer.vcxproj.user
 *.pyc
 
+### Rust ###
+# Generated by Cargo; will have compiled files and executables
+port/assimp_rs/target/
+# Backup files generated by rustfmt
+port/assimp_rs/**/*.rs.bk
+
 # Unix editor backups
 *~
 test/gtest/src/gtest-stamp/gtest-gitinfo.txt

+ 6 - 0
port/assimp_rs/Cargo.lock

@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "assimp_rs"
+version = "0.1.0"
+

+ 9 - 0
port/assimp_rs/Cargo.toml

@@ -0,0 +1,9 @@
+[package]
+name = "assimp_rs"
+version = "0.1.0"
+authors = ["David Golembiowski <[email protected]>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]

+ 1 - 0
port/assimp_rs/src/camera/mod.rs

@@ -0,0 +1 @@
+pub use self::structs::{Camera};

+ 0 - 0
port/assimp_rs/src/core/mod.rs


+ 0 - 0
port/assimp_rs/src/errors/mod.rs


+ 0 - 0
port/assimp_rs/src/formats/mod.rs


+ 17 - 0
port/assimp_rs/src/lib.rs

@@ -0,0 +1,17 @@
+pub mod camera;
+pub mod core;
+pub mod errors;
+pub mod formats;
+pub mod material;
+pub mod postprocess;
+pub mod shims;
+pub mod socket;
+pub mod structs;
+
+#[cfg(test)]
+mod tests {
+    #[test]
+    fn it_works() {
+        assert_eq!(true, true);
+    }
+}

+ 0 - 0
port/assimp_rs/src/material/mod.rs


+ 0 - 0
port/assimp_rs/src/postprocess/mod.rs


+ 0 - 0
port/assimp_rs/src/shims/mod.rs


+ 0 - 0
port/assimp_rs/src/socket/mod.rs


+ 44 - 0
port/assimp_rs/src/structs/anim/anim.rs

@@ -0,0 +1,44 @@
+pub struct Animation<'mA, 'mMA, 'nA> {
+    /* The name of the animation. If the modeling package this data was
+     * exported from does support only a single animation channel, this
+     * name is usually empty (length is zero).
+     */
+    m_name: Option<String>,
+    // Duration of the animation in ticks
+    m_duration: f64,
+    // Ticks per second. Zero (0.000... ticks/second) if not
+    // specified in the imported file
+    m_ticks_per_second: Option<f64>,
+    /* Number of bone animation channels.
+       Each channel affects a single node.
+       */
+    m_num_channels: u64,
+    /* Node animation channels. Each channel
+       affects a single node. 
+       ?? -> The array is m_num_channels in size.
+       (maybe refine to a derivative type of usize?)
+       */
+    m_channels: &'nA NodeAnim,
+    /* Number of mesh animation channels. Each
+       channel affects a single mesh and defines
+       vertex-based animation.
+       */
+    m_num_mesh_channels: u64,
+    /* The mesh animation channels. Each channel
+       affects a single mesh.
+       The array is m_num_mesh_channels in size
+       (maybe refine to a derivative of usize?)
+       */
+    m_mesh_channels: &'mA MeshAnim,
+    /* The number of mesh animation channels. Each channel
+       affects a single mesh and defines some morphing animation.
+       */
+    m_num_morph_mesh_channels: u64,
+    /* The morph mesh animation channels. Each channel affects a single mesh.
+       The array is mNumMorphMeshChannels in size.
+       */
+    m_morph_mesh_channels: &'mMA MeshMorphAnim    
+}
+pub struct NodeAnim {}
+pub struct MeshAnim {}
+pub struct MeshMorphAnim {}

+ 6 - 0
port/assimp_rs/src/structs/anim/mod.rs

@@ -0,0 +1,6 @@
+mod anim;
+pub use self::anim::{
+    Animation,
+    NodeAnim,
+    MeshAnim,
+    MeshMorphAnim};

+ 0 - 0
port/assimp_rs/src/structs/blob/blob.rs


+ 2 - 0
port/assimp_rs/src/structs/blob/mod.rs

@@ -0,0 +1,2 @@
+mod blob;
+

+ 0 - 0
port/assimp_rs/src/structs/bone/bone.rs


+ 2 - 0
port/assimp_rs/src/structs/bone/mod.rs

@@ -0,0 +1,2 @@
+mod bone;
+

+ 0 - 0
port/assimp_rs/src/structs/camera/camera.rs


+ 2 - 0
port/assimp_rs/src/structs/camera/mod.rs

@@ -0,0 +1,2 @@
+mod camera;
+

+ 27 - 0
port/assimp_rs/src/structs/color/color.rs

@@ -0,0 +1,27 @@
+#[derive(Clone, Debug, Copy)]
+struct Color3D {
+    r: f32,
+    g: f32,
+    b: f32
+}
+
+impl Color3D {
+    pub fn new(r_f32: f32, g_f32: f32, b_f32: f32) -> Color3D {
+        Color3D {r: r_f32, g: g_f32, b: b_f32 }
+    }
+}
+
+#[derive(Clone, Debug, Copy)]
+struct Color4D {
+    r: f32,
+    g: f32,
+    b: f32,
+    a: f32
+}
+
+impl Color4D {
+    pub fn new(r_f32: f32, g_f32: f32, b_f32: f32, a_f32: f32) -> Color4D {
+        Color4D {r: r_f32, g: g_f32, b: b_f32, a: a_f32 }
+    }
+}
+

+ 5 - 0
port/assimp_rs/src/structs/color/mod.rs

@@ -0,0 +1,5 @@
+mod color;
+pub use self::color::{
+    Color3D,
+    Color4D
+};

+ 0 - 0
port/assimp_rs/src/structs/face/face.rs


+ 2 - 0
port/assimp_rs/src/structs/face/mod.rs

@@ -0,0 +1,2 @@
+mod face;
+

+ 0 - 0
port/assimp_rs/src/structs/key/key.rs


+ 2 - 0
port/assimp_rs/src/structs/key/mod.rs

@@ -0,0 +1,2 @@
+mod key;
+

+ 0 - 0
port/assimp_rs/src/structs/light/light.rs


+ 2 - 0
port/assimp_rs/src/structs/light/mod.rs

@@ -0,0 +1,2 @@
+mod light;
+

+ 0 - 0
port/assimp_rs/src/structs/material/material.rs


+ 2 - 0
port/assimp_rs/src/structs/material/mod.rs

@@ -0,0 +1,2 @@
+mod material;
+

+ 64 - 0
port/assimp_rs/src/structs/matrix/matrix.rs

@@ -0,0 +1,64 @@
+#[derive(Clone, Debug, Copy)]
+struct Matrix3x3 {
+    a1: f32,
+    a2: f32,
+    a3: f32,
+    b1: f32,
+    b2: f32,
+    b3: f32,
+    c1: f32,
+    c2: f32,
+    c3: f32
+}
+
+#[derive(Clone, Debug, Copy)]
+struct Matrix4x4 {
+    a1: f32,
+    a2: f32,
+    a3: f32,
+    a4: f32,
+    b1: f32,
+    b2: f32,
+    b3: f32,
+    b4: f32,
+    c1: f32,
+    c2: f32,
+    c3: f32,
+    c4: f32,
+    d1: f32,
+    d2: f32,
+    d3: f32,
+    d4: f32
+}
+
+impl Matrix3x3 {
+    pub fn new(
+        a1_f32: f32, a2_f32: f32, a3_f32: f32,
+        b1_f32: f32, b2_f32: f32, b3_f32: f32,
+        c1_f32: f32, c2_f32: f32, c3_f32: f32
+    ) -> Matrix3x3 {
+        Matrix3x3 {
+            a1: a1_f32, a2: a2_f32, a3: a3_f32,
+            b1: b1_f32, b2: b2_f32, b3: b3_f32,
+            c1: c1_f32, c2: c2_f32, c3: c3_f32
+        }
+    }
+}
+
+impl Matrix4x4 {
+    pub fn new(
+        a1_f32: f32, a2_f32: f32, a3_f32: f32, a4_f32: f32,
+        b1_f32: f32, b2_f32: f32, b3_f32: f32, b4_f32: f32,
+        c1_f32: f32, c2_f32: f32, c3_f32: f32, c4_f32: f32,
+        d1_f32: f32, d2_f32: f32, d3_f32: f32, d4_f32: f32
+    ) -> Matrix4x4 {
+        Matrix4x4 {
+            a1: a1_f32, a2: a2_f32, a3: a3_f32, a4: a4_f32,
+            b1: b1_f32, b2: b2_f32, b3: b3_f32, b4: b4_f32,
+            c1: c1_f32, c2: c2_f32, c3: c3_f32, c4: c4_f32,
+            d1: d1_f32, d2: d2_f32, d3: d3_f32, d4: d4_f32 
+        }
+    }
+}
+
+

+ 4 - 0
port/assimp_rs/src/structs/matrix/mod.rs

@@ -0,0 +1,4 @@
+mod matrix;
+pub use self::matrix::{
+    Matrix3x3,
+    Matrix4x4};

+ 35 - 0
port/assimp_rs/src/structs/memory/memory.rs

@@ -0,0 +1,35 @@
+#[derive(Clone, Debug, Copy)]
+struct MemoryInfo {
+    textures: u32,
+    materials: u32,
+    meshes: u32,
+    nodes: u32,
+    animations: u32,
+    cameras: u32,
+    lights: u32,
+    total: u32
+}
+
+impl MemoryInfo {
+    pub fn new(
+            textures_uint: u32,
+            materials_uint: u32,
+            meshes_uint: u32,
+            nodes_uint: u32,
+            animations_uint: u32,
+            cameras_uint: u32,
+            lights_uint: u32,
+            total_uint: u32) -> MemoryInfo {
+        
+        MemoryInfo {
+            textures: textures_uint,
+            materials: materials_uint,
+            meshes: meshes_uint,
+            nodes: nodes_uint,
+            animations: animations_uint,
+            cameras: cameras_uint,
+            lights: lights_uint,
+            total: total_uint
+        }
+    }
+}

+ 2 - 0
port/assimp_rs/src/structs/memory/mod.rs

@@ -0,0 +1,2 @@
+mod memory;
+pub use self::memory::MemoryInfo;

+ 0 - 0
port/assimp_rs/src/structs/mesh/mesh.rs


+ 3 - 0
port/assimp_rs/src/structs/mesh/mod.rs

@@ -0,0 +1,3 @@
+mod mesh;
+
+

+ 0 - 0
port/assimp_rs/src/structs/meta/meta.rs


+ 2 - 0
port/assimp_rs/src/structs/meta/mod.rs

@@ -0,0 +1,2 @@
+mod meta;
+

+ 61 - 0
port/assimp_rs/src/structs/mod.rs

@@ -0,0 +1,61 @@
+mod anim;
+/* Animation
+ * NodeAnim
+ * MeshAnim
+ * MeshMorphAnim
+ */
+mod blob;
+/* ExportDataBlob
+ */
+mod vec;
+/* Vector2d
+ * Vector3d
+ * */
+mod matrix;
+/* Matrix3by3
+ * Matrix4by4
+ */
+mod camera;
+/* Camera */
+mod color;
+/* Color3d
+ * Color4d
+ */
+mod key;
+/* MeshKey
+ * MeshMorphKey
+ * QuatKey
+ * VectorKey
+ */
+mod texel;
+mod plane;
+mod string;
+/* String
+ */
+mod material;
+/* Material
+ * MaterialPropery
+ * MaterialPropertyString
+ */
+mod mem;
+mod quaternion;
+mod face;
+mod vertex_weight;
+mod mesh;
+/* Mesh
+ */
+mod meta;
+/* Metadata
+ * MetadataEntry
+ */
+mod node;
+/* Node
+ * */
+mod light;
+mod texture;
+mod ray;
+mod transform;
+/* UVTransform */
+mod bone;
+mod scene;
+/* Scene */

+ 2 - 0
port/assimp_rs/src/structs/node/mod.rs

@@ -0,0 +1,2 @@
+mod node;
+

+ 0 - 0
port/assimp_rs/src/structs/node/node.rs


+ 2 - 0
port/assimp_rs/src/structs/plane/mod.rs

@@ -0,0 +1,2 @@
+mod plane;
+

+ 23 - 0
port/assimp_rs/src/structs/plane/plane.rs

@@ -0,0 +1,23 @@
+#[derive(Clone, Debug, Copy)]
+struct Plane {
+    a: f32,
+    b: f32,
+    c: f32,
+    d: f32
+}
+
+impl Plane {
+    pub fn new(
+        a_f32: f32,
+        b_f32: f32,
+        c_f32: f32,
+        d_f32: f32
+    ) -> Plane {
+        Plane {
+            a: a_f32,
+            b: b_f32,
+            c: b_f32,
+            d: d_f32
+        }
+    }
+}

+ 3 - 0
port/assimp_rs/src/structs/quaternion/mod.rs

@@ -0,0 +1,3 @@
+mod quaternion;
+
+pub use self::quaternion::Quaternion;

+ 7 - 0
port/assimp_rs/src/structs/quaternion/quaternion.rs

@@ -0,0 +1,7 @@
+use crate::vec;
+
+#[derive(Clone, Debug, Copy)]
+pub struct Quaternion {
+    _coordinates: vec::Vector4d
+
+}

+ 2 - 0
port/assimp_rs/src/structs/ray/mod.rs

@@ -0,0 +1,2 @@
+mod ray;
+

+ 0 - 0
port/assimp_rs/src/structs/ray/ray.rs


+ 2 - 0
port/assimp_rs/src/structs/scene/mod.rs

@@ -0,0 +1,2 @@
+mod scene;
+

+ 0 - 0
port/assimp_rs/src/structs/scene/scene.rs


+ 3 - 0
port/assimp_rs/src/structs/string/mod.rs

@@ -0,0 +1,3 @@
+mod string;
+pub use self::string::MAXLEN;
+pub use self::string::Str;

+ 41 - 0
port/assimp_rs/src/structs/string/string.rs

@@ -0,0 +1,41 @@
+pub const MAXLEN: usize = 1024;
+
+/// Want to consider replacing `Vec<char>`
+/// with a comparable definition at 
+/// https://doc.rust-lang.org/src/alloc/string.rs.html#415-417
+#[derive(Clone, Debug)]
+struct Str {
+    length: usize,
+    data: Vec<char>
+}
+
+impl Str {
+    pub fn new(len_u32: usize, data_string: String) -> Str {
+        Str {
+            length: len_u32,
+            data: data_string.chars().collect()
+        }
+    }
+}
+
+/// MaterialPropertyStr
+/// The size of length is truncated to 4 bytes on a 64-bit platform when used as a 
+/// material property (see MaterialSystem.cpp, as aiMaterial::AddProperty() ).
+#[derive(Clone, Debug)]
+struct MaterialPropertyStr {
+    length: usize,
+    data: Vec<char>
+}
+
+
+impl MaterialPropertyStr {
+    pub fn new(len_u32: usize, data_string: String) -> MaterialPropertyStr {
+        MaterialPropertyStr {
+            length: len_u32,
+            data: data_string.chars().collect()
+        }
+    }
+}
+
+   
+

+ 3 - 0
port/assimp_rs/src/structs/texture/mod.rs

@@ -0,0 +1,3 @@
+mod texture;
+pub use self::texture::Texel;
+

+ 19 - 0
port/assimp_rs/src/structs/texture/texture.rs

@@ -0,0 +1,19 @@
+#[derive(Clone, Debug, Copy)]
+struct Texel {
+    b: u32,
+    g: u32,
+    r: u32,
+    a: u32
+}
+
+impl Texel {
+    pub fn new(b_u32: u32, g_u32: u32,
+               r_u32: u32, a_u32: u32) -> Texel {
+        Texel {
+            b: b_u32,
+            g: g_u32,
+            r: r_u32,
+            a: a_u32
+        }
+    }
+}

+ 2 - 0
port/assimp_rs/src/structs/transform/mod.rs

@@ -0,0 +1,2 @@
+mod transform;
+

+ 0 - 0
port/assimp_rs/src/structs/transform/transform.rs


+ 2 - 0
port/assimp_rs/src/structs/vec/mod.rs

@@ -0,0 +1,2 @@
+mod vec;
+

+ 48 - 0
port/assimp_rs/src/structs/vec/vec.rs

@@ -0,0 +1,48 @@
+struct Vector2d {
+    x: f32,
+    y: f32
+}
+
+struct Vector3d {
+    x: f32,
+    y: f32,
+    z: f32
+}
+
+struct Vector4d {
+    x: f32,
+    y: f32,
+    z: f32,
+    w: f32
+}
+
+impl Vector2d {
+    pub fn new(x_f32: f32, y_f32: f32) -> Vector2d {
+        Vector2d {
+            x: x_f32,
+            y: y_f32
+        }
+    }
+}
+
+impl Vector3d {
+    pub fn new(x_f32: f32, y_f32: f32, z_f32: f32) -> Vector3d {
+        Vector3d {
+            x: x_f32,
+            y: y_f32,
+            z: z_f32
+        }
+    }
+}
+
+impl Vector4d {
+    pub fn new(x_f32: f32, y_f32: f32, z_f32: f32, w_f32: f32) -> Vector4d {
+        Vector4d {
+            x: x_f32,
+            y: y_f32,
+            z: z_f32,
+            w: w_f32
+        }
+    }
+}
+

+ 2 - 0
port/assimp_rs/src/structs/vertex/mod.rs

@@ -0,0 +1,2 @@
+mod vertex;
+// pub use self::vertex::

+ 0 - 0
port/assimp_rs/src/structs/vertex/vertex.rs