Implement PrimMesher extrusion geometry (#42)
Some checks failed
JPEG 2000 feature / linux (push) Has been cancelled
JPEG 2000 feature / macos (push) Has been cancelled
JPEG 2000 feature / windows (push) Has been cancelled
Skia feature / linux (push) Has been cancelled
Skia feature / macos (push) Has been cancelled
Skia feature / windows (push) Has been cancelled

This commit is contained in:
2026-08-09 04:40:54 +00:00
parent 4849bbda7b
commit 5b3950c421
8 changed files with 2316 additions and 637 deletions

View File

@@ -158,5 +158,12 @@ dimensions, strides, and allocations bounded. See
[`crates/libremetaverse-imaging-skia/README.md`](crates/libremetaverse-imaging-skia/README.md)
for native prerequisites, cache/source-build controls, licenses, and packaging
details. Default workspace builds do not compile or link Skia.
Primitive profile and path meshing is implemented in native Rust from the
pinned `PrimMesher.cs` reference. It covers checked linear, flexible, and
circular extrusion; profile cuts and hollows; twist, taper, shear, skew,
radius, and revolutions; cap and side winding; normals, UVs, viewer faces, and
prim-face indexing. Geometry allocation and index arithmetic are bounded, and
identical finite inputs produce deterministic mesh output on every supported
platform.
The controlled audit aggregates every expected failure by standardized C#
member ID and rejects unrelated fixture, assertion, compile, or symbol errors.

View File

@@ -8,7 +8,7 @@ Generated by `python3 tools/generate_api_shims.py`; do not edit by hand.
| `LibreMetaverse.Imaging.Abstractions` | 3 | 20 | native implementation: 3 types / 20 members; no generated shims remain |
| `LibreMetaverse.Imaging.Skia` | 1 | 3 | native implementation: 1 type / 3 members; no generated shims remain |
| `LibreMetaverse.LslTools` | 164 | 768 | callable failure-only shim |
| `LibreMetaverse.PrimMesher` | 17 | 207 | callable failure-only shim |
| `LibreMetaverse.PrimMesher` | 17 | 207 | native implementation: 9 types / 155 members; remaining surface is callable failure-only shims |
| `LibreMetaverse.RLV` | 28 | 499 | callable failure-only shim |
| `LibreMetaverse.Rendering.MeshFoundry` | 1 | 14 | callable failure-only shim |
| `LibreMetaverse.Rendering.Simple` | 1 | 6 | callable failure-only shim |

View File

@@ -6,128 +6,35 @@
#![allow(non_snake_case)]
/// C# type: `T:LibreMetaverse.PrimMesher.Coord`.
pub struct Coord {
/// C# member: `F:LibreMetaverse.PrimMesher.Coord.X`.
pub x: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Coord.Y`.
pub y: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Coord.Z`.
pub z: f32,
}
impl Coord {
/// C# member: `M:LibreMetaverse.PrimMesher.Coord.#ctor(System.Single,System.Single,System.Single)`.
pub fn new(x: f32, y: f32, z: f32) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Coord.#ctor(System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Coord.Cross(LibreMetaverse.PrimMesher.Coord,LibreMetaverse.PrimMesher.Coord)`.
pub fn cross(
c1: libremetaverse_prim_mesher::Coord,
c2: libremetaverse_prim_mesher::Coord,
) -> Result<libremetaverse_prim_mesher::Coord, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Coord.Cross(LibreMetaverse.PrimMesher.Coord,LibreMetaverse.PrimMesher.Coord)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Coord.Invert`.
pub fn invert(&mut self) -> Result<libremetaverse_prim_mesher::Coord, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.Coord.Invert")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Coord.Length`.
pub fn length(&self) -> Result<f32, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.Coord.Length")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Coord.Normalize`.
pub fn normalize(&mut self) -> Result<libremetaverse_prim_mesher::Coord, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.Coord.Normalize")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Coord.ToString`.
pub fn to_string(&self) -> String {
libremetaverse_types::unimplemented_api!("M:LibreMetaverse.PrimMesher.Coord.ToString")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Coord.op_Addition(LibreMetaverse.PrimMesher.Coord,LibreMetaverse.PrimMesher.Coord)`.
pub fn add(
v: libremetaverse_prim_mesher::Coord,
a: libremetaverse_prim_mesher::Coord,
) -> libremetaverse_prim_mesher::Coord {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.PrimMesher.Coord.op_Addition(LibreMetaverse.PrimMesher.Coord,LibreMetaverse.PrimMesher.Coord)"
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Coord.op_Multiply(LibreMetaverse.PrimMesher.Coord,LibreMetaverse.PrimMesher.Coord)`.
pub fn mul_with_coord_coord(
v: libremetaverse_prim_mesher::Coord,
m: libremetaverse_prim_mesher::Coord,
) -> libremetaverse_prim_mesher::Coord {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.PrimMesher.Coord.op_Multiply(LibreMetaverse.PrimMesher.Coord,LibreMetaverse.PrimMesher.Coord)"
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Coord.op_Multiply(LibreMetaverse.PrimMesher.Coord,LibreMetaverse.PrimMesher.Quat)`.
pub fn mul_with_coord_quat(
v: libremetaverse_prim_mesher::Coord,
q: libremetaverse_prim_mesher::Quat,
) -> libremetaverse_prim_mesher::Coord {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.PrimMesher.Coord.op_Multiply(LibreMetaverse.PrimMesher.Coord,LibreMetaverse.PrimMesher.Quat)"
)
}
}
pub use crate::prim_mesher::Coord;
/// C# type: `T:LibreMetaverse.PrimMesher.Face`.
pub struct Face {
/// C# member: `F:LibreMetaverse.PrimMesher.Face.n1`.
pub n1: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Face.n2`.
pub n2: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Face.n3`.
pub n3: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Face.primFace`.
pub prim_face: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Face.uv1`.
pub uv1: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Face.uv2`.
pub uv2: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Face.uv3`.
pub uv3: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Face.v1`.
pub v1: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Face.v2`.
pub v2: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Face.v3`.
pub v3: i32,
}
impl Face {
/// C# member: `M:LibreMetaverse.PrimMesher.Face.#ctor(System.Int32,System.Int32,System.Int32)`.
pub fn new_with_int32_int32_int32(v1: i32, v2: i32, v3: i32) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Face.#ctor(System.Int32,System.Int32,System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Face.#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)`.
pub fn new_with_int32_int32_int32_int32_int32_int32(
v1: i32,
v2: i32,
v3: i32,
n1: i32,
n2: i32,
n3: i32,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Face.#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Face.SurfaceNormal(System.Collections.Generic.List{LibreMetaverse.PrimMesher.Coord})`.
pub fn surface_normal(
&mut self,
coord_list: Vec<libremetaverse_prim_mesher::Coord>,
) -> Result<libremetaverse_prim_mesher::Coord, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Face.SurfaceNormal(System.Collections.Generic.List{LibreMetaverse.PrimMesher.Coord})",
)
}
}
pub use crate::prim_mesher::Face;
/// C# type: `T:LibreMetaverse.PrimMesher.ObjMesh`.
pub struct ObjMesh {
@@ -166,73 +73,34 @@ impl ObjMesh {
}
/// C# type: `T:LibreMetaverse.PrimMesher.Path`.
pub struct Path {
/// C# member: `F:LibreMetaverse.PrimMesher.Path.dimpleBegin`.
pub dimple_begin: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.dimpleEnd`.
pub dimple_end: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.holeSizeX`.
pub hole_size_x: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.holeSizeY`.
pub hole_size_y: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.pathCutBegin`.
pub path_cut_begin: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.pathCutEnd`.
pub path_cut_end: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.pathNodes`.
pub path_nodes: Vec<libremetaverse_prim_mesher::PathNode>,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.radius`.
pub radius: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.revolutions`.
pub revolutions: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.skew`.
pub skew: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.stepsPerRevolution`.
pub steps_per_revolution: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.taperX`.
pub taper_x: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.taperY`.
pub taper_y: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.topShearX`.
pub top_shear_x: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.topShearY`.
pub top_shear_y: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.twistBegin`.
pub twist_begin: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Path.twistEnd`.
pub twist_end: f32,
}
impl Path {
/// C# member: `M:LibreMetaverse.PrimMesher.Path.#ctor`.
pub fn new() -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.Path.#ctor")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Path.Create(LibreMetaverse.PrimMesher.PathType,System.Int32)`.
pub fn create(
&self,
path_type: libremetaverse_prim_mesher::PathType,
steps: i32,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Path.Create(LibreMetaverse.PrimMesher.PathType,System.Int32)",
)
}
}
pub use crate::prim_mesher::Path;
/// C# type: `T:LibreMetaverse.PrimMesher.PathNode`.
pub struct PathNode {
/// C# member: `F:LibreMetaverse.PrimMesher.PathNode.percentOfPath`.
pub percent_of_path: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PathNode.position`.
pub position: libremetaverse_prim_mesher::Coord,
/// C# member: `F:LibreMetaverse.PrimMesher.PathNode.rotation`.
pub rotation: libremetaverse_prim_mesher::Quat,
/// C# member: `F:LibreMetaverse.PrimMesher.PathNode.xScale`.
pub x_scale: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PathNode.yScale`.
pub y_scale: f32,
}
impl PathNode {}
pub use crate::prim_mesher::PathNode;
/// C# type: `T:LibreMetaverse.PrimMesher.PathType`.
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
@@ -247,372 +115,97 @@ pub enum PathType {
}
/// C# type: `T:LibreMetaverse.PrimMesher.PrimMesh`.
pub struct PrimMesh {
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.calcVertexNormals`.
pub calc_vertex_normals: bool,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.coords`.
pub coords: Vec<libremetaverse_prim_mesher::Coord>,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.dimpleBegin`.
pub dimple_begin: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.dimpleEnd`.
pub dimple_end: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.errorMessage`.
pub error_message: String,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.faces`.
pub faces: Vec<libremetaverse_prim_mesher::Face>,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.holeSizeX`.
pub hole_size_x: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.holeSizeY`.
pub hole_size_y: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.normals`.
pub normals: Vec<libremetaverse_prim_mesher::Coord>,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.numPrimFaces`.
pub num_prim_faces: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.pathCutBegin`.
pub path_cut_begin: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.pathCutEnd`.
pub path_cut_end: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.radius`.
pub radius: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.revolutions`.
pub revolutions: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.skew`.
pub skew: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.sphereMode`.
pub sphere_mode: bool,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.stepsPerRevolution`.
pub steps_per_revolution: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.taperX`.
pub taper_x: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.taperY`.
pub taper_y: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.topShearX`.
pub top_shear_x: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.topShearY`.
pub top_shear_y: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.twistBegin`.
pub twist_begin: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.twistEnd`.
pub twist_end: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.viewerFaces`.
pub viewer_faces: Vec<libremetaverse_prim_mesher::ViewerFace>,
/// C# member: `F:LibreMetaverse.PrimMesher.PrimMesh.viewerMode`.
pub viewer_mode: bool,
}
impl PrimMesh {
/// C# member: `M:LibreMetaverse.PrimMesher.PrimMesh.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Int32)`.
pub fn new(
sides: i32,
profile_start: f32,
profile_end: f32,
hollow: f32,
hollow_sides: i32,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.PrimMesh.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.PrimMesh.AddPos(System.Single,System.Single,System.Single)`.
pub fn add_pos(&mut self, x: f32, y: f32, z: f32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.PrimMesh.AddPos(System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.PrimMesh.AddRot(LibreMetaverse.PrimMesher.Quat)`.
pub fn add_rot(&mut self, q: libremetaverse_prim_mesher::Quat) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.PrimMesh.AddRot(LibreMetaverse.PrimMesher.Quat)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.PrimMesh.CalcNormals`.
pub fn calc_normals(&mut self) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.PrimMesh.CalcNormals")
}
/// C# member: `M:LibreMetaverse.PrimMesher.PrimMesh.Copy`.
pub fn copy(&self) -> Result<libremetaverse_prim_mesher::PrimMesh, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.PrimMesh.Copy")
}
/// C# member: `M:LibreMetaverse.PrimMesher.PrimMesh.DumpRaw(System.String,System.String,System.String)`.
pub fn dump_raw(&self, path: String, name: String, title: String) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.PrimMesh.DumpRaw(System.String,System.String,System.String)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.PrimMesh.Extrude(LibreMetaverse.PrimMesher.PathType)`.
pub fn extrude(
&mut self,
path_type: libremetaverse_prim_mesher::PathType,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.PrimMesh.Extrude(LibreMetaverse.PrimMesher.PathType)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.PrimMesh.GetVertexIndexer`.
pub fn get_vertex_indexer(
&self,
) -> Result<Option<libremetaverse_prim_mesher::VertexIndexer>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.PrimMesh.GetVertexIndexer",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.PrimMesh.ParamsToDisplayString`.
pub fn params_to_display_string(&self) -> Result<String, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.PrimMesh.ParamsToDisplayString",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.PrimMesh.Scale(System.Single,System.Single,System.Single)`.
pub fn scale(&mut self, x: f32, y: f32, z: f32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.PrimMesh.Scale(System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.PrimMesh.SurfaceNormal(System.Int32)`.
pub fn surface_normal(
&self,
face_index: i32,
) -> Result<libremetaverse_prim_mesher::Coord, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.PrimMesh.SurfaceNormal(System.Int32)",
)
}
/// C# member: `P:LibreMetaverse.PrimMesher.PrimMesh.HasHollow`.
pub fn has_hollow(&self) -> bool {
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.PrimMesher.PrimMesh.HasHollow")
}
/// Setter for C# member: `P:LibreMetaverse.PrimMesher.PrimMesh.HasHollow`.
pub fn set_has_hollow(&mut self, value: bool) {
libremetaverse_types::unimplemented_api!("P:LibreMetaverse.PrimMesher.PrimMesh.HasHollow")
}
/// C# member: `P:LibreMetaverse.PrimMesher.PrimMesh.HasProfileCut`.
pub fn has_profile_cut(&self) -> bool {
libremetaverse_types::unimplemented_api!(
"P:LibreMetaverse.PrimMesher.PrimMesh.HasProfileCut"
)
}
/// Setter for C# member: `P:LibreMetaverse.PrimMesher.PrimMesh.HasProfileCut`.
pub fn set_has_profile_cut(&mut self, value: bool) {
libremetaverse_types::unimplemented_api!(
"P:LibreMetaverse.PrimMesher.PrimMesh.HasProfileCut"
)
}
/// C# member: `P:LibreMetaverse.PrimMesher.PrimMesh.ProfileHollowFaceNumber`.
pub fn profile_hollow_face_number(&self) -> i32 {
libremetaverse_types::unimplemented_api!(
"P:LibreMetaverse.PrimMesher.PrimMesh.ProfileHollowFaceNumber"
)
}
/// Setter for C# member: `P:LibreMetaverse.PrimMesher.PrimMesh.ProfileHollowFaceNumber`.
pub fn set_profile_hollow_face_number(&mut self, value: i32) {
libremetaverse_types::unimplemented_api!(
"P:LibreMetaverse.PrimMesher.PrimMesh.ProfileHollowFaceNumber"
)
}
/// C# member: `P:LibreMetaverse.PrimMesher.PrimMesh.ProfileOuterFaceNumber`.
pub fn profile_outer_face_number(&self) -> i32 {
libremetaverse_types::unimplemented_api!(
"P:LibreMetaverse.PrimMesher.PrimMesh.ProfileOuterFaceNumber"
)
}
/// Setter for C# member: `P:LibreMetaverse.PrimMesher.PrimMesh.ProfileOuterFaceNumber`.
pub fn set_profile_outer_face_number(&mut self, value: i32) {
libremetaverse_types::unimplemented_api!(
"P:LibreMetaverse.PrimMesher.PrimMesh.ProfileOuterFaceNumber"
)
}
}
pub use crate::prim_mesher::PrimMesh;
/// C# type: `T:LibreMetaverse.PrimMesher.Profile`.
pub struct Profile {
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.bottomFaceNumber`.
pub bottom_face_number: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.calcVertexNormals`.
pub calc_vertex_normals: bool,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.coords`.
pub coords: Vec<libremetaverse_prim_mesher::Coord>,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.cut1CoordIndices`.
pub cut1_coord_indices: Vec<i32>,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.cut2CoordIndices`.
pub cut2_coord_indices: Vec<i32>,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.cutNormal1`.
pub cut_normal1: libremetaverse_prim_mesher::Coord,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.cutNormal2`.
pub cut_normal2: libremetaverse_prim_mesher::Coord,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.errorMessage`.
pub error_message: String,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.faceNormal`.
pub face_normal: libremetaverse_prim_mesher::Coord,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.faceNumbers`.
pub face_numbers: Vec<i32>,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.faceUVs`.
pub face_u_vs: Vec<libremetaverse_prim_mesher::UVCoord>,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.faces`.
pub faces: Vec<libremetaverse_prim_mesher::Face>,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.hollowCoordIndices`.
pub hollow_coord_indices: Vec<i32>,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.hollowFaceNumber`.
pub hollow_face_number: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.numHollowVerts`.
pub num_hollow_verts: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.numOuterVerts`.
pub num_outer_verts: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.numPrimFaces`.
pub num_prim_faces: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.outerCoordIndices`.
pub outer_coord_indices: Vec<i32>,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.outerFaceNumber`.
pub outer_face_number: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.us`.
pub us: Vec<f32>,
/// C# member: `F:LibreMetaverse.PrimMesher.Profile.vertexNormals`.
pub vertex_normals: Vec<libremetaverse_prim_mesher::Coord>,
}
impl Profile {
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.#ctor`.
pub fn new_with_constructor() -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.Profile.#ctor")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Int32,System.Boolean,System.Boolean)`.
pub fn new_with_int32_single_single_single_int32_boolean_boolean(
sides: i32,
profile_start: f32,
profile_end: f32,
hollow: f32,
hollow_sides: i32,
create_faces: bool,
calc_vertex_normals: bool,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Profile.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Int32,System.Boolean,System.Boolean)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.AddPos(LibreMetaverse.PrimMesher.Coord)`.
pub fn add_pos_with_coord(
&self,
v: libremetaverse_prim_mesher::Coord,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Profile.AddPos(LibreMetaverse.PrimMesher.Coord)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.AddPos(System.Single,System.Single,System.Single)`.
pub fn add_pos_with_single_single_single(
&self,
x: f32,
y: f32,
z: f32,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Profile.AddPos(System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.AddRot(LibreMetaverse.PrimMesher.Quat)`.
pub fn add_rot(&self, q: libremetaverse_prim_mesher::Quat) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Profile.AddRot(LibreMetaverse.PrimMesher.Quat)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.AddValue2FaceNormalIndices(System.Int32)`.
pub fn add_value2_face_normal_indices(&self, num: i32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Profile.AddValue2FaceNormalIndices(System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.AddValue2FaceVertexIndices(System.Int32)`.
pub fn add_value2_face_vertex_indices(&self, num: i32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Profile.AddValue2FaceVertexIndices(System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.Copy`.
pub fn copy_with_method(&self) -> Result<libremetaverse_prim_mesher::Profile, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.Profile.Copy")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.Copy(System.Boolean)`.
pub fn copy_with_boolean(
&self,
need_faces: bool,
) -> Result<libremetaverse_prim_mesher::Profile, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Profile.Copy(System.Boolean)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.DumpRaw(System.String,System.String,System.String)`.
pub fn dump_raw(&self, path: String, name: String, title: String) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Profile.DumpRaw(System.String,System.String,System.String)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.FlipNormals`.
pub fn flip_normals(&self) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.Profile.FlipNormals")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.MakeFaceUVs`.
pub fn make_face_u_vs(&self) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.Profile.MakeFaceUVs")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Profile.Scale(System.Single,System.Single)`.
pub fn scale(&self, x: f32, y: f32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Profile.Scale(System.Single,System.Single)",
)
}
}
pub use crate::prim_mesher::Profile;
/// C# type: `T:LibreMetaverse.PrimMesher.Quat`.
pub struct Quat {
/// C# member: `F:LibreMetaverse.PrimMesher.Quat.W`.
pub w: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Quat.X`.
pub x: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Quat.Y`.
pub y: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.Quat.Z`.
pub z: f32,
}
impl Quat {
/// C# member: `M:LibreMetaverse.PrimMesher.Quat.#ctor(LibreMetaverse.PrimMesher.Coord,System.Single)`.
pub fn new_with_coord_single(
axis: libremetaverse_prim_mesher::Coord,
angle: f32,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.Quat.#ctor(LibreMetaverse.PrimMesher.Coord,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Quat.#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.PrimMesher.Quat.#ctor(System.Single,System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.Quat.Length`.
pub fn length(&self) -> Result<f32, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.Quat.Length")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Quat.Normalize`.
pub fn normalize(&mut self) -> Result<libremetaverse_prim_mesher::Quat, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.Quat.Normalize")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Quat.ToString`.
pub fn to_string(&self) -> String {
libremetaverse_types::unimplemented_api!("M:LibreMetaverse.PrimMesher.Quat.ToString")
}
/// C# member: `M:LibreMetaverse.PrimMesher.Quat.op_Multiply(LibreMetaverse.PrimMesher.Quat,LibreMetaverse.PrimMesher.Quat)`.
pub fn mul(
q1: libremetaverse_prim_mesher::Quat,
q2: libremetaverse_prim_mesher::Quat,
) -> libremetaverse_prim_mesher::Quat {
libremetaverse_types::unimplemented_api!(
"M:LibreMetaverse.PrimMesher.Quat.op_Multiply(LibreMetaverse.PrimMesher.Quat,LibreMetaverse.PrimMesher.Quat)"
)
}
}
pub use crate::prim_mesher::Quat;
/// C# type: `T:LibreMetaverse.PrimMesher.SculptMap`.
pub struct SculptMap {
@@ -795,24 +388,11 @@ pub enum SculptMeshSculptType {
}
/// C# type: `T:LibreMetaverse.PrimMesher.UVCoord`.
pub struct UVCoord {
/// C# member: `F:LibreMetaverse.PrimMesher.UVCoord.U`.
pub u: f32,
/// C# member: `F:LibreMetaverse.PrimMesher.UVCoord.V`.
pub v: f32,
}
impl UVCoord {
/// C# member: `M:LibreMetaverse.PrimMesher.UVCoord.#ctor(System.Single,System.Single)`.
pub fn new(u: f32, v: f32) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.UVCoord.#ctor(System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.UVCoord.Flip`.
pub fn flip(&mut self) -> Result<libremetaverse_prim_mesher::UVCoord, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.PrimMesher.UVCoord.Flip")
}
}
pub use crate::prim_mesher::UVCoord;
/// C# type: `T:LibreMetaverse.PrimMesher.VertexIndexer`.
pub struct VertexIndexer {
@@ -839,66 +419,25 @@ impl VertexIndexer {
}
/// C# type: `T:LibreMetaverse.PrimMesher.ViewerFace`.
pub struct ViewerFace {
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.coordIndex1`.
pub coord_index1: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.coordIndex2`.
pub coord_index2: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.coordIndex3`.
pub coord_index3: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.n1`.
pub n1: libremetaverse_prim_mesher::Coord,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.n2`.
pub n2: libremetaverse_prim_mesher::Coord,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.n3`.
pub n3: libremetaverse_prim_mesher::Coord,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.primFaceNumber`.
pub prim_face_number: i32,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.uv1`.
pub uv1: libremetaverse_prim_mesher::UVCoord,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.uv2`.
pub uv2: libremetaverse_prim_mesher::UVCoord,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.uv3`.
pub uv3: libremetaverse_prim_mesher::UVCoord,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.v1`.
pub v1: libremetaverse_prim_mesher::Coord,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.v2`.
pub v2: libremetaverse_prim_mesher::Coord,
/// C# member: `F:LibreMetaverse.PrimMesher.ViewerFace.v3`.
pub v3: libremetaverse_prim_mesher::Coord,
}
impl ViewerFace {
/// C# member: `M:LibreMetaverse.PrimMesher.ViewerFace.#ctor(System.Int32)`.
pub fn new(prim_face_number: i32) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.ViewerFace.#ctor(System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.ViewerFace.AddPos(System.Single,System.Single,System.Single)`.
pub fn add_pos(&mut self, x: f32, y: f32, z: f32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.ViewerFace.AddPos(System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.ViewerFace.AddRot(LibreMetaverse.PrimMesher.Quat)`.
pub fn add_rot(&mut self, q: libremetaverse_prim_mesher::Quat) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.ViewerFace.AddRot(LibreMetaverse.PrimMesher.Quat)",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.ViewerFace.CalcSurfaceNormal`.
pub fn calc_surface_normal(&mut self) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.ViewerFace.CalcSurfaceNormal",
)
}
/// C# member: `M:LibreMetaverse.PrimMesher.ViewerFace.Scale(System.Single,System.Single,System.Single)`.
pub fn scale(&mut self, x: f32, y: f32, z: f32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.PrimMesher.ViewerFace.Scale(System.Single,System.Single,System.Single)",
)
}
}
pub use crate::prim_mesher::ViewerFace;
/// C# type: `T:LibreMetaverse.PrimMesher.ViewerPolygon`.
pub struct ViewerPolygon {

View File

@@ -3,6 +3,7 @@
extern crate self as libremetaverse_prim_mesher;
mod generated;
mod prim_mesher;
pub use generated::*;
pub use libremetaverse_imaging as imaging;

File diff suppressed because it is too large Load Diff

View File

@@ -23,16 +23,11 @@ fn mesh_and_renderer_calls_compile_with_typed_elements() {
}
#[test]
fn owned_constructors_fail_with_exact_member_ids() {
let Err(prim_error) = PrimMesh::new(4, 0.0, 1.0, 0.0, 4) else {
panic!("failure-only PrimMesh constructor unexpectedly returned a value");
};
assert_eq!(
prim_error.csharp_member(),
Some(
"M:LibreMetaverse.PrimMesher.PrimMesh.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Int32)"
)
);
fn native_mesher_and_remaining_shims_report_their_current_status() {
let mesh = PrimMesh::new(4, 0.0, 1.0, 0.0, 4)
.expect("native PrimMesh constructor should create a checked mesh");
assert!(mesh.coords.is_empty());
assert!(mesh.faces.is_empty());
let Err(renderer_error) = SimpleRenderer::new() else {
panic!("failure-only renderer constructor unexpectedly returned a value");

View File

@@ -11,6 +11,51 @@
"unreviewed": 0
},
"allowed_parity_passes": [
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::CoordTests.Coord_Length_KnownVector::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::CoordTests.Coord_Length_UnitVector::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::CoordTests.Coord_Normalize_GivesUnitLength::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::CoordTests.Coord_Normalize_ZeroVector_DoesNotThrow::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::CoordTests.Coord_Normalize_ZeroVector_GivesZero::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::CoordTests.Coord_Cross_XaxisTimesYaxis_GivesZaxis::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::CoordTests.Coord_Cross_YaxisTimesXaxis_GivesNegZaxis::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::CoordTests.Coord_Add_IsCommutative::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::QuatTests.Quat_AxisAngle_IsNormalized::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::QuatTests.Quat_Identity_RotatesCoordUnchanged::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::QuatTests.Coord_RotateByQuat_90DegAroundXaxis_YbecomesZ::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::QuatTests.Coord_RotateByQuat_90DegAroundXaxis_ZbecomesNegY_BugRegression::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::QuatTests.Coord_RotateByQuat_90DegAroundZaxis_XbecomesY::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::QuatTests.Coord_RotateByQuat_90DegAroundYaxis_ZbecomesX::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::QuatTests.Coord_RotateByQuat_180DegAroundZaxis_NegatesXandY::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::QuatTests.Coord_RotateByQuat_PreservesLength::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::QuatTests.Quat_Multiply_TwoNineties_AroundZ_Gives180::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/CoordQuatTests.cs::QuatTests.Quat_Multiply_IsAssociative::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Box_Linear_HasVerticesAndFaces::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Box_Linear_AllFaceIndicesInRange::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Cylinder_Linear_HasGeometry::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Prism_Linear_HasGeometry::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Torus_Circular_HasGeometry::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Torus_Circular_AllFaceIndicesInRange::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Box_WithHollow_HasGeometry::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Box_WithProfileCut_HasGeometry::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Box_ViewerMode_HasViewerFaces::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Box_ViewerMode_AllViewerFaceVerticesFinite::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Box_ViewerMode_NumPrimFaces_Is6::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Cylinder_ViewerMode_NumPrimFaces_AtLeast2::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Torus_ViewerMode_NumPrimFaces_Is1::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Sphere_ViewerMode_NumPrimFaces_Is1::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Extrude_Torus_ViewerMode_HasViewerFaces::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.CalcNormals_Box_ProducesOneNormalPerFace::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.CalcNormals_Box_AllNonZeroNormalsUnitLength::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.CalcNormals_CalledTwice_IsIdempotent::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.VertexIndexer_Box_IsNotNull::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.VertexIndexer_NonViewerMode_ReturnsNull::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.VertexIndexer_Box_AllPolygonIndicesInRange::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Copy_Box_ProducesIndependentInstance::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.AddPos_ShiftsAllCoords::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.Scale_ScalesAllCoords::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.AddRot_ByIdentity_DoesNotChangeCoords::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.SurfaceNormal_Box_FirstFace_IsUnitLength::test",
"LibreMetaverse.Rendering.Tests/PrimMesher/PrimMeshTests.cs::PrimMeshTests.SurfaceNormal_InvalidIndex_Throws::test",
"LibreMetaverse.Tests/AppearanceManagerTests.cs::AppearanceManagerTests.BAKED_TEXTURE_COUNT_Is11::test",
"LibreMetaverse.Tests/BinaryLLSDTests.cs::BinarySDTests.DeserializeArray::test",
"LibreMetaverse.Tests/BinaryLLSDTests.cs::BinarySDTests.DeserializeBool::test",
@@ -101,5 +146,5 @@
"LibreMetaverse.Tests/XmlLLSDTests.cs::XmlSDTests.DeserializeUUID::test",
"LibreMetaverse.Tests/XmlLLSDTests.cs::XmlSDTests.DeserializeUndef::test"
],
"support_passes": 119
"support_passes": 123
}

View File

@@ -38,6 +38,15 @@ TARGETS = {
# implementations. The generated module keeps catalog markers and re-exports
# the hand-written type so coverage remains deterministic.
NATIVE_TYPES = {
"T:LibreMetaverse.PrimMesher.Coord": "crate::prim_mesher::Coord",
"T:LibreMetaverse.PrimMesher.Face": "crate::prim_mesher::Face",
"T:LibreMetaverse.PrimMesher.Path": "crate::prim_mesher::Path",
"T:LibreMetaverse.PrimMesher.PathNode": "crate::prim_mesher::PathNode",
"T:LibreMetaverse.PrimMesher.PrimMesh": "crate::prim_mesher::PrimMesh",
"T:LibreMetaverse.PrimMesher.Profile": "crate::prim_mesher::Profile",
"T:LibreMetaverse.PrimMesher.Quat": "crate::prim_mesher::Quat",
"T:LibreMetaverse.PrimMesher.UVCoord": "crate::prim_mesher::UVCoord",
"T:LibreMetaverse.PrimMesher.ViewerFace": "crate::prim_mesher::ViewerFace",
"T:LibreMetaverse.Imaging.Skia.SkiaTextureCodec": "crate::skia_codec::SkiaTextureCodec",
"T:LibreMetaverse.Imaging.ManagedImageCreator": "crate::j2k::ManagedImageCreator",
"T:LibreMetaverse.Imaging.ManagedImageInterleavedExtensions": "crate::j2k::ManagedImageInterleavedExtensions",