Implement quaternion and matrix geometry

This commit is contained in:
2026-08-08 22:54:07 +00:00
parent 3068e5ee9e
commit 66997128e7
15 changed files with 1881 additions and 859 deletions

7
Cargo.lock generated
View File

@@ -213,6 +213,7 @@ version = "0.0.1"
dependencies = [
"getrandom",
"md-5",
"stats_alloc",
"uuid",
]
@@ -301,6 +302,12 @@ version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
[[package]]
name = "stats_alloc"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c0e04424e733e69714ca1bbb9204c1a57f09f5493439520f9f68c132ad25eec"
[[package]]
name = "syn"
version = "2.0.119"

View File

@@ -54,10 +54,15 @@ Running `cargo test --workspace` is intentionally red during the shim stage.
Milestone 04 implementation has begun. `libremetaverse-types` now provides
native UUID, incremental CRC-32, little-endian floating-point byte helpers,
Vector2/Vector3/Vector3d/Vector4 arithmetic and serialization, Color4 color
conversion, and Ray storage. UUID protocol bytes use explicit network order
while `compat::Guid` conversions preserve the mixed-endian .NET byte-array
layout. Vector and color byte encodings are explicitly little-endian and do not
depend on host architecture. The remaining Types surfaces stay visibly
failure-only until their owning milestone issues are completed.
conversion, Ray storage, Quaternion rotation/interpolation/serialization, and
Matrix4 construction, transforms, inversion, and decomposition. UUID protocol
bytes use explicit network order while `compat::Guid` conversions preserve the
mixed-endian .NET byte-array layout. Vector, color, and normalized quaternion
byte encodings are explicitly little-endian and do not depend on host
architecture. Matrix4 preserves LibreMetaverse's row-major storage, row-vector
transform direction, and translation in the fourth row; quaternion components
are stored as `(x, y, z, w)` and products use the reference Hamilton-product
direction. The remaining Types surfaces stay visibly failure-only until their
owning milestone issues are completed.
The controlled audit aggregates every expected failure by standardized C#
member ID and rejects unrelated fixture, assertion, compile, or symbol errors.

View File

@@ -24290,7 +24290,7 @@ M:LibreMetaverse.Quaternion.Normalize(LibreMetaverse.Quaternion) method LibreMet
M:LibreMetaverse.Quaternion.Parse(System.String) method LibreMetaverse.Quaternion LibreMetaverse.Quaternion.Parse(System.String val) libremetaverse-types libremetaverse_types::Quaternion::parse pub fn parse(val: String) -> Result<libremetaverse_types::Quaternion, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Quaternion.Slerp(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion,System.Single) method LibreMetaverse.Quaternion LibreMetaverse.Quaternion.Slerp(LibreMetaverse.Quaternion q1, LibreMetaverse.Quaternion q2, System.Single amount) libremetaverse-types libremetaverse_types::Quaternion::slerp pub fn slerp(q1: libremetaverse_types::Quaternion, q2: libremetaverse_types::Quaternion, amount: f32) -> Result<libremetaverse_types::Quaternion, crate::Error> owned,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Quaternion.Subtract(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion) method LibreMetaverse.Quaternion LibreMetaverse.Quaternion.Subtract(LibreMetaverse.Quaternion q1, LibreMetaverse.Quaternion q2) libremetaverse-types libremetaverse_types::Quaternion::subtract pub fn subtract(q1: libremetaverse_types::Quaternion, q2: libremetaverse_types::Quaternion) -> Result<libremetaverse_types::Quaternion, crate::Error> owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Quaternion.ToBytes(System.Byte[],System.Int32) method System.Void LibreMetaverse.Quaternion.ToBytes(System.Byte[] dest, System.Int32 pos) libremetaverse-types libremetaverse_types::Quaternion::to_bytes pub fn to_bytes(&self, dest: Vec<u8>, pos: i32) -> Result<(), crate::Error> shared_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Quaternion.ToBytes(System.Byte[],System.Int32) method System.Void LibreMetaverse.Quaternion.ToBytes(System.Byte[] dest, System.Int32 pos) libremetaverse-types libremetaverse_types::Quaternion::to_bytes pub fn to_bytes(&self, dest: &mut [u8], pos: i32) -> Result<(), crate::Error> shared_self,mutable_borrow,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Quaternion.ToEulerVector method LibreMetaverse.Vector3 LibreMetaverse.Quaternion.ToEulerVector() libremetaverse-types libremetaverse_types::Quaternion::to_euler_vector pub fn to_euler_vector(&self) -> Result<libremetaverse_types::Vector3, crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Quaternion.ToRawString method System.String LibreMetaverse.Quaternion.ToRawString() libremetaverse-types libremetaverse_types::Quaternion::to_raw_string pub fn to_raw_string(&self) -> Result<String, crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Quaternion.ToString method System.String LibreMetaverse.Quaternion.ToString() libremetaverse-types libremetaverse_types::Quaternion::to_string pub fn to_string(&self) -> String shared_self sync infallible_placeholder direct_snake_case method mapped
Can't render this file because it is too large.

View File

@@ -13,7 +13,7 @@ Generated by `python3 tools/generate_api_shims.py`; do not edit by hand.
| `LibreMetaverse.Rendering.MeshFoundry` | 1 | 14 | callable failure-only shim |
| `LibreMetaverse.Rendering.Simple` | 1 | 6 | callable failure-only shim |
| `LibreMetaverse.StructuredData` | 16 | 295 | callable failure-only shim |
| `LibreMetaverse.Types` | 45 | 942 | native implementation: 8 types / 300 members; remaining surface is callable failure-only shims |
| `LibreMetaverse.Types` | 45 | 942 | native implementation: 10 types / 419 members; remaining surface is callable failure-only shims |
| `LibreMetaverse.Utilities` | 3 | 13 | callable failure-only shim |
| `LibreMetaverse.Voice.Vivox` | 64 | 531 | callable failure-only shim |
| `LibreMetaverse.Voice.WebRTC` | 12 | 210 | callable failure-only shim |

View File

@@ -14,3 +14,10 @@ workspace = true
getrandom = "0.4"
md-5 = "0.10"
uuid = { version = "1.18", features = ["v4"] }
[dev-dependencies]
stats_alloc = "0.1.10"
[[bench]]
name = "geometry"
harness = false

View File

@@ -0,0 +1,65 @@
use std::alloc::System;
use std::hint::black_box;
use std::time::Instant;
use libremetaverse_types::{Matrix4, Quaternion, Vector3};
use stats_alloc::{INSTRUMENTED_SYSTEM, Region, StatsAlloc};
#[global_allocator]
static ALLOCATOR: &StatsAlloc<System> = &INSTRUMENTED_SYSTEM;
fn main() {
const ITERATIONS: usize = 250_000;
let rotation = Quaternion::create_from_eulers_with_single_single_single(0.25, 0.5, 0.75)
.expect("valid benchmark rotation");
let matrix = Matrix4::mul_with_matrix4_matrix4(
Matrix4::create_scale(Vector3 {
x: 2.0,
y: 3.0,
z: 4.0,
})
.expect("valid benchmark scale"),
Matrix4::create_translation(Vector3 {
x: 10.0,
y: 20.0,
z: 30.0,
})
.expect("valid benchmark translation"),
);
// Warm up runtime and formatting paths before entering the measured region.
black_box(Matrix4::transform(matrix, rotation).expect("matrix transform"));
black_box(
Quaternion::slerp(Quaternion::identity(), rotation, 0.5).expect("quaternion interpolation"),
);
let allocation_region = Region::new(ALLOCATOR);
let started = Instant::now();
let mut transformed = matrix;
let mut interpolated = Quaternion::identity();
for index in 0..ITERATIONS {
let amount = f32::from(u8::try_from(index & 255).expect("masked benchmark index")) / 255.0;
transformed = Matrix4::transform(black_box(transformed), black_box(rotation))
.expect("matrix transform");
interpolated = Quaternion::slerp(
black_box(interpolated),
black_box(rotation),
black_box(amount),
)
.expect("quaternion interpolation");
}
let elapsed = started.elapsed();
let allocation_stats = allocation_region.change();
black_box((transformed, interpolated));
println!(
"geometry hot paths: {ITERATIONS} iterations in {elapsed:?}, {} allocations, {} reallocations",
allocation_stats.allocations, allocation_stats.reallocations
);
assert_eq!(
(allocation_stats.allocations, allocation_stats.reallocations),
(0, 0),
"matrix transforms and quaternion interpolation must remain allocation-free"
);
}

View File

@@ -23,6 +23,8 @@ impl<T: std::io::Read + std::io::Write> ReadWrite for T {}
#[derive(Clone, Debug)]
pub enum Object {
Color4(crate::Color4),
Matrix4(crate::Matrix4),
Quaternion(crate::Quaternion),
String(String),
UUID(crate::UUID),
Vector2(crate::Vector2),
@@ -35,6 +37,8 @@ impl PartialEq for Object {
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(Self::Color4(lhs), Self::Color4(rhs)) => crate::Color4::eq(*lhs, *rhs),
(Self::Matrix4(lhs), Self::Matrix4(rhs)) => crate::Matrix4::eq(*lhs, *rhs),
(Self::Quaternion(lhs), Self::Quaternion(rhs)) => crate::Quaternion::eq(*lhs, *rhs),
(Self::String(lhs), Self::String(rhs)) => lhs == rhs,
(Self::UUID(lhs), Self::UUID(rhs)) => lhs == rhs,
(Self::Vector2(lhs), Self::Vector2(rhs)) => crate::Vector2::eq(*lhs, *rhs),
@@ -53,6 +57,8 @@ impl std::hash::Hash for Object {
std::mem::discriminant(self).hash(state);
match self {
Self::Color4(value) => value.get_hash_code().hash(state),
Self::Matrix4(value) => value.get_hash_code().hash(state),
Self::Quaternion(value) => value.get_hash_code().hash(state),
Self::String(value) => value.hash(state),
Self::UUID(value) => value.hash(state),
Self::Vector2(value) => value.get_hash_code().hash(state),
@@ -80,6 +86,16 @@ impl From<crate::Color4> for Object {
Self::Color4(value)
}
}
impl From<crate::Matrix4> for Object {
fn from(value: crate::Matrix4) -> Self {
Self::Matrix4(value)
}
}
impl From<crate::Quaternion> for Object {
fn from(value: crate::Quaternion) -> Self {
Self::Quaternion(value)
}
}
impl From<crate::Vector2> for Object {
fn from(value: crate::Vector2) -> Self {
Self::Vector2(value)

View File

@@ -1026,452 +1026,77 @@ pub enum Material {
}
/// C# type: `T:LibreMetaverse.Matrix4`.
#[derive(Clone, Copy, Debug)]
pub struct Matrix4 {
/// C# member: `F:LibreMetaverse.Matrix4.M11`.
pub m11: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M12`.
pub m12: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M13`.
pub m13: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M14`.
pub m14: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M21`.
pub m21: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M22`.
pub m22: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M23`.
pub m23: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M24`.
pub m24: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M31`.
pub m31: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M32`.
pub m32: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M33`.
pub m33: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M34`.
pub m34: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M41`.
pub m41: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M42`.
pub m42: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M43`.
pub m43: f32,
/// C# member: `F:LibreMetaverse.Matrix4.M44`.
pub m44: f32,
}
impl Matrix4 {
/// C# member: `F:LibreMetaverse.Matrix4.Identity`.
pub fn identity() -> libremetaverse_types::Matrix4 {
libremetaverse_types::unimplemented_api!("F:LibreMetaverse.Matrix4.Identity")
}
/// C# member: `F:LibreMetaverse.Matrix4.Zero`.
pub fn zero() -> libremetaverse_types::Matrix4 {
libremetaverse_types::unimplemented_api!("F:LibreMetaverse.Matrix4.Zero")
}
/// C# member: `M:LibreMetaverse.Matrix4.#ctor(LibreMetaverse.Matrix4)`.
pub fn new_with_matrix4(m: libremetaverse_types::Matrix4) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.#ctor(LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.#ctor(System.Single,System.Single,System.Single)`.
pub fn new_with_single_single_single(
roll: f32,
pitch: f32,
yaw: f32,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.#ctor(System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)`.
pub fn new_with_single_single_single_single_single_single_single_single_single_single_single_single_single_single_single_single(
m11: f32,
m12: f32,
m13: f32,
m14: f32,
m21: f32,
m22: f32,
m23: f32,
m24: f32,
m31: f32,
m32: f32,
m33: f32,
m34: f32,
m41: f32,
m42: f32,
m43: f32,
m44: f32,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Add(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
pub fn add_with_matrix4_matrix4(
matrix1: libremetaverse_types::Matrix4,
matrix2: libremetaverse_types::Matrix4,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Add(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Adjoint(LibreMetaverse.Matrix4)`.
pub fn adjoint(
matrix: libremetaverse_types::Matrix4,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Adjoint(LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Adjoint3x3(LibreMetaverse.Matrix4)`.
pub fn adjoint3x3(
matrix: libremetaverse_types::Matrix4,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Adjoint3x3(LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.CreateFromAxisAngle(LibreMetaverse.Vector3,System.Single)`.
pub fn create_from_axis_angle(
axis: libremetaverse_types::Vector3,
angle: f32,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.CreateFromAxisAngle(LibreMetaverse.Vector3,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.CreateFromEulers(System.Single,System.Single,System.Single)`.
pub fn create_from_eulers(
roll: f32,
pitch: f32,
yaw: f32,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.CreateFromEulers(System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.CreateFromQuaternion(LibreMetaverse.Quaternion)`.
pub fn create_from_quaternion(
quaternion: libremetaverse_types::Quaternion,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.CreateFromQuaternion(LibreMetaverse.Quaternion)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.CreateLookAt(LibreMetaverse.Vector3,LibreMetaverse.Vector3,LibreMetaverse.Vector3)`.
pub fn create_look_at(
camera_position: libremetaverse_types::Vector3,
camera_target: libremetaverse_types::Vector3,
camera_up_vector: libremetaverse_types::Vector3,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.CreateLookAt(LibreMetaverse.Vector3,LibreMetaverse.Vector3,LibreMetaverse.Vector3)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.CreateRotationX(System.Single)`.
pub fn create_rotation_x(radians: f32) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.CreateRotationX(System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.CreateRotationY(System.Single)`.
pub fn create_rotation_y(radians: f32) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.CreateRotationY(System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.CreateRotationZ(System.Single)`.
pub fn create_rotation_z(radians: f32) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.CreateRotationZ(System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.CreateScale(LibreMetaverse.Vector3)`.
pub fn create_scale(
scale: libremetaverse_types::Vector3,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.CreateScale(LibreMetaverse.Vector3)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.CreateTranslation(LibreMetaverse.Vector3)`.
pub fn create_translation(
position: libremetaverse_types::Vector3,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.CreateTranslation(LibreMetaverse.Vector3)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.CreateWorld(LibreMetaverse.Vector3,LibreMetaverse.Vector3,LibreMetaverse.Vector3)`.
pub fn create_world(
position: libremetaverse_types::Vector3,
forward: libremetaverse_types::Vector3,
up: libremetaverse_types::Vector3,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.CreateWorld(LibreMetaverse.Vector3,LibreMetaverse.Vector3,LibreMetaverse.Vector3)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Decompose(LibreMetaverse.Vector3@,LibreMetaverse.Quaternion@,LibreMetaverse.Vector3@)`.
pub fn decompose(
&mut self,
scale: &mut libremetaverse_types::Vector3,
rotation: &mut libremetaverse_types::Quaternion,
translation: &mut libremetaverse_types::Vector3,
) -> Result<bool, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Decompose(LibreMetaverse.Vector3@,LibreMetaverse.Quaternion@,LibreMetaverse.Vector3@)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Determinant`.
pub fn determinant(&mut self) -> Result<f32, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Matrix4.Determinant")
}
/// C# member: `M:LibreMetaverse.Matrix4.Determinant3x3`.
pub fn determinant3x3(&mut self) -> Result<f32, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Matrix4.Determinant3x3")
}
/// C# member: `M:LibreMetaverse.Matrix4.Divide(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
pub fn divide_with_matrix4_matrix4(
matrix1: libremetaverse_types::Matrix4,
matrix2: libremetaverse_types::Matrix4,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Divide(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Divide(LibreMetaverse.Matrix4,System.Single)`.
pub fn divide_with_matrix4_single(
matrix1: libremetaverse_types::Matrix4,
divider: f32,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Divide(LibreMetaverse.Matrix4,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Equals(LibreMetaverse.Matrix4)`.
pub fn equals_with_matrix4(&self, other: libremetaverse_types::Matrix4) -> bool {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Matrix4.Equals(LibreMetaverse.Matrix4)"
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Equals(System.Object)`.
pub fn equals_with_object(&self, obj: Option<libremetaverse_types::compat::Object>) -> bool {
libremetaverse_types::unimplemented_api!("M:LibreMetaverse.Matrix4.Equals(System.Object)")
}
/// C# member: `M:LibreMetaverse.Matrix4.GetEulerAngles(System.Single@,System.Single@,System.Single@)`.
pub fn get_euler_angles(
&self,
roll: &mut f32,
pitch: &mut f32,
yaw: &mut f32,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.GetEulerAngles(System.Single@,System.Single@,System.Single@)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.GetHashCode`.
pub fn get_hash_code(&self) -> i32 {
libremetaverse_types::unimplemented_api!("M:LibreMetaverse.Matrix4.GetHashCode")
}
/// C# member: `M:LibreMetaverse.Matrix4.GetQuaternion`.
pub fn get_quaternion(&self) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Matrix4.GetQuaternion")
}
/// C# member: `M:LibreMetaverse.Matrix4.Inverse(LibreMetaverse.Matrix4)`.
pub fn inverse(
matrix: libremetaverse_types::Matrix4,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Inverse(LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Inverse3x3(LibreMetaverse.Matrix4)`.
pub fn inverse3x3(
matrix: libremetaverse_types::Matrix4,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Inverse3x3(LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Lerp(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4,System.Single)`.
pub fn lerp(
matrix1: libremetaverse_types::Matrix4,
matrix2: libremetaverse_types::Matrix4,
amount: f32,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Lerp(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Minor(LibreMetaverse.Matrix4,System.Int32,System.Int32)`.
pub fn minor(
matrix: libremetaverse_types::Matrix4,
row: i32,
col: i32,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Minor(LibreMetaverse.Matrix4,System.Int32,System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Multiply(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
pub fn multiply_with_matrix4_matrix4(
matrix1: libremetaverse_types::Matrix4,
matrix2: libremetaverse_types::Matrix4,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Multiply(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Multiply(LibreMetaverse.Matrix4,System.Single)`.
pub fn multiply_with_matrix4_single(
matrix1: libremetaverse_types::Matrix4,
scale_factor: f32,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Multiply(LibreMetaverse.Matrix4,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Negate(LibreMetaverse.Matrix4)`.
pub fn negate(
matrix: libremetaverse_types::Matrix4,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Negate(LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Subtract(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
pub fn subtract(
matrix1: libremetaverse_types::Matrix4,
matrix2: libremetaverse_types::Matrix4,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Subtract(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.ToString`.
pub fn to_string(&self) -> String {
libremetaverse_types::unimplemented_api!("M:LibreMetaverse.Matrix4.ToString")
}
/// C# member: `M:LibreMetaverse.Matrix4.Trace`.
pub fn trace(&mut self) -> Result<f32, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Matrix4.Trace")
}
/// C# member: `M:LibreMetaverse.Matrix4.Transform(LibreMetaverse.Matrix4,LibreMetaverse.Quaternion)`.
pub fn transform(
value: libremetaverse_types::Matrix4,
rotation: libremetaverse_types::Quaternion,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Transform(LibreMetaverse.Matrix4,LibreMetaverse.Quaternion)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.Transpose(LibreMetaverse.Matrix4)`.
pub fn transpose(
matrix: libremetaverse_types::Matrix4,
) -> Result<libremetaverse_types::Matrix4, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Matrix4.Transpose(LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Matrix4.op_Addition(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
pub fn add_with_matrix4_matrix4_31d5e46d(
left: libremetaverse_types::Matrix4,
right: libremetaverse_types::Matrix4,
) -> libremetaverse_types::Matrix4 {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Matrix4.op_Addition(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)"
)
}
/// C# member: `M:LibreMetaverse.Matrix4.op_Division(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
pub fn div_with_matrix4_matrix4(
left: libremetaverse_types::Matrix4,
right: libremetaverse_types::Matrix4,
) -> libremetaverse_types::Matrix4 {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Matrix4.op_Division(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)"
)
}
/// C# member: `M:LibreMetaverse.Matrix4.op_Division(LibreMetaverse.Matrix4,System.Single)`.
pub fn div_with_matrix4_single(
matrix: libremetaverse_types::Matrix4,
divider: f32,
) -> libremetaverse_types::Matrix4 {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Matrix4.op_Division(LibreMetaverse.Matrix4,System.Single)"
)
}
/// C# member: `M:LibreMetaverse.Matrix4.op_Equality(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
pub fn eq(left: libremetaverse_types::Matrix4, right: libremetaverse_types::Matrix4) -> bool {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Matrix4.op_Equality(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)"
)
}
/// C# member: `M:LibreMetaverse.Matrix4.op_Inequality(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
pub fn ne(left: libremetaverse_types::Matrix4, right: libremetaverse_types::Matrix4) -> bool {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Matrix4.op_Inequality(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)"
)
}
/// C# member: `M:LibreMetaverse.Matrix4.op_Multiply(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
pub fn mul_with_matrix4_matrix4(
left: libremetaverse_types::Matrix4,
right: libremetaverse_types::Matrix4,
) -> libremetaverse_types::Matrix4 {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Matrix4.op_Multiply(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)"
)
}
/// C# member: `M:LibreMetaverse.Matrix4.op_Multiply(LibreMetaverse.Matrix4,System.Single)`.
pub fn mul_with_matrix4_single(
left: libremetaverse_types::Matrix4,
scalar: f32,
) -> libremetaverse_types::Matrix4 {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Matrix4.op_Multiply(LibreMetaverse.Matrix4,System.Single)"
)
}
/// C# member: `M:LibreMetaverse.Matrix4.op_Subtraction(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
pub fn sub(
left: libremetaverse_types::Matrix4,
right: libremetaverse_types::Matrix4,
) -> libremetaverse_types::Matrix4 {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Matrix4.op_Subtraction(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)"
)
}
/// C# member: `M:LibreMetaverse.Matrix4.op_UnaryNegation(LibreMetaverse.Matrix4)`.
pub fn neg(matrix: libremetaverse_types::Matrix4) -> libremetaverse_types::Matrix4 {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Matrix4.op_UnaryNegation(LibreMetaverse.Matrix4)"
)
}
/// C# member: `P:LibreMetaverse.Matrix4.AtAxis`.
pub fn at_axis(&self) -> libremetaverse_types::Vector3 {
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Matrix4.AtAxis")
}
/// C# member: `P:LibreMetaverse.Matrix4.Item(System.Int32)`.
pub fn item_with_int32(&self, row: i32) -> libremetaverse_types::Vector4 {
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Matrix4.Item(System.Int32)")
}
/// C# member: `P:LibreMetaverse.Matrix4.Item(System.Int32,System.Int32)`.
pub fn item_with_int32_int32(&self, row: i32, column: i32) -> f32 {
libremetaverse_types::unimplemented_api!(
"P:LibreMetaverse.Matrix4.Item(System.Int32,System.Int32)"
)
}
/// C# member: `P:LibreMetaverse.Matrix4.LeftAxis`.
pub fn left_axis(&self) -> libremetaverse_types::Vector3 {
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Matrix4.LeftAxis")
}
/// C# member: `P:LibreMetaverse.Matrix4.UpAxis`.
pub fn up_axis(&self) -> libremetaverse_types::Vector3 {
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.Matrix4.UpAxis")
}
}
/// C# member: `F:LibreMetaverse.Matrix4.Identity`.
/// C# member: `F:LibreMetaverse.Matrix4.M11`.
/// C# member: `F:LibreMetaverse.Matrix4.M12`.
/// C# member: `F:LibreMetaverse.Matrix4.M13`.
/// C# member: `F:LibreMetaverse.Matrix4.M14`.
/// C# member: `F:LibreMetaverse.Matrix4.M21`.
/// C# member: `F:LibreMetaverse.Matrix4.M22`.
/// C# member: `F:LibreMetaverse.Matrix4.M23`.
/// C# member: `F:LibreMetaverse.Matrix4.M24`.
/// C# member: `F:LibreMetaverse.Matrix4.M31`.
/// C# member: `F:LibreMetaverse.Matrix4.M32`.
/// C# member: `F:LibreMetaverse.Matrix4.M33`.
/// C# member: `F:LibreMetaverse.Matrix4.M34`.
/// C# member: `F:LibreMetaverse.Matrix4.M41`.
/// C# member: `F:LibreMetaverse.Matrix4.M42`.
/// C# member: `F:LibreMetaverse.Matrix4.M43`.
/// C# member: `F:LibreMetaverse.Matrix4.M44`.
/// C# member: `F:LibreMetaverse.Matrix4.Zero`.
/// C# member: `M:LibreMetaverse.Matrix4.#ctor(LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.#ctor(System.Single,System.Single,System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.Add(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.Adjoint(LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.Adjoint3x3(LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.CreateFromAxisAngle(LibreMetaverse.Vector3,System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.CreateFromEulers(System.Single,System.Single,System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.CreateFromQuaternion(LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Matrix4.CreateLookAt(LibreMetaverse.Vector3,LibreMetaverse.Vector3,LibreMetaverse.Vector3)`.
/// C# member: `M:LibreMetaverse.Matrix4.CreateRotationX(System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.CreateRotationY(System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.CreateRotationZ(System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.CreateScale(LibreMetaverse.Vector3)`.
/// C# member: `M:LibreMetaverse.Matrix4.CreateTranslation(LibreMetaverse.Vector3)`.
/// C# member: `M:LibreMetaverse.Matrix4.CreateWorld(LibreMetaverse.Vector3,LibreMetaverse.Vector3,LibreMetaverse.Vector3)`.
/// C# member: `M:LibreMetaverse.Matrix4.Decompose(LibreMetaverse.Vector3@,LibreMetaverse.Quaternion@,LibreMetaverse.Vector3@)`.
/// C# member: `M:LibreMetaverse.Matrix4.Determinant`.
/// C# member: `M:LibreMetaverse.Matrix4.Determinant3x3`.
/// C# member: `M:LibreMetaverse.Matrix4.Divide(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.Divide(LibreMetaverse.Matrix4,System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.Equals(LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.Equals(System.Object)`.
/// C# member: `M:LibreMetaverse.Matrix4.GetEulerAngles(System.Single@,System.Single@,System.Single@)`.
/// C# member: `M:LibreMetaverse.Matrix4.GetHashCode`.
/// C# member: `M:LibreMetaverse.Matrix4.GetQuaternion`.
/// C# member: `M:LibreMetaverse.Matrix4.Inverse(LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.Inverse3x3(LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.Lerp(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4,System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.Minor(LibreMetaverse.Matrix4,System.Int32,System.Int32)`.
/// C# member: `M:LibreMetaverse.Matrix4.Multiply(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.Multiply(LibreMetaverse.Matrix4,System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.Negate(LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.Subtract(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.ToString`.
/// C# member: `M:LibreMetaverse.Matrix4.Trace`.
/// C# member: `M:LibreMetaverse.Matrix4.Transform(LibreMetaverse.Matrix4,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Matrix4.Transpose(LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.op_Addition(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.op_Division(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.op_Division(LibreMetaverse.Matrix4,System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.op_Equality(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.op_Inequality(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.op_Multiply(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.op_Multiply(LibreMetaverse.Matrix4,System.Single)`.
/// C# member: `M:LibreMetaverse.Matrix4.op_Subtraction(LibreMetaverse.Matrix4,LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Matrix4.op_UnaryNegation(LibreMetaverse.Matrix4)`.
/// C# member: `P:LibreMetaverse.Matrix4.AtAxis`.
/// C# member: `P:LibreMetaverse.Matrix4.Item(System.Int32)`.
/// C# member: `P:LibreMetaverse.Matrix4.Item(System.Int32,System.Int32)`.
/// C# member: `P:LibreMetaverse.Matrix4.LeftAxis`.
/// C# member: `P:LibreMetaverse.Matrix4.UpAxis`.
pub use crate::geometry::Matrix4;
/// C# type: `T:LibreMetaverse.MruRemovalStrategy`1`.
pub struct MruRemovalStrategy<TKey> {
@@ -1974,361 +1599,56 @@ pub enum ProfileCurve {
}
/// C# type: `T:LibreMetaverse.Quaternion`.
#[derive(Clone, Copy, Debug)]
pub struct Quaternion {
/// C# member: `F:LibreMetaverse.Quaternion.W`.
pub w: f32,
/// C# member: `F:LibreMetaverse.Quaternion.X`.
pub x: f32,
/// C# member: `F:LibreMetaverse.Quaternion.Y`.
pub y: f32,
/// C# member: `F:LibreMetaverse.Quaternion.Z`.
pub z: f32,
}
impl Quaternion {
/// C# member: `F:LibreMetaverse.Quaternion.Identity`.
pub fn identity() -> libremetaverse_types::Quaternion {
libremetaverse_types::unimplemented_api!("F:LibreMetaverse.Quaternion.Identity")
}
/// C# member: `M:LibreMetaverse.Quaternion.#ctor(LibreMetaverse.Vector3,System.Single)`.
pub fn new_with_vector3_single(
vector_part: libremetaverse_types::Vector3,
scalar_part: f32,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.#ctor(LibreMetaverse.Vector3,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.#ctor(System.Byte[],System.Int32,System.Boolean)`.
pub fn new_with_bytes_int32_boolean(
byte_array: Vec<u8>,
pos: i32,
normalized: bool,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.#ctor(System.Byte[],System.Int32,System.Boolean)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.#ctor(System.Single,System.Single,System.Single)`.
pub fn new_with_single_single_single(x: f32, y: f32, z: f32) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.#ctor(System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.#ctor(System.Single,System.Single,System.Single,System.Single)`.
pub fn new_with_single_single_single_single(
x: f32,
y: f32,
z: f32,
w: f32,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.#ctor(System.Single,System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Add(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
pub fn add_with_quaternion_quaternion(
q1: libremetaverse_types::Quaternion,
q2: libremetaverse_types::Quaternion,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.Add(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.ApproxEquals(LibreMetaverse.Quaternion,System.Single)`.
pub fn approx_equals(
&mut self,
quat: libremetaverse_types::Quaternion,
tolerance: f32,
) -> Result<bool, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.ApproxEquals(LibreMetaverse.Quaternion,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Conjugate(LibreMetaverse.Quaternion)`.
pub fn conjugate(
quaternion: libremetaverse_types::Quaternion,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.Conjugate(LibreMetaverse.Quaternion)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.CreateFromAxisAngle(LibreMetaverse.Vector3,System.Single)`.
pub fn create_from_axis_angle_with_vector3_single(
axis: libremetaverse_types::Vector3,
angle: f32,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.CreateFromAxisAngle(LibreMetaverse.Vector3,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.CreateFromAxisAngle(System.Single,System.Single,System.Single,System.Single)`.
pub fn create_from_axis_angle_with_single_single_single_single(
axis_x: f32,
axis_y: f32,
axis_z: f32,
angle: f32,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.CreateFromAxisAngle(System.Single,System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.CreateFromEulers(LibreMetaverse.Vector3)`.
pub fn create_from_eulers_with_vector3(
eulers: libremetaverse_types::Vector3,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.CreateFromEulers(LibreMetaverse.Vector3)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.CreateFromEulers(System.Single,System.Single,System.Single)`.
pub fn create_from_eulers_with_single_single_single(
roll: f32,
pitch: f32,
yaw: f32,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.CreateFromEulers(System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.CreateFromRotationMatrix(LibreMetaverse.Matrix4)`.
pub fn create_from_rotation_matrix(
matrix: libremetaverse_types::Matrix4,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.CreateFromRotationMatrix(LibreMetaverse.Matrix4)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Divide(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
pub fn divide(
q1: libremetaverse_types::Quaternion,
q2: libremetaverse_types::Quaternion,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.Divide(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Dot(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
pub fn dot(
q1: libremetaverse_types::Quaternion,
q2: libremetaverse_types::Quaternion,
) -> Result<f32, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.Dot(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Equals(LibreMetaverse.Quaternion)`.
pub fn equals_with_quaternion(&self, other: libremetaverse_types::Quaternion) -> bool {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Quaternion.Equals(LibreMetaverse.Quaternion)"
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Equals(System.Object)`.
pub fn equals_with_object(&self, obj: Option<libremetaverse_types::compat::Object>) -> bool {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Quaternion.Equals(System.Object)"
)
}
/// C# member: `M:LibreMetaverse.Quaternion.FromBytes(System.Byte[],System.Int32,System.Boolean)`.
pub fn from_bytes(
byte_array: Vec<u8>,
pos: i32,
normalized: bool,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.FromBytes(System.Byte[],System.Int32,System.Boolean)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.GetAxisAngle(LibreMetaverse.Vector3@,System.Single@)`.
pub fn get_axis_angle(
&self,
axis: &mut libremetaverse_types::Vector3,
angle: &mut f32,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.GetAxisAngle(LibreMetaverse.Vector3@,System.Single@)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.GetBytes`.
pub fn get_bytes(&self) -> Result<Vec<u8>, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Quaternion.GetBytes")
}
/// C# member: `M:LibreMetaverse.Quaternion.GetEulerAngles(System.Single@,System.Single@,System.Single@)`.
pub fn get_euler_angles(
&self,
roll: &mut f32,
pitch: &mut f32,
yaw: &mut f32,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.GetEulerAngles(System.Single@,System.Single@,System.Single@)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.GetHashCode`.
pub fn get_hash_code(&self) -> i32 {
libremetaverse_types::unimplemented_api!("M:LibreMetaverse.Quaternion.GetHashCode")
}
/// C# member: `M:LibreMetaverse.Quaternion.Inverse(LibreMetaverse.Quaternion)`.
pub fn inverse(
quaternion: libremetaverse_types::Quaternion,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.Inverse(LibreMetaverse.Quaternion)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Length`.
pub fn length(&mut self) -> Result<f32, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Quaternion.Length")
}
/// C# member: `M:LibreMetaverse.Quaternion.LengthSquared`.
pub fn length_squared(&mut self) -> Result<f32, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Quaternion.LengthSquared")
}
/// C# member: `M:LibreMetaverse.Quaternion.Multiply(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
pub fn multiply_with_quaternion_quaternion(
a: libremetaverse_types::Quaternion,
b: libremetaverse_types::Quaternion,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.Multiply(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Multiply(LibreMetaverse.Quaternion,System.Single)`.
pub fn multiply_with_quaternion_single(
quaternion: libremetaverse_types::Quaternion,
scale_factor: f32,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.Multiply(LibreMetaverse.Quaternion,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Negate(LibreMetaverse.Quaternion)`.
pub fn negate(
quaternion: libremetaverse_types::Quaternion,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.Negate(LibreMetaverse.Quaternion)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Normalize(LibreMetaverse.Quaternion)`.
pub fn normalize(
q: libremetaverse_types::Quaternion,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.Normalize(LibreMetaverse.Quaternion)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Parse(System.String)`.
pub fn parse(val: String) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Quaternion.Parse(System.String)")
}
/// C# member: `M:LibreMetaverse.Quaternion.Slerp(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion,System.Single)`.
pub fn slerp(
q1: libremetaverse_types::Quaternion,
q2: libremetaverse_types::Quaternion,
amount: f32,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.Slerp(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.Subtract(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
pub fn subtract(
q1: libremetaverse_types::Quaternion,
q2: libremetaverse_types::Quaternion,
) -> Result<libremetaverse_types::Quaternion, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.Subtract(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.ToBytes(System.Byte[],System.Int32)`.
pub fn to_bytes(&self, dest: Vec<u8>, pos: i32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Quaternion.ToBytes(System.Byte[],System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.Quaternion.ToEulerVector`.
pub fn to_euler_vector(&self) -> Result<libremetaverse_types::Vector3, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Quaternion.ToEulerVector")
}
/// C# member: `M:LibreMetaverse.Quaternion.ToRawString`.
pub fn to_raw_string(&self) -> Result<String, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Quaternion.ToRawString")
}
/// C# member: `M:LibreMetaverse.Quaternion.ToString`.
pub fn to_string(&self) -> String {
libremetaverse_types::unimplemented_api!("M:LibreMetaverse.Quaternion.ToString")
}
/// C# member: `M:LibreMetaverse.Quaternion.TryParse(System.String,LibreMetaverse.Quaternion@)`.
pub fn try_parse(val: String, result: &mut libremetaverse_types::Quaternion) -> bool {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Quaternion.TryParse(System.String,LibreMetaverse.Quaternion@)"
)
}
/// C# member: `M:LibreMetaverse.Quaternion.op_Addition(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
pub fn add_with_quaternion_quaternion_b0243903(
q1: libremetaverse_types::Quaternion,
q2: libremetaverse_types::Quaternion,
) -> libremetaverse_types::Quaternion {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Quaternion.op_Addition(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)"
)
}
/// C# member: `M:LibreMetaverse.Quaternion.op_Division(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
pub fn div(
q1: libremetaverse_types::Quaternion,
q2: libremetaverse_types::Quaternion,
) -> libremetaverse_types::Quaternion {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Quaternion.op_Division(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)"
)
}
/// C# member: `M:LibreMetaverse.Quaternion.op_Equality(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
pub fn eq(q1: libremetaverse_types::Quaternion, q2: libremetaverse_types::Quaternion) -> bool {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Quaternion.op_Equality(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)"
)
}
/// C# member: `M:LibreMetaverse.Quaternion.op_Inequality(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
pub fn ne(q1: libremetaverse_types::Quaternion, q2: libremetaverse_types::Quaternion) -> bool {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Quaternion.op_Inequality(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)"
)
}
/// C# member: `M:LibreMetaverse.Quaternion.op_Multiply(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
pub fn mul_with_quaternion_quaternion(
a: libremetaverse_types::Quaternion,
b: libremetaverse_types::Quaternion,
) -> libremetaverse_types::Quaternion {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Quaternion.op_Multiply(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)"
)
}
/// C# member: `M:LibreMetaverse.Quaternion.op_Multiply(LibreMetaverse.Quaternion,System.Single)`.
pub fn mul_with_quaternion_single(
q: libremetaverse_types::Quaternion,
scale_factor: f32,
) -> libremetaverse_types::Quaternion {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Quaternion.op_Multiply(LibreMetaverse.Quaternion,System.Single)"
)
}
/// C# member: `M:LibreMetaverse.Quaternion.op_Subtraction(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
pub fn sub(
q1: libremetaverse_types::Quaternion,
q2: libremetaverse_types::Quaternion,
) -> libremetaverse_types::Quaternion {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Quaternion.op_Subtraction(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)"
)
}
/// C# member: `M:LibreMetaverse.Quaternion.op_UnaryNegation(LibreMetaverse.Quaternion)`.
pub fn neg(q: libremetaverse_types::Quaternion) -> libremetaverse_types::Quaternion {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.Quaternion.op_UnaryNegation(LibreMetaverse.Quaternion)"
)
}
}
/// C# member: `F:LibreMetaverse.Quaternion.Identity`.
/// C# member: `F:LibreMetaverse.Quaternion.W`.
/// C# member: `F:LibreMetaverse.Quaternion.X`.
/// C# member: `F:LibreMetaverse.Quaternion.Y`.
/// C# member: `F:LibreMetaverse.Quaternion.Z`.
/// C# member: `M:LibreMetaverse.Quaternion.#ctor(LibreMetaverse.Vector3,System.Single)`.
/// C# member: `M:LibreMetaverse.Quaternion.#ctor(System.Byte[],System.Int32,System.Boolean)`.
/// C# member: `M:LibreMetaverse.Quaternion.#ctor(System.Single,System.Single,System.Single)`.
/// C# member: `M:LibreMetaverse.Quaternion.#ctor(System.Single,System.Single,System.Single,System.Single)`.
/// C# member: `M:LibreMetaverse.Quaternion.Add(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.ApproxEquals(LibreMetaverse.Quaternion,System.Single)`.
/// C# member: `M:LibreMetaverse.Quaternion.Conjugate(LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.CreateFromAxisAngle(LibreMetaverse.Vector3,System.Single)`.
/// C# member: `M:LibreMetaverse.Quaternion.CreateFromAxisAngle(System.Single,System.Single,System.Single,System.Single)`.
/// C# member: `M:LibreMetaverse.Quaternion.CreateFromEulers(LibreMetaverse.Vector3)`.
/// C# member: `M:LibreMetaverse.Quaternion.CreateFromEulers(System.Single,System.Single,System.Single)`.
/// C# member: `M:LibreMetaverse.Quaternion.CreateFromRotationMatrix(LibreMetaverse.Matrix4)`.
/// C# member: `M:LibreMetaverse.Quaternion.Divide(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.Dot(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.Equals(LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.Equals(System.Object)`.
/// C# member: `M:LibreMetaverse.Quaternion.FromBytes(System.Byte[],System.Int32,System.Boolean)`.
/// C# member: `M:LibreMetaverse.Quaternion.GetAxisAngle(LibreMetaverse.Vector3@,System.Single@)`.
/// C# member: `M:LibreMetaverse.Quaternion.GetBytes`.
/// C# member: `M:LibreMetaverse.Quaternion.GetEulerAngles(System.Single@,System.Single@,System.Single@)`.
/// C# member: `M:LibreMetaverse.Quaternion.GetHashCode`.
/// C# member: `M:LibreMetaverse.Quaternion.Inverse(LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.Length`.
/// C# member: `M:LibreMetaverse.Quaternion.LengthSquared`.
/// C# member: `M:LibreMetaverse.Quaternion.Multiply(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.Multiply(LibreMetaverse.Quaternion,System.Single)`.
/// C# member: `M:LibreMetaverse.Quaternion.Negate(LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.Normalize(LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.Parse(System.String)`.
/// C# member: `M:LibreMetaverse.Quaternion.Slerp(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion,System.Single)`.
/// C# member: `M:LibreMetaverse.Quaternion.Subtract(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.ToBytes(System.Byte[],System.Int32)`.
/// C# member: `M:LibreMetaverse.Quaternion.ToEulerVector`.
/// C# member: `M:LibreMetaverse.Quaternion.ToRawString`.
/// C# member: `M:LibreMetaverse.Quaternion.ToString`.
/// C# member: `M:LibreMetaverse.Quaternion.TryParse(System.String,LibreMetaverse.Quaternion@)`.
/// C# member: `M:LibreMetaverse.Quaternion.op_Addition(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.op_Division(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.op_Equality(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.op_Inequality(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.op_Multiply(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.op_Multiply(LibreMetaverse.Quaternion,System.Single)`.
/// C# member: `M:LibreMetaverse.Quaternion.op_Subtraction(LibreMetaverse.Quaternion,LibreMetaverse.Quaternion)`.
/// C# member: `M:LibreMetaverse.Quaternion.op_UnaryNegation(LibreMetaverse.Quaternion)`.
pub use crate::geometry::Quaternion;
/// C# type: `T:LibreMetaverse.Ray`.
/// C# member: `F:LibreMetaverse.Ray.Direction`.

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,7 @@ mod color4;
pub mod compat;
mod crc32;
mod generated;
mod geometry;
mod math_compat;
pub mod shim;
mod uuid;

View File

@@ -103,19 +103,19 @@ Reviewed Rust tests live outside `generated_parity.rs` and carry a `parity-case`
| `LibreMetaverse.Tests/AppearanceTests.cs::AppearanceTests.AvatarAppearanceEventArgs_DecodeVisualParams_EmptyList_ReturnsEmptyDictionary::test` | `AppearanceTests.AvatarAppearanceEventArgs_DecodeVisualParams_EmptyList_ReturnsEmptyDictionary` | `` | `LibreMetaverse.Tests/AppearanceTests.cs:168` | `Appearance` | `` | `tests/compat/tests/appearance_visual_semantics.rs:159 (`appearance_event_args_decode_visual_params_empty_list_returns_empty_dictionary`)` | `translated` | `af99909259d531024895ce7ea325b49927a12daa886a35eab3d52e3f8fc76921` |
| `LibreMetaverse.Tests/AppearanceTests.cs::AppearanceTests.AvatarAppearanceEventArgs_DecodeVisualParams_RoundTrip_DefaultValues::test` | `AppearanceTests.AvatarAppearanceEventArgs_DecodeVisualParams_RoundTrip_DefaultValues` | `` | `LibreMetaverse.Tests/AppearanceTests.cs:176` | `Appearance` | `` | `tests/compat/tests/appearance_visual_semantics.rs:166 (`appearance_event_args_decode_visual_params_round_trip_default_values`)` | `translated` | `0aec57fab35764525195e6c0e08a63ff10a467be684295381731c04e836539b5` |
| `LibreMetaverse.Tests/AppearanceTests.cs::AppearanceTests.AvatarAppearanceEventArgs_DecodeVisualParams_MatchesAvatarDecodeVisualParams::test` | `AppearanceTests.AvatarAppearanceEventArgs_DecodeVisualParams_MatchesAvatarDecodeVisualParams` | `` | `LibreMetaverse.Tests/AppearanceTests.cs:199` | `Appearance` | `` | `tests/compat/tests/appearance_visual_semantics.rs:188 (`appearance_event_args_decode_visual_params_matches_avatar_decode_visual_params`)` | `translated` | `ff87dd3a506027ad248006b3b55d85a18b0810bc5b4e3a72eb81d31ebbe4184a` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseColorFactor_OverrideToDefault_IsNudgedOffDefault::test` | `AssetMaterialOverrideTests.SetBaseColorFactor_OverrideToDefault_IsNudgedOffDefault` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:43` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:117 (`base_color_override_to_default_is_nudged`)` | `translated` | `df553fd4df83e48d4dd74cdd8aa15a737ea3a416bcad802f7110bbfe79928a31` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseColorFactor_NotOverride_LeavesExactDefaultUnchanged::test` | `AssetMaterialOverrideTests.SetBaseColorFactor_NotOverride_LeavesExactDefaultUnchanged` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:52` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:131 (`base_color_non_override_keeps_default`)` | `translated` | `fec94fcfac0f36cc5813ed087a30e04fcc9815bc02072ea3f5dd282b8698a89c` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetMetallicFactor_OverrideToOne_ClampsBelowDefault::test` | `AssetMaterialOverrideTests.SetMetallicFactor_OverrideToOne_ClampsBelowDefault` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:61` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:145 (`metallic_override_to_one_clamps_below_default`)` | `translated` | `7fcee795160428082f6e579881867c7b6c83f31549077fc28a46d18c75c485c9` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetAlphaMode_OverrideToDefaultOpaque_SetsOverrideFlag::test` | `AssetMaterialOverrideTests.SetAlphaMode_OverrideToDefaultOpaque_SetsOverrideFlag` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:71` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:159 (`alpha_mode_override_sets_flag`)` | `translated` | `8af09d12a58083657e27e285802bb3a6a1d1c136397cea53865d964006343715` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetTextureId_OverrideToNull_UsesSentinelUuid::test` | `AssetMaterialOverrideTests.SetTextureId_OverrideToNull_UsesSentinelUuid` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:80` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:169 (`null_texture_override_uses_sentinel`)` | `translated` | `d9ebf410d2a55c3619b99524a571396fb268e5edd41de955cb86e4ec8cc55c78` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_SentinelTexture_ClearsBaseTexture::test` | `AssetMaterialOverrideTests.ApplyOverride_SentinelTexture_ClearsBaseTexture` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:89` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:182 (`sentinel_override_clears_base_texture`)` | `translated` | `17fd8cdb12ed5d1d0aa1b0a05dbcc357f75aa350d5079b066c957da459d9f628` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_UntouchedTexture_LeavesBaseTextureAlone::test` | `AssetMaterialOverrideTests.ApplyOverride_UntouchedTexture_LeavesBaseTextureAlone` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:103` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:203 (`untouched_override_keeps_base_texture`)` | `translated` | `80ec5e369e3682d92ec6996841b15bda38a3ef6edcd36a2fd9893d8c15459348` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_ChangedScalar_ReplacesBaseValue::test` | `AssetMaterialOverrideTests.ApplyOverride_ChangedScalar_ReplacesBaseValue` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:116` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:220 (`changed_scalar_override_replaces_base`)` | `translated` | `4c305c54c4e451932fbd4a4719957f92f38a7f7d28259559b43cb95fcf9250d1` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseMaterial_ResetsFieldsButKeepsTransforms::test` | `AssetMaterialOverrideTests.SetBaseMaterial_ResetsFieldsButKeepsTransforms` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:128` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:232 (`set_base_material_keeps_texture_transforms`)` | `translated` | `39312602e736fd8607a41d9e6b6348bfaf6e659cf3f63100ee15edd20b672306` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_RoundTrip_PreservesOverriddenFields::test` | `AssetMaterialOverrideTests.ToOverrideOsd_RoundTrip_PreservesOverriddenFields` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:142` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:257 (`override_osd_round_trip_preserves_fields`)` | `translated` | `8d542528a14e3b4dcb74ea8a940a44673aada51f98baf8abcdd59a06f36e3cb0` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_UntouchedMaterial_ProducesEmptyMap::test` | `AssetMaterialOverrideTests.ToOverrideOsd_UntouchedMaterial_ProducesEmptyMap` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:161` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:290 (`untouched_material_override_osd_is_empty`)` | `translated` | `c9e29f7ec0e6b28579e0499e3ec89841e01a313a9386ba60257e5e701129b1c2` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_OverrideToDefaultRoughness_StillEncodesField::test` | `AssetMaterialOverrideTests.ToOverrideOsd_OverrideToDefaultRoughness_StillEncodesField` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:170` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:298 (`default_roughness_override_is_encoded`)` | `translated` | `4ea9920c6709bd29858a8da66313fcee5ebebd646743c5d822dd6c9e477bf3b4` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToJson_RoundTrip_PreservesNameAndColor::test` | `AssetMaterialOverrideTests.ToJson_RoundTrip_PreservesNameAndColor` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:184` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:317 (`material_json_round_trip_preserves_name_and_color`)` | `translated` | `d7ae4270d82671a970fc1b6457292860d24481dd84e9fb919ae60fded5f1914e` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseColorFactor_OverrideToDefault_IsNudgedOffDefault::test` | `AssetMaterialOverrideTests.SetBaseColorFactor_OverrideToDefault_IsNudgedOffDefault` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:43` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:118 (`base_color_override_to_default_is_nudged`)` | `translated` | `df553fd4df83e48d4dd74cdd8aa15a737ea3a416bcad802f7110bbfe79928a31` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseColorFactor_NotOverride_LeavesExactDefaultUnchanged::test` | `AssetMaterialOverrideTests.SetBaseColorFactor_NotOverride_LeavesExactDefaultUnchanged` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:52` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:132 (`base_color_non_override_keeps_default`)` | `translated` | `fec94fcfac0f36cc5813ed087a30e04fcc9815bc02072ea3f5dd282b8698a89c` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetMetallicFactor_OverrideToOne_ClampsBelowDefault::test` | `AssetMaterialOverrideTests.SetMetallicFactor_OverrideToOne_ClampsBelowDefault` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:61` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:146 (`metallic_override_to_one_clamps_below_default`)` | `translated` | `7fcee795160428082f6e579881867c7b6c83f31549077fc28a46d18c75c485c9` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetAlphaMode_OverrideToDefaultOpaque_SetsOverrideFlag::test` | `AssetMaterialOverrideTests.SetAlphaMode_OverrideToDefaultOpaque_SetsOverrideFlag` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:71` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:160 (`alpha_mode_override_sets_flag`)` | `translated` | `8af09d12a58083657e27e285802bb3a6a1d1c136397cea53865d964006343715` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetTextureId_OverrideToNull_UsesSentinelUuid::test` | `AssetMaterialOverrideTests.SetTextureId_OverrideToNull_UsesSentinelUuid` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:80` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:170 (`null_texture_override_uses_sentinel`)` | `translated` | `d9ebf410d2a55c3619b99524a571396fb268e5edd41de955cb86e4ec8cc55c78` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_SentinelTexture_ClearsBaseTexture::test` | `AssetMaterialOverrideTests.ApplyOverride_SentinelTexture_ClearsBaseTexture` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:89` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:183 (`sentinel_override_clears_base_texture`)` | `translated` | `17fd8cdb12ed5d1d0aa1b0a05dbcc357f75aa350d5079b066c957da459d9f628` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_UntouchedTexture_LeavesBaseTextureAlone::test` | `AssetMaterialOverrideTests.ApplyOverride_UntouchedTexture_LeavesBaseTextureAlone` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:103` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:204 (`untouched_override_keeps_base_texture`)` | `translated` | `80ec5e369e3682d92ec6996841b15bda38a3ef6edcd36a2fd9893d8c15459348` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_ChangedScalar_ReplacesBaseValue::test` | `AssetMaterialOverrideTests.ApplyOverride_ChangedScalar_ReplacesBaseValue` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:116` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:221 (`changed_scalar_override_replaces_base`)` | `translated` | `4c305c54c4e451932fbd4a4719957f92f38a7f7d28259559b43cb95fcf9250d1` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseMaterial_ResetsFieldsButKeepsTransforms::test` | `AssetMaterialOverrideTests.SetBaseMaterial_ResetsFieldsButKeepsTransforms` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:128` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:233 (`set_base_material_keeps_texture_transforms`)` | `translated` | `39312602e736fd8607a41d9e6b6348bfaf6e659cf3f63100ee15edd20b672306` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_RoundTrip_PreservesOverriddenFields::test` | `AssetMaterialOverrideTests.ToOverrideOsd_RoundTrip_PreservesOverriddenFields` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:142` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:258 (`override_osd_round_trip_preserves_fields`)` | `translated` | `8d542528a14e3b4dcb74ea8a940a44673aada51f98baf8abcdd59a06f36e3cb0` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_UntouchedMaterial_ProducesEmptyMap::test` | `AssetMaterialOverrideTests.ToOverrideOsd_UntouchedMaterial_ProducesEmptyMap` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:161` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:291 (`untouched_material_override_osd_is_empty`)` | `translated` | `c9e29f7ec0e6b28579e0499e3ec89841e01a313a9386ba60257e5e701129b1c2` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_OverrideToDefaultRoughness_StillEncodesField::test` | `AssetMaterialOverrideTests.ToOverrideOsd_OverrideToDefaultRoughness_StillEncodesField` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:170` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:299 (`default_roughness_override_is_encoded`)` | `translated` | `4ea9920c6709bd29858a8da66313fcee5ebebd646743c5d822dd6c9e477bf3b4` |
| `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToJson_RoundTrip_PreservesNameAndColor::test` | `AssetMaterialOverrideTests.ToJson_RoundTrip_PreservesNameAndColor` | `` | `LibreMetaverse.Tests/AssetMaterialOverrideTests.cs:184` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:318 (`material_json_round_trip_preserves_name_and_color`)` | `translated` | `d7ae4270d82671a970fc1b6457292860d24481dd84e9fb919ae60fded5f1914e` |
| `LibreMetaverse.Tests/AvatarManagerTests.cs::AvatarManagerTests.RequestOwnAvatarTextures_WhenNotConnected_DoesNotThrow::test` | `AvatarManagerTests.RequestOwnAvatarTextures_WhenNotConnected_DoesNotThrow` | `` | `LibreMetaverse.Tests/AvatarManagerTests.cs:42` | `Appearance` | `` | `crates/libremetaverse/src/avatar_animesh_semantics.rs:587 (`avatar_manager_request_own_avatar_textures_when_not_connected_does_not_throw`)` | `translated` | `bf3539f68a0adc58c2166289ca1c75f6ff03906f71ffe2fb749f6990404b541a` |
| `LibreMetaverse.Tests/AvatarManagerTests.cs::AvatarManagerTests.UpdateLastReceivedCOFVersion_AcceptsHigherVersion::test` | `AvatarManagerTests.UpdateLastReceivedCOFVersion_AcceptsHigherVersion` | `` | `LibreMetaverse.Tests/AvatarManagerTests.cs:55` | `Appearance` | `` | `crates/libremetaverse/src/avatar_animesh_semantics.rs:597 (`appearance_manager_update_last_received_cof_version_accepts_higher_version`)` | `translated` | `3656364491dcd7a05c868b11ea0d8be48609d10c6054b9696f54cbac10cfe6df` |
| `LibreMetaverse.Tests/AvatarManagerTests.cs::AvatarManagerTests.UpdateLastReceivedCOFVersion_RejectsLowerVersion::test` | `AvatarManagerTests.UpdateLastReceivedCOFVersion_RejectsLowerVersion` | `` | `LibreMetaverse.Tests/AvatarManagerTests.cs:68` | `Appearance` | `` | `crates/libremetaverse/src/avatar_animesh_semantics.rs:612 (`appearance_manager_update_last_received_cof_version_rejects_lower_version`)` | `translated` | `f4a827fcace9d50306a8c375183e056140996d2a39b02e4dd12fc6cc79e5d0f0` |
@@ -246,18 +246,18 @@ Reviewed Rust tests live outside `generated_parity.rs` and carry a `parity-case`
| `LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialTaskInventoryAsync_HappyPath_PostsItemIdAndTaskId::test` | `GLTFMaterialUploadTests.RequestUpdateMaterialTaskInventoryAsync_HappyPath_PostsItemIdAndTaskId` | `` | `LibreMetaverse.Tests/GLTFMaterialUploadTests.cs:92` | `` | `LibreMetaverse.Tests/TestHelpers/FakeGridClient.cs` | `tests/compat/tests/asset_capability_semantics.rs:356 (`material_task_upload_posts_item_and_task_ids`)` | `translated` | `7ac0e7d210b1aefa795e479f4da0d2dd4caae0b3bbe84ca124707c3ae005bbbd` |
| `LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_NoCapability_Throws::test` | `GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_NoCapability_Throws` | `` | `LibreMetaverse.Tests/GLTFMaterialUploadTests.cs:115` | `` | `LibreMetaverse.Tests/TestHelpers/FakeGridClient.cs` | `tests/compat/tests/asset_capability_semantics.rs:384 (`material_agent_upload_without_capability_is_invalid_operation`)` | `translated` | `325269807d778264e571d1518ca9a2ca69a27ba67ad689e580f2636ab595f335` |
| `LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_UploadedJsonRoundTripsMaterial::test` | `GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_UploadedJsonRoundTripsMaterial` | `` | `LibreMetaverse.Tests/GLTFMaterialUploadTests.cs:131` | `` | `LibreMetaverse.Tests/TestHelpers/FakeGridClient.cs` | `tests/compat/tests/asset_capability_semantics.rs:400 (`uploaded_material_json_round_trips`)` | `translated` | `fd059dfc8c9299c3b6583b3b47ba18ae9c92e3ad923f88634019b0ab9f34d401` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesSceneGraph::test` | `GltfDocumentTests.LoadGltf_ParsesSceneGraph` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:122` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:336 (`gltf_parses_scene_graph`)` | `translated` | `e20583d8de31f793d1dc49d1dfde89e1eb8c00186359e7df4184e862ec9ed649` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesMeshAndPrimitive::test` | `GltfDocumentTests.LoadGltf_ParsesMeshAndPrimitive` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:136` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:349 (`gltf_parses_mesh_and_primitive`)` | `translated` | `ef6a76308db1966423c7746f5414f3d0553587efc388bbedb962f38cc122ecaf` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesMaterial::test` | `GltfDocumentTests.LoadGltf_ParsesMaterial` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:152` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:363 (`gltf_parses_material`)` | `translated` | `0147b4d7102c5223f247f69fa4cf3daeb0aa6300ad46ef34d6a17163b694c13e` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetPositions_ReturnsCorrectTriangle::test` | `GltfDocumentTests.GetPositions_ReturnsCorrectTriangle` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:169` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:377 (`gltf_positions_are_correct_triangle`)` | `translated` | `c3d444122ab73794a011d5a5aafb0c2aa030975393f967e871dc88db200f5e96` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetIndices_ReturnsCorrectValues::test` | `GltfDocumentTests.GetIndices_ReturnsCorrectValues` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:184` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:395 (`gltf_indices_are_correct`)` | `translated` | `fa39e87a3dfee7258d9a95907a97cbb107f5add7d6a6f9d9800249bb67e2fc58` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetPositions_EmptyWhenNoAttribute::test` | `GltfDocumentTests.GetPositions_EmptyWhenNoAttribute` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:197` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:405 (`gltf_positions_empty_without_attribute`)` | `translated` | `06c691911ee6933f1884f6540d69afafa1f272acfed827c628580438204d9b4b` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetNormals_EmptyWhenNoAttribute::test` | `GltfDocumentTests.GetNormals_EmptyWhenNoAttribute` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:205` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:419 (`gltf_normals_empty_without_attribute`)` | `translated` | `e04480b0b9e23cb561cc55e744ebd85203c759f98ad69febeeb291919f0d91af` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ToJson_RoundTrip_PreservesSceneGraph::test` | `GltfDocumentTests.ToJson_RoundTrip_PreservesSceneGraph` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:215` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:432 (`gltf_json_round_trip_preserves_scene_graph`)` | `translated` | `41c385b7bde3f8e4f4ad98d4f1f737fc6ccc241c2613526fd745eb35430386b2` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ToGlb_RoundTrip_PreservesGeometry::test` | `GltfDocumentTests.ToGlb_RoundTrip_PreservesGeometry` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:230` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:449 (`glb_round_trip_preserves_geometry`)` | `translated` | `1e97fe2d1492ac195f6a4386329c76ad131ab99a41b8e03216b1bab8b48fae36` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.Load_AutoDetectsGlbVsJson::test` | `GltfDocumentTests.Load_AutoDetectsGlbVsJson` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:252` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:463 (`gltf_load_auto_detects_glb_and_json`)` | `translated` | `6d07930be2302e504ef9ece3fef10f47b855d33ae6c8bff152e82df0beb2a474` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ParseNode_TrsDefaults::test` | `GltfDocumentTests.ParseNode_TrsDefaults` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:268` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:475 (`gltf_node_trs_defaults`)` | `translated` | `0f0fbe116d20276c2aee917b940bded9de277ed0b3e3b659844c5b3532755259` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ParseNode_ExplicitMatrix::test` | `GltfDocumentTests.ParseNode_ExplicitMatrix` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:280` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:495 (`gltf_node_explicit_matrix`)` | `translated` | `197ba2ee3a66cbb7d927acea13ce9dc84e62af8a500d939957749039118755c8` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesSceneGraph::test` | `GltfDocumentTests.LoadGltf_ParsesSceneGraph` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:122` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:337 (`gltf_parses_scene_graph`)` | `translated` | `e20583d8de31f793d1dc49d1dfde89e1eb8c00186359e7df4184e862ec9ed649` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesMeshAndPrimitive::test` | `GltfDocumentTests.LoadGltf_ParsesMeshAndPrimitive` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:136` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:350 (`gltf_parses_mesh_and_primitive`)` | `translated` | `ef6a76308db1966423c7746f5414f3d0553587efc388bbedb962f38cc122ecaf` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesMaterial::test` | `GltfDocumentTests.LoadGltf_ParsesMaterial` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:152` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:364 (`gltf_parses_material`)` | `translated` | `0147b4d7102c5223f247f69fa4cf3daeb0aa6300ad46ef34d6a17163b694c13e` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetPositions_ReturnsCorrectTriangle::test` | `GltfDocumentTests.GetPositions_ReturnsCorrectTriangle` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:169` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:378 (`gltf_positions_are_correct_triangle`)` | `translated` | `c3d444122ab73794a011d5a5aafb0c2aa030975393f967e871dc88db200f5e96` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetIndices_ReturnsCorrectValues::test` | `GltfDocumentTests.GetIndices_ReturnsCorrectValues` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:184` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:396 (`gltf_indices_are_correct`)` | `translated` | `fa39e87a3dfee7258d9a95907a97cbb107f5add7d6a6f9d9800249bb67e2fc58` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetPositions_EmptyWhenNoAttribute::test` | `GltfDocumentTests.GetPositions_EmptyWhenNoAttribute` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:197` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:406 (`gltf_positions_empty_without_attribute`)` | `translated` | `06c691911ee6933f1884f6540d69afafa1f272acfed827c628580438204d9b4b` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetNormals_EmptyWhenNoAttribute::test` | `GltfDocumentTests.GetNormals_EmptyWhenNoAttribute` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:205` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:420 (`gltf_normals_empty_without_attribute`)` | `translated` | `e04480b0b9e23cb561cc55e744ebd85203c759f98ad69febeeb291919f0d91af` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ToJson_RoundTrip_PreservesSceneGraph::test` | `GltfDocumentTests.ToJson_RoundTrip_PreservesSceneGraph` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:215` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:433 (`gltf_json_round_trip_preserves_scene_graph`)` | `translated` | `41c385b7bde3f8e4f4ad98d4f1f737fc6ccc241c2613526fd745eb35430386b2` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ToGlb_RoundTrip_PreservesGeometry::test` | `GltfDocumentTests.ToGlb_RoundTrip_PreservesGeometry` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:230` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:450 (`glb_round_trip_preserves_geometry`)` | `translated` | `1e97fe2d1492ac195f6a4386329c76ad131ab99a41b8e03216b1bab8b48fae36` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.Load_AutoDetectsGlbVsJson::test` | `GltfDocumentTests.Load_AutoDetectsGlbVsJson` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:252` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:464 (`gltf_load_auto_detects_glb_and_json`)` | `translated` | `6d07930be2302e504ef9ece3fef10f47b855d33ae6c8bff152e82df0beb2a474` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ParseNode_TrsDefaults::test` | `GltfDocumentTests.ParseNode_TrsDefaults` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:268` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:476 (`gltf_node_trs_defaults`)` | `translated` | `0f0fbe116d20276c2aee917b940bded9de277ed0b3e3b659844c5b3532755259` |
| `LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ParseNode_ExplicitMatrix::test` | `GltfDocumentTests.ParseNode_ExplicitMatrix` | `` | `LibreMetaverse.Tests/GltfDocumentTests.cs:280` | `` | `` | `tests/compat/tests/asset_document_semantics.rs:496 (`gltf_node_explicit_matrix`)` | `translated` | `197ba2ee3a66cbb7d927acea13ce9dc84e62af8a500d939957749039118755c8` |
| `LibreMetaverse.Tests/GridClientTests.cs::GridClientTests.GetGridRegion::test` | `GridClientTests.GetGridRegion` | `` | `LibreMetaverse.Tests/GridClientTests.cs:90` | `GridClient, RequiresLiveServer` | `` | `tests/compat/tests/network_semantics.rs:345 (`get_grid_region_live`)` | `ignored-live` | `b0b72fc63fe829984167a479b763784c7daae8691399f3f3d2feb824090ad59f` |
| `LibreMetaverse.Tests/HelpersZeroCodingTests.cs::HelpersZeroCodingTests.ZeroDecode_ValidInput_DecodesCorrectly::test` | `HelpersZeroCodingTests.ZeroDecode_ValidInput_DecodesCorrectly` | `` | `LibreMetaverse.Tests/HelpersZeroCodingTests.cs:36` | `Helpers` | `` | `tests/compat/tests/wire_semantics.rs:79 (`zero_decode_valid_input_decodes_correctly`)` | `translated` | `62353da2b1afb7bfdf5142706d15d22086a5e1e8c55f39af3e64686dda4ea071` |
| `LibreMetaverse.Tests/HelpersZeroCodingTests.cs::HelpersZeroCodingTests.ZeroDecode_NullSource_ThrowsArgumentNullException::test` | `HelpersZeroCodingTests.ZeroDecode_NullSource_ThrowsArgumentNullException` | `` | `LibreMetaverse.Tests/HelpersZeroCodingTests.cs:64` | `Helpers` | `` | `tests/compat/tests/wire_semantics.rs:97 (`zero_decode_null_source_throws_argument_null`)` | `translated` | `50ebbd8ea35b87df18cccdea9a26534d5c142228e5b1698cf191b9fd2e9a9957` |

View File

@@ -13,9 +13,11 @@
"allowed_parity_passes": [
"LibreMetaverse.Tests/AppearanceManagerTests.cs::AppearanceManagerTests.BAKED_TEXTURE_COUNT_Is11::test",
"LibreMetaverse.Tests/MarketplaceFolderClassifierTests.cs::MarketplaceFolderClassifierTests.ValidateListing_ValidFlags_AreBitmaskComposable::test",
"LibreMetaverse.Tests/TypeTests.cs::TypeTests.Quaternions::test",
"LibreMetaverse.Tests/TypeTests.cs::TypeTests.TestMatrix::test",
"LibreMetaverse.Tests/TypeTests.cs::TypeTests.UUIDs::test",
"LibreMetaverse.Tests/TypeTests.cs::TypeTests.Vector3ApproxEquals::test",
"LibreMetaverse.Tests/TypeTests.cs::TypeTests.VectorCasting::test"
],
"support_passes": 42
"support_passes": 49
}

View File

@@ -1814,7 +1814,7 @@
"rust_body_sha256": "c039310618f45189cfbbbad45e51b18db16171f4e5d7aba14eee6137b96201d0",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 117,
"rust_line": 118,
"rust_test": "base_color_override_to_default_is_nudged",
"semantic_review": "reviewed"
},
@@ -1833,7 +1833,7 @@
"rust_body_sha256": "dadd13a673274f9c46c4732756401c1343443f31ff0616056e381ed10b6373dc",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 131,
"rust_line": 132,
"rust_test": "base_color_non_override_keeps_default",
"semantic_review": "reviewed"
},
@@ -1852,7 +1852,7 @@
"rust_body_sha256": "b9ad9050bbffbaa6fd60b3c45d141c6b0191bcba4287667e4028d47881abcfe2",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 145,
"rust_line": 146,
"rust_test": "metallic_override_to_one_clamps_below_default",
"semantic_review": "reviewed"
},
@@ -1871,7 +1871,7 @@
"rust_body_sha256": "fb03f033cb63519fd7793810bee920e639c19e00bc3532e08a27ebad4e8fa231",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 159,
"rust_line": 160,
"rust_test": "alpha_mode_override_sets_flag",
"semantic_review": "reviewed"
},
@@ -1890,7 +1890,7 @@
"rust_body_sha256": "6a9ef4111be381b3341cb8e53be5a2a6adabd621875d6c65d1967a8016b26487",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 169,
"rust_line": 170,
"rust_test": "null_texture_override_uses_sentinel",
"semantic_review": "reviewed"
},
@@ -1909,7 +1909,7 @@
"rust_body_sha256": "80df9c92a01fc69c56d092ef960aa4541f3da61553dd7596ddaea075193ba01f",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 182,
"rust_line": 183,
"rust_test": "sentinel_override_clears_base_texture",
"semantic_review": "reviewed"
},
@@ -1928,7 +1928,7 @@
"rust_body_sha256": "ff9dcb6f7b8b10dc102d348cf57914a4cb55e8be010018249f20cc45879abe67",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 203,
"rust_line": 204,
"rust_test": "untouched_override_keeps_base_texture",
"semantic_review": "reviewed"
},
@@ -1947,7 +1947,7 @@
"rust_body_sha256": "80e2719ba1bcf4a5926d56ab3a39f89b92eaf36d0308af99a85de900b77c1f5e",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 220,
"rust_line": 221,
"rust_test": "changed_scalar_override_replaces_base",
"semantic_review": "reviewed"
},
@@ -1966,7 +1966,7 @@
"rust_body_sha256": "45356599a1d9581365323a5d6f8822ae69082200322dd4357b256e5141c055f1",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 232,
"rust_line": 233,
"rust_test": "set_base_material_keeps_texture_transforms",
"semantic_review": "reviewed"
},
@@ -1985,7 +1985,7 @@
"rust_body_sha256": "de5047cdff7424adf0f762d00f77dfa6c94cd6ef3f099e123807b1bdbbd34341",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 257,
"rust_line": 258,
"rust_test": "override_osd_round_trip_preserves_fields",
"semantic_review": "reviewed"
},
@@ -2004,7 +2004,7 @@
"rust_body_sha256": "30aa45a8fff68f73082836c06bd0802eec3d162bba408e6c0dccb9741de92a66",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 290,
"rust_line": 291,
"rust_test": "untouched_material_override_osd_is_empty",
"semantic_review": "reviewed"
},
@@ -2023,7 +2023,7 @@
"rust_body_sha256": "7aa100c1787a91289101ff37c598691ad785e209204aaf0121b29441cbdcda59",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 298,
"rust_line": 299,
"rust_test": "default_roughness_override_is_encoded",
"semantic_review": "reviewed"
},
@@ -2042,7 +2042,7 @@
"rust_body_sha256": "60a805d63479f0e804adad6b9a7d9a8598a61732631d35be4295a732421d9504",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 317,
"rust_line": 318,
"rust_test": "material_json_round_trip_preserves_name_and_color",
"semantic_review": "reviewed"
},
@@ -4636,7 +4636,7 @@
"rust_body_sha256": "2e0a979b27ac05993976138f0ac08be4572fd50cf43d5dd034c41a9f678c0ae2",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 336,
"rust_line": 337,
"rust_test": "gltf_parses_scene_graph",
"semantic_review": "reviewed"
},
@@ -4655,7 +4655,7 @@
"rust_body_sha256": "9d33cc4646ab6692d0d4fd8b3a86c532246103eb531555b9d84bd9ef4b18534a",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 349,
"rust_line": 350,
"rust_test": "gltf_parses_mesh_and_primitive",
"semantic_review": "reviewed"
},
@@ -4674,7 +4674,7 @@
"rust_body_sha256": "8a12d86a3042d1c1f2a365c81825e33b32d3370f556f585c357b3cfab77525b7",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 363,
"rust_line": 364,
"rust_test": "gltf_parses_material",
"semantic_review": "reviewed"
},
@@ -4693,7 +4693,7 @@
"rust_body_sha256": "2fe6ac879e16e27db934670ff1b02ebeab2e4f2c566284f46a8d8ca353369348",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 377,
"rust_line": 378,
"rust_test": "gltf_positions_are_correct_triangle",
"semantic_review": "reviewed"
},
@@ -4712,7 +4712,7 @@
"rust_body_sha256": "e59afeb85c77aabfe07bf62efc6e6ea28158d71f7fad09c3d6bd4c16af8206ef",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 395,
"rust_line": 396,
"rust_test": "gltf_indices_are_correct",
"semantic_review": "reviewed"
},
@@ -4731,7 +4731,7 @@
"rust_body_sha256": "0d6612fd86c2dfee7a1cde2b781cd73e62415092bb34063817dbeca85bea0dda",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 405,
"rust_line": 406,
"rust_test": "gltf_positions_empty_without_attribute",
"semantic_review": "reviewed"
},
@@ -4750,7 +4750,7 @@
"rust_body_sha256": "8c07115698eb8ebed83f68c7f45c203dde1ff58b92cd4a1da10f555b3397424b",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 419,
"rust_line": 420,
"rust_test": "gltf_normals_empty_without_attribute",
"semantic_review": "reviewed"
},
@@ -4769,7 +4769,7 @@
"rust_body_sha256": "4869d0570b83d05570c0c3f626795a1bebb497eedb00a566d0bf63e6a164ea02",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 432,
"rust_line": 433,
"rust_test": "gltf_json_round_trip_preserves_scene_graph",
"semantic_review": "reviewed"
},
@@ -4788,7 +4788,7 @@
"rust_body_sha256": "657d90a0b70805fb9b1bb7fd8b821a2fa64cf68e25793c2fef5369bb7b323d93",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 449,
"rust_line": 450,
"rust_test": "glb_round_trip_preserves_geometry",
"semantic_review": "reviewed"
},
@@ -4807,7 +4807,7 @@
"rust_body_sha256": "0b3b6f016d3b32515045aaa6fc3bf170376bad397a5d705dc2ffc8deb369a0e7",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 463,
"rust_line": 464,
"rust_test": "gltf_load_auto_detects_glb_and_json",
"semantic_review": "reviewed"
},
@@ -4826,7 +4826,7 @@
"rust_body_sha256": "de38ffd7d24d30e90cd78fd8f1f8022aa2ab215f53c44f5cd7f6d346bfcb966c",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 475,
"rust_line": 476,
"rust_test": "gltf_node_trs_defaults",
"semantic_review": "reviewed"
},
@@ -4845,7 +4845,7 @@
"rust_body_sha256": "367ea10e55c9b61d9f536890cbf95f975adf74bf23524cb9ddb78bb6131e1433",
"status": "translated",
"rust_file": "tests/compat/tests/asset_document_semantics.rs",
"rust_line": 495,
"rust_line": 496,
"rust_test": "gltf_node_explicit_matrix",
"semantic_review": "reviewed"
},

View File

@@ -40,6 +40,8 @@ TARGETS = {
NATIVE_TYPES = {
"T:LibreMetaverse.Color4": "crate::color4::Color4",
"T:LibreMetaverse.CRC32": "crate::crc32::CRC32",
"T:LibreMetaverse.Matrix4": "crate::geometry::Matrix4",
"T:LibreMetaverse.Quaternion": "crate::geometry::Quaternion",
"T:LibreMetaverse.Ray": "crate::vectors::Ray",
"T:LibreMetaverse.UUID": "crate::uuid::UUID",
"T:LibreMetaverse.Vector2": "crate::vectors::Vector2",

View File

@@ -221,6 +221,10 @@ MEMBER_SIGNATURE_OVERRIDES = {
"pub fn to_float_bytes(&self, dest: &mut [u8], pos: i32) -> Result<(), crate::Error>",
"shared_self,mutable_borrow,owned",
),
"M:LibreMetaverse.Quaternion.ToBytes(System.Byte[],System.Int32)": (
"pub fn to_bytes(&self, dest: &mut [u8], pos: i32) -> Result<(), crate::Error>",
"shared_self,mutable_borrow,owned",
),
"M:LibreMetaverse.Vector2.ToBytes(System.Byte[],System.Int32)": (
"pub fn to_bytes(&self, dest: &mut [u8], pos: i32) -> Result<(), crate::Error>",
"shared_self,mutable_borrow,owned",