Generate imaging and rendering API shims

This commit is contained in:
2026-08-08 12:03:16 +02:00
parent 0a2e7dd057
commit 8ca986dbd3
21 changed files with 1345 additions and 147 deletions

1
Cargo.lock generated
View File

@@ -86,6 +86,7 @@ name = "libremetaverse-rendering-simple"
version = "0.0.1"
dependencies = [
"libremetaverse",
"libremetaverse-imaging",
"libremetaverse-types",
]

View File

@@ -7,9 +7,10 @@ host, bind to, invoke, or ship the .NET implementation. The current
stage is a compiling structural shell: crate boundaries mirror the .NET library
projects, public C# type names have Rust declarations, every upstream NUnit case
has a traceable placeholder, and every sample/tool project has a Rust binary
target. The Types and StructuredData assemblies now have complete callable,
failure-only signatures; the remaining assembly slices and semantic Rust test
translations are still required before the public API shim is complete.
target. Types, StructuredData, Imaging, PrimMesher, and both rendering adapters
now have complete callable, failure-only signatures; the remaining assembly
slices and semantic Rust test translations are still required before the public
API shim is complete.
The source snapshot, compatibility rules, dependency research, and ordered
implementation plan are in [RUSTREWRITE.md](RUSTREWRITE.md).

View File

@@ -51,9 +51,9 @@ The current workspace is a structural baseline, not a working client:
- compiled metadata records 3,066 public types and 30,789 public members with
matching independent ECMA-335 counts, with all 142 external signature types
resolved to cross-platform Rust or project-owned boundary types;
- the Types and StructuredData slices expose 61 final Rust-facing types and all
1,237 callable members with real fields/constants/enum values and standardized
failing bodies;
- the completed Types, StructuredData, Imaging, PrimMesher, and rendering slices
expose 84 final Rust-facing types and all 1,487 callable members with real
fields/constants/enum values and standardized failing bodies;
- all 1,295 NUnit `[Test]`/`[TestCase]` invocations have compiling Rust test
entries that intentionally panic with their source identity and body hash;
- all nine sample/tool projects have compiling Rust binary targets;

View File

@@ -11123,7 +11123,7 @@ M:LibreMetaverse.GridClient.DisposeAsync method System.Threading.Tasks.ValueTask
M:LibreMetaverse.GridClient.ToString method System.String LibreMetaverse.GridClient.ToString() libremetaverse libremetaverse::GridClient::to_string pub fn to_string(&self) -> String shared_self sync infallible_placeholder direct_snake_case method mapped
M:LibreMetaverse.GridClientBakingTextureProvider.#ctor(LibreMetaverse.GridClient) constructor LibreMetaverse.GridClientBakingTextureProvider(LibreMetaverse.GridClient client) libremetaverse libremetaverse::GridClientBakingTextureProvider::new pub fn new(client: libremetaverse::GridClient) -> Result<Self, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.GridClientBakingTextureProvider.RequestTextureAsync(LibreMetaverse.UUID,System.Threading.CancellationToken) method System.Threading.Tasks.Task<LibreMetaverse.Assets.AssetTexture> LibreMetaverse.GridClientBakingTextureProvider.RequestTextureAsync(LibreMetaverse.UUID textureID, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::GridClientBakingTextureProvider::request_texture pub async fn request_texture(&self, texture_id: libremetaverse_types::UUID, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<Option<libremetaverse::assets::AssetTexture>, crate::Error> shared_self,owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.GridClientServiceCollectionExtensions.AddGridClient(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{LibreMetaverse.Settings}) method Microsoft.Extensions.DependencyInjection.IServiceCollection LibreMetaverse.GridClientServiceCollectionExtensions.AddGridClient(Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<LibreMetaverse.Settings> configure = default) libremetaverse libremetaverse::GridClientServiceCollectionExtensions::add_grid_client pub fn add_grid_client(services: libremetaverse::services::IServiceCollection, configure: Option<Box<dyn Fn(libremetaverse::Settings) + Send + Sync>>) -> Result<libremetaverse::services::IServiceCollection, crate::Error> owned,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.GridClientServiceCollectionExtensions.AddGridClient(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{LibreMetaverse.Settings}) method Microsoft.Extensions.DependencyInjection.IServiceCollection LibreMetaverse.GridClientServiceCollectionExtensions.AddGridClient(Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<LibreMetaverse.Settings> configure = default) libremetaverse libremetaverse::GridClientServiceCollectionExtensions::add_grid_client pub fn add_grid_client(services: Box<dyn libremetaverse::services::IServiceCollection>, configure: Option<Box<dyn Fn(libremetaverse::Settings) + Send + Sync>>) -> Result<Box<dyn libremetaverse::services::IServiceCollection>, crate::Error> owned,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.GridItemsEventArgs.#ctor(LibreMetaverse.GridItemType,System.Collections.Generic.List{LibreMetaverse.MapItem}) constructor LibreMetaverse.GridItemsEventArgs(LibreMetaverse.GridItemType type, System.Collections.Generic.List<LibreMetaverse.MapItem> items) libremetaverse libremetaverse::GridItemsEventArgs::new pub fn new(type_: libremetaverse::GridItemType, items: Vec<libremetaverse::MapItem>) -> Result<Self, crate::Error> owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.GridLayer.ContainsRegion(System.Int32,System.Int32) method System.Boolean LibreMetaverse.GridLayer.ContainsRegion(System.Int32 x, System.Int32 y) libremetaverse libremetaverse::GridLayer::contains_region pub fn contains_region(&self, x: i32, y: i32) -> Result<bool, crate::Error> shared_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.GridLayerEventArgs.#ctor(LibreMetaverse.GridLayer) constructor LibreMetaverse.GridLayerEventArgs(LibreMetaverse.GridLayer layer) libremetaverse libremetaverse::GridLayerEventArgs::new pub fn new(layer: libremetaverse::GridLayer) -> Result<Self, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
@@ -11282,8 +11282,8 @@ M:LibreMetaverse.Imaging.ManagedImage.ExportRaw method System.Byte[] LibreMetave
M:LibreMetaverse.Imaging.ManagedImage.ResizeBilinear(System.Int32,System.Int32) method System.Void LibreMetaverse.Imaging.ManagedImage.ResizeBilinear(System.Int32 width, System.Int32 height) libremetaverse-imaging libremetaverse_imaging::ManagedImage::resize_bilinear pub fn resize_bilinear(&self, width: i32, height: i32) -> Result<(), crate::Error> shared_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Imaging.ManagedImage.ResizeNearestNeighbor(System.Int32,System.Int32) method System.Void LibreMetaverse.Imaging.ManagedImage.ResizeNearestNeighbor(System.Int32 width, System.Int32 height) libremetaverse-imaging libremetaverse_imaging::ManagedImage::resize_nearest_neighbor pub fn resize_nearest_neighbor(&self, width: i32, height: i32) -> Result<(), crate::Error> shared_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Imaging.ManagedImageCreator.#ctor constructor LibreMetaverse.Imaging.ManagedImageCreator() libremetaverse imaging libremetaverse::imaging::ManagedImageCreator::new pub fn new() -> Result<Self, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Imaging.ManagedImageCreator.Create(System.Int32,System.Int32,System.Int32,System.Byte[]) method CoreJ2K.Util.IImage LibreMetaverse.Imaging.ManagedImageCreator.Create(System.Int32 width, System.Int32 height, System.Int32 numComponents, System.Byte[] bytes) libremetaverse imaging libremetaverse::imaging::ManagedImageCreator::create pub fn create(&self, width: i32, height: i32, num_components: i32, bytes: Vec<u8>) -> Result<libremetaverse_imaging::codec::IImage, crate::Error> shared_self,owned,owned,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Imaging.ManagedImageCreator.ToPortableImageSource(System.Object) method CoreJ2K.j2k.image.BlkImgDataSrc LibreMetaverse.Imaging.ManagedImageCreator.ToPortableImageSource(System.Object imageObject) libremetaverse imaging libremetaverse::imaging::ManagedImageCreator::to_portable_image_source pub fn to_portable_image_source(&self, image_object: libremetaverse_types::compat::Object) -> Result<libremetaverse_imaging::codec::BlkImgDataSrc, crate::Error> shared_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Imaging.ManagedImageCreator.Create(System.Int32,System.Int32,System.Int32,System.Byte[]) method CoreJ2K.Util.IImage LibreMetaverse.Imaging.ManagedImageCreator.Create(System.Int32 width, System.Int32 height, System.Int32 numComponents, System.Byte[] bytes) libremetaverse imaging libremetaverse::imaging::ManagedImageCreator::create pub fn create(&self, width: i32, height: i32, num_components: i32, bytes: Vec<u8>) -> Result<Box<dyn libremetaverse_imaging::codec::IImage>, crate::Error> shared_self,owned,owned,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Imaging.ManagedImageCreator.ToPortableImageSource(System.Object) method CoreJ2K.j2k.image.BlkImgDataSrc LibreMetaverse.Imaging.ManagedImageCreator.ToPortableImageSource(System.Object imageObject) libremetaverse imaging libremetaverse::imaging::ManagedImageCreator::to_portable_image_source pub fn to_portable_image_source(&self, image_object: libremetaverse_types::compat::Object) -> Result<Box<dyn libremetaverse_imaging::codec::BlkImgDataSrc>, crate::Error> shared_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Imaging.ManagedImageInterleavedExtensions.ToManagedImage(CoreJ2K.Util.InterleavedImage) method LibreMetaverse.Imaging.ManagedImage LibreMetaverse.Imaging.ManagedImageInterleavedExtensions.ToManagedImage(CoreJ2K.Util.InterleavedImage image) libremetaverse imaging libremetaverse::imaging::ManagedImageInterleavedExtensions::to_managed_image pub fn to_managed_image(image: libremetaverse_imaging::codec::InterleavedImage) -> Result<libremetaverse_imaging::ManagedImage, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Imaging.Skia.SkiaTextureCodec.#ctor constructor LibreMetaverse.Imaging.Skia.SkiaTextureCodec() libremetaverse-imaging-skia libremetaverse_imaging_skia::SkiaTextureCodec::new pub fn new() -> Result<Self, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Imaging.Skia.SkiaTextureCodec.Decode(System.IO.Stream) method LibreMetaverse.Imaging.ManagedImage LibreMetaverse.Imaging.Skia.SkiaTextureCodec.Decode(System.IO.Stream stream) libremetaverse-imaging-skia libremetaverse_imaging_skia::SkiaTextureCodec::decode pub fn decode(&self, stream: Box<dyn libremetaverse_types::compat::ReadWrite + Send>) -> Result<libremetaverse_imaging::ManagedImage, crate::Error> shared_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
@@ -11994,7 +11994,7 @@ M:LibreMetaverse.LoggedOutEventArgs.#ctor(System.Collections.Generic.List{LibreM
M:LibreMetaverse.Logger.BeginClientScope(LibreMetaverse.GridClient) method System.IDisposable LibreMetaverse.Logger.BeginClientScope(LibreMetaverse.GridClient client) libremetaverse libremetaverse::Logger::begin_client_scope pub fn begin_client_scope(client: libremetaverse::GridClient) -> Result<libremetaverse_types::compat::Close, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Logger.BeginRegionScope(LibreMetaverse.Simulator) method System.IDisposable LibreMetaverse.Logger.BeginRegionScope(LibreMetaverse.Simulator simulator) libremetaverse libremetaverse::Logger::begin_region_scope pub fn begin_region_scope(simulator: libremetaverse::Simulator) -> Result<libremetaverse_types::compat::Close, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Logger.BeginScope(System.Object) method System.IDisposable LibreMetaverse.Logger.BeginScope(System.Object state) libremetaverse libremetaverse::Logger::begin_scope pub fn begin_scope(state: libremetaverse_types::compat::Object) -> Result<libremetaverse_types::compat::Close, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Logger.CreateDefaultConsoleLoggerFactory method Microsoft.Extensions.Logging.ILoggerFactory LibreMetaverse.Logger.CreateDefaultConsoleLoggerFactory() libremetaverse libremetaverse::Logger::create_default_console_logger_factory pub fn create_default_console_logger_factory() -> Result<libremetaverse::logging::ILoggerFactory, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Logger.CreateDefaultConsoleLoggerFactory method Microsoft.Extensions.Logging.ILoggerFactory LibreMetaverse.Logger.CreateDefaultConsoleLoggerFactory() libremetaverse libremetaverse::Logger::create_default_console_logger_factory pub fn create_default_console_logger_factory() -> Result<Box<dyn libremetaverse::logging::ILoggerFactory>, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Logger.Critical(System.Object,LibreMetaverse.GridClient) method System.Void LibreMetaverse.Logger.Critical(System.Object message, LibreMetaverse.GridClient client = default) libremetaverse libremetaverse::Logger::critical_with_object_grid_client pub fn critical_with_object_grid_client(message: libremetaverse_types::compat::Object, client: Option<libremetaverse::GridClient>) -> Result<(), crate::Error> owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
M:LibreMetaverse.Logger.Critical(System.Object,System.Exception,LibreMetaverse.GridClient) method System.Void LibreMetaverse.Logger.Critical(System.Object message, System.Exception exception, LibreMetaverse.GridClient client = default) libremetaverse libremetaverse::Logger::critical_with_object_exception_grid_client pub fn critical_with_object_exception_grid_client(message: libremetaverse_types::compat::Object, exception: libremetaverse_types::compat::ExternalError, client: Option<libremetaverse::GridClient>) -> Result<(), crate::Error> owned,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
M:LibreMetaverse.Logger.Critical(System.Object,System.Exception,System.String) method System.Void LibreMetaverse.Logger.Critical(System.Object message, System.Exception exception, System.String clientName) libremetaverse libremetaverse::Logger::critical_with_object_exception_string pub fn critical_with_object_exception_string(message: libremetaverse_types::compat::Object, exception: libremetaverse_types::compat::ExternalError, client_name: String) -> Result<(), crate::Error> owned,owned,owned sync Result<_, crate::Error> descriptive_overload_name method mapped
@@ -12020,7 +12020,7 @@ M:LibreMetaverse.Logger.LogCallback.#ctor(System.Object,System.IntPtr) construct
M:LibreMetaverse.Logger.LogCallback.BeginInvoke(System.Object,Microsoft.Extensions.Logging.LogLevel,System.AsyncCallback,System.Object) method System.IAsyncResult LibreMetaverse.Logger.LogCallback.BeginInvoke(System.Object message, Microsoft.Extensions.Logging.LogLevel level, System.AsyncCallback callback, System.Object object) libremetaverse libremetaverse::LoggerLogCallback::begin_invoke pub fn begin_invoke(&self, message: libremetaverse_types::compat::Object, level: libremetaverse::logging::LogLevel, callback: Box<dyn Fn(&dyn std::any::Any) + Send + Sync>, object: libremetaverse_types::compat::Object) -> Result<Box<dyn std::any::Any + Send + Sync>, crate::Error> shared_self,owned,owned,owned,owned sync Result<_, crate::Error> direct_snake_case native_callback_replaces_delegate_apm intentional_difference
M:LibreMetaverse.Logger.LogCallback.EndInvoke(System.IAsyncResult) method System.Void LibreMetaverse.Logger.LogCallback.EndInvoke(System.IAsyncResult result) libremetaverse libremetaverse::LoggerLogCallback::end_invoke pub fn end_invoke(&self, result: Box<dyn std::any::Any + Send + Sync>) -> Result<(), crate::Error> shared_self,owned sync Result<_, crate::Error> direct_snake_case native_callback_replaces_delegate_apm intentional_difference
M:LibreMetaverse.Logger.LogCallback.Invoke(System.Object,Microsoft.Extensions.Logging.LogLevel) method System.Void LibreMetaverse.Logger.LogCallback.Invoke(System.Object message, Microsoft.Extensions.Logging.LogLevel level) libremetaverse libremetaverse::LoggerLogCallback::invoke pub fn invoke(&self, message: libremetaverse_types::compat::Object, level: libremetaverse::logging::LogLevel) -> Result<(), crate::Error> shared_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Logger.SetLoggerFactory(Microsoft.Extensions.Logging.ILoggerFactory,System.String) method System.Void LibreMetaverse.Logger.SetLoggerFactory(Microsoft.Extensions.Logging.ILoggerFactory factory, System.String name) libremetaverse libremetaverse::Logger::set_logger_factory pub fn set_logger_factory(factory: libremetaverse::logging::ILoggerFactory, name: String) -> Result<(), crate::Error> owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Logger.SetLoggerFactory(Microsoft.Extensions.Logging.ILoggerFactory,System.String) method System.Void LibreMetaverse.Logger.SetLoggerFactory(Microsoft.Extensions.Logging.ILoggerFactory factory, System.String name) libremetaverse libremetaverse::Logger::set_logger_factory pub fn set_logger_factory(factory: Box<dyn libremetaverse::logging::ILoggerFactory>, name: String) -> Result<(), crate::Error> owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Logger.Shutdown method System.Void LibreMetaverse.Logger.Shutdown() libremetaverse libremetaverse::Logger::shutdown_with_method pub fn shutdown_with_method() -> Result<(), crate::Error> none sync Result<_, crate::Error> descriptive_overload_name method mapped
M:LibreMetaverse.Logger.ShutdownAsync(System.Nullable{System.TimeSpan},System.Threading.CancellationToken) method System.Threading.Tasks.Task<System.Boolean> LibreMetaverse.Logger.ShutdownAsync(System.Nullable<System.TimeSpan> timeout = default, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::Logger::shutdown_with_nullable_cancellation_token pub async fn shutdown_with_nullable_cancellation_token(timeout: Option<Option<std::time::Duration>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<bool, crate::Error> optional_owned,optional_owned async Result<_, crate::Error> descriptive_overload_name method mapped
M:LibreMetaverse.Logger.Trace(System.Object,LibreMetaverse.GridClient) method System.Void LibreMetaverse.Logger.Trace(System.Object message, LibreMetaverse.GridClient client = default) libremetaverse libremetaverse::Logger::trace_with_object_grid_client pub fn trace_with_object_grid_client(message: libremetaverse_types::compat::Object, client: Option<libremetaverse::GridClient>) -> Result<(), crate::Error> owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
Can't render this file because it is too large.

View File

@@ -5,17 +5,17 @@ Generated by `python3 tools/generate_api_shims.py`; do not edit by hand.
| Assembly | Types | Members | Status |
|---|---:|---:|---|
| `LibreMetaverse` | 2,711 | 27,281 | pending milestone issue |
| `LibreMetaverse.Imaging.Abstractions` | 3 | 20 | pending milestone issue |
| `LibreMetaverse.Imaging.Skia` | 1 | 3 | pending milestone issue |
| `LibreMetaverse.Imaging.Abstractions` | 3 | 20 | callable failure-only shim |
| `LibreMetaverse.Imaging.Skia` | 1 | 3 | callable failure-only shim |
| `LibreMetaverse.LslTools` | 164 | 768 | pending milestone issue |
| `LibreMetaverse.PrimMesher` | 17 | 207 | pending milestone issue |
| `LibreMetaverse.PrimMesher` | 17 | 207 | callable failure-only shim |
| `LibreMetaverse.RLV` | 28 | 499 | pending milestone issue |
| `LibreMetaverse.Rendering.MeshFoundry` | 1 | 14 | pending milestone issue |
| `LibreMetaverse.Rendering.Simple` | 1 | 6 | pending milestone issue |
| `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 | callable failure-only shim |
| `LibreMetaverse.Utilities` | 3 | 13 | pending milestone issue |
| `LibreMetaverse.Voice.Vivox` | 64 | 531 | pending milestone issue |
| `LibreMetaverse.Voice.WebRTC` | 12 | 210 | pending milestone issue |
Current callable coverage: **61 types / 1,237 members**.
Current callable coverage: **84 types / 1,487 members**.

View File

@@ -1,11 +1,35 @@
// @generated by tools/generate_surface.py; do not edit by hand.
// Source: LibreMetaverse 2aa70bb68513b39795da5d13c88f31b86e85a3ba
// @generated by tools/generate_api_shims.py; do not edit by hand.
#![allow(clippy::missing_errors_doc)]
#![allow(clippy::must_use_candidate)]
#![allow(clippy::all, clippy::pedantic, dead_code, unused_variables)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
/// `class` shim for C# `LibreMetaverse.Imaging.Skia.SkiaTextureCodec`; members remain intentionally unimplemented.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
/// C# type: `T:LibreMetaverse.Imaging.Skia.SkiaTextureCodec`.
pub struct SkiaTextureCodec;
impl SkiaTextureCodec {
pub const CSHARP_NAME: &'static str = "LibreMetaverse.Imaging.Skia.SkiaTextureCodec";
pub const CSHARP_KIND: &'static str = "class";
/// C# member: `M:LibreMetaverse.Imaging.Skia.SkiaTextureCodec.#ctor`.
pub fn new() -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.Skia.SkiaTextureCodec.#ctor",
)
}
/// C# member: `M:LibreMetaverse.Imaging.Skia.SkiaTextureCodec.Decode(System.IO.Stream)`.
pub fn decode(
&self,
stream: Box<dyn libremetaverse_types::compat::ReadWrite + Send>,
) -> Result<libremetaverse_imaging::ManagedImage, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.Skia.SkiaTextureCodec.Decode(System.IO.Stream)",
)
}
/// C# member: `M:LibreMetaverse.Imaging.Skia.SkiaTextureCodec.ToManagedImage(SkiaSharp.SKBitmap)`.
pub fn to_managed_image(
bitmap: libremetaverse_imaging_skia::backend::SKBitmap,
) -> Result<libremetaverse_imaging::ManagedImage, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.Skia.SkiaTextureCodec.ToManagedImage(SkiaSharp.SKBitmap)",
)
}
}
impl libremetaverse_imaging::ITextureCodec for SkiaTextureCodec {}

View File

@@ -1,5 +1,12 @@
//! Skia imaging adapter corresponding to `LibreMetaverse.Imaging.Skia`.
extern crate self as libremetaverse_imaging_skia;
pub mod backend {
/// Project-owned bitmap boundary; no `SkiaSharp` API is copied.
pub struct SKBitmap;
}
mod generated;
pub use generated::*;

View File

@@ -1,24 +1,100 @@
// @generated by tools/generate_surface.py; do not edit by hand.
// Source: LibreMetaverse 2aa70bb68513b39795da5d13c88f31b86e85a3ba
// @generated by tools/generate_api_shims.py; do not edit by hand.
#![allow(clippy::missing_errors_doc)]
#![allow(clippy::must_use_candidate)]
#![allow(clippy::all, clippy::pedantic, dead_code, unused_variables)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
/// Shim for C# `LibreMetaverse.Imaging.ITextureCodec`.
/// C# type: `T:LibreMetaverse.Imaging.ITextureCodec`.
pub trait ITextureCodec {
const CSHARP_NAME: &'static str = "LibreMetaverse.Imaging.ITextureCodec";
/// C# member: `M:LibreMetaverse.Imaging.ITextureCodec.Decode(System.IO.Stream)`.
fn decode(
&self,
stream: Box<dyn libremetaverse_types::compat::ReadWrite + Send>,
) -> Result<libremetaverse_imaging::ManagedImage, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.ITextureCodec.Decode(System.IO.Stream)",
)
}
}
/// `enum` shim for C# `LibreMetaverse.Imaging.ImageChannels`; members remain intentionally unimplemented.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ImageChannels;
impl ImageChannels {
pub const CSHARP_NAME: &'static str = "LibreMetaverse.Imaging.ImageChannels";
pub const CSHARP_KIND: &'static str = "enum";
/// C# type: `T:LibreMetaverse.Imaging.ManagedImage`.
pub struct ManagedImage {
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Alpha`.
pub alpha: Vec<u8>,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Blue`.
pub blue: Vec<u8>,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Bump`.
pub bump: Vec<u8>,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Channels`.
pub channels: libremetaverse_imaging::ManagedImageImageChannels,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Green`.
pub green: Vec<u8>,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Height`.
pub height: i32,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Red`.
pub red: Vec<u8>,
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.Width`.
pub width: i32,
data: Vec<u8>,
}
/// `class` shim for C# `LibreMetaverse.Imaging.ManagedImage`; members remain intentionally unimplemented.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ManagedImage;
impl ManagedImage {
pub const CSHARP_NAME: &'static str = "LibreMetaverse.Imaging.ManagedImage";
pub const CSHARP_KIND: &'static str = "class";
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.#ctor(System.Int32,System.Int32,LibreMetaverse.Imaging.ManagedImage.ImageChannels)`.
pub fn new(
width: i32,
height: i32,
channels: libremetaverse_imaging::ManagedImageImageChannels,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.ManagedImage.#ctor(System.Int32,System.Int32,LibreMetaverse.Imaging.ManagedImage.ImageChannels)",
)
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.Clear`.
pub fn clear(&self) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Imaging.ManagedImage.Clear")
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.Clone`.
pub fn clone(&self) -> Result<libremetaverse_imaging::ManagedImage, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Imaging.ManagedImage.Clone")
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ConvertChannels(LibreMetaverse.Imaging.ManagedImage.ImageChannels)`.
pub fn convert_channels(
&self,
channels: libremetaverse_imaging::ManagedImageImageChannels,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.ManagedImage.ConvertChannels(LibreMetaverse.Imaging.ManagedImage.ImageChannels)",
)
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ExportRaw`.
pub fn export_raw(&self) -> Result<Vec<u8>, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Imaging.ManagedImage.ExportRaw")
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ResizeBilinear(System.Int32,System.Int32)`.
pub fn resize_bilinear(&self, width: i32, height: i32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.ManagedImage.ResizeBilinear(System.Int32,System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.Imaging.ManagedImage.ResizeNearestNeighbor(System.Int32,System.Int32)`.
pub fn resize_nearest_neighbor(&self, width: i32, height: i32) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Imaging.ManagedImage.ResizeNearestNeighbor(System.Int32,System.Int32)",
)
}
}
/// C# type: `T:LibreMetaverse.Imaging.ManagedImage.ImageChannels`.
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[repr(transparent)]
pub struct ManagedImageImageChannels(pub i32);
impl ManagedImageImageChannels {
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Alpha`.
pub const ALPHA: Self = Self(4);
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Bump`.
pub const BUMP: Self = Self(8);
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Color`.
pub const COLOR: Self = Self(2);
/// C# member: `F:LibreMetaverse.Imaging.ManagedImage.ImageChannels.Gray`.
pub const GRAY: Self = Self(1);
}

View File

@@ -1,5 +1,15 @@
//! Imaging abstractions corresponding to `LibreMetaverse.Imaging.Abstractions`.
extern crate self as libremetaverse_imaging;
pub mod codec {
pub trait IImage {}
pub trait IImageCreator {}
pub struct ImageCreator<T>(pub std::marker::PhantomData<T>);
pub struct InterleavedImage;
pub struct BlkImgDataSrc;
}
mod generated;
pub use generated::*;

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,7 @@
//! Primitive mesher corresponding to `LibreMetaverse.PrimMesher`.
extern crate self as libremetaverse_prim_mesher;
mod generated;
pub use generated::*;

View File

@@ -1,11 +1,154 @@
// @generated by tools/generate_surface.py; do not edit by hand.
// Source: LibreMetaverse 2aa70bb68513b39795da5d13c88f31b86e85a3ba
// @generated by tools/generate_api_shims.py; do not edit by hand.
#![allow(clippy::missing_errors_doc)]
#![allow(clippy::must_use_candidate)]
#![allow(clippy::all, clippy::pedantic, dead_code, unused_variables)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
/// `class` shim for C# `LibreMetaverse.Rendering.MeshFoundry`; members remain intentionally unimplemented.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
/// C# type: `T:LibreMetaverse.Rendering.MeshFoundry`.
pub struct MeshFoundry;
impl MeshFoundry {
pub const CSHARP_NAME: &'static str = "LibreMetaverse.Rendering.MeshFoundry";
pub const CSHARP_KIND: &'static str = "class";
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.#ctor`.
pub fn new() -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Rendering.MeshFoundry.#ctor")
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.GenerateFacetedMesh(LibreMetaverse.Primitive,LibreMetaverse.Rendering.DetailLevel)`.
pub fn generate_faceted_mesh(
&self,
prim: libremetaverse::Primitive,
lod: libremetaverse::rendering::DetailLevel,
) -> Result<Option<libremetaverse::rendering::FacetedMesh>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.GenerateFacetedMesh(LibreMetaverse.Primitive,LibreMetaverse.Rendering.DetailLevel)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.GenerateFacetedMeshMesh(LibreMetaverse.Primitive,System.Byte[])`.
pub fn generate_faceted_mesh_mesh_with_primitive_bytes(
&self,
prim: libremetaverse::Primitive,
mesh_data: Vec<u8>,
) -> Result<Option<libremetaverse::rendering::FacetedMesh>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.GenerateFacetedMeshMesh(LibreMetaverse.Primitive,System.Byte[])",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.GenerateFacetedMeshMesh(LibreMetaverse.Primitive,System.Byte[],LibreMetaverse.Rendering.DetailLevel)`.
pub fn generate_faceted_mesh_mesh_with_primitive_bytes_detail_level(
&self,
prim: libremetaverse::Primitive,
mesh_data: Vec<u8>,
lod: libremetaverse::rendering::DetailLevel,
) -> Result<Option<libremetaverse::rendering::FacetedMesh>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.GenerateFacetedMeshMesh(LibreMetaverse.Primitive,System.Byte[],LibreMetaverse.Rendering.DetailLevel)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.GenerateFacetedSculptMesh(LibreMetaverse.Primitive,LibreMetaverse.Imaging.ManagedImage,LibreMetaverse.Rendering.DetailLevel)`.
pub fn generate_faceted_sculpt_mesh(
&self,
prim: libremetaverse::Primitive,
sculpt_texture: libremetaverse_imaging::ManagedImage,
lod: libremetaverse::rendering::DetailLevel,
) -> Result<Option<libremetaverse::rendering::FacetedMesh>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.GenerateFacetedSculptMesh(LibreMetaverse.Primitive,LibreMetaverse.Imaging.ManagedImage,LibreMetaverse.Rendering.DetailLevel)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.GenerateSimpleMesh(LibreMetaverse.Primitive,LibreMetaverse.Rendering.DetailLevel)`.
pub fn generate_simple_mesh(
&self,
prim: libremetaverse::Primitive,
lod: libremetaverse::rendering::DetailLevel,
) -> Result<Option<libremetaverse::rendering::SimpleMesh>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.GenerateSimpleMesh(LibreMetaverse.Primitive,LibreMetaverse.Rendering.DetailLevel)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.GenerateSimpleMeshWithNormals(LibreMetaverse.Primitive,LibreMetaverse.Rendering.DetailLevel)`.
pub fn generate_simple_mesh_with_normals(
&self,
prim: libremetaverse::Primitive,
lod: libremetaverse::rendering::DetailLevel,
) -> Result<Option<libremetaverse::rendering::SimpleMesh>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.GenerateSimpleMeshWithNormals(LibreMetaverse.Primitive,LibreMetaverse.Rendering.DetailLevel)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.GenerateSimpleSculptMesh(LibreMetaverse.Primitive,LibreMetaverse.Imaging.ManagedImage,LibreMetaverse.Rendering.DetailLevel)`.
pub fn generate_simple_sculpt_mesh(
&self,
prim: libremetaverse::Primitive,
sculpt_texture: libremetaverse_imaging::ManagedImage,
lod: libremetaverse::rendering::DetailLevel,
) -> Result<Option<libremetaverse::rendering::SimpleMesh>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.GenerateSimpleSculptMesh(LibreMetaverse.Primitive,LibreMetaverse.Imaging.ManagedImage,LibreMetaverse.Rendering.DetailLevel)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.MeshSubMeshAsConvexHulls(LibreMetaverse.Primitive,System.Byte[])`.
pub fn mesh_sub_mesh_as_convex_hulls_with_primitive_bytes(
&self,
prim: libremetaverse::Primitive,
compressed_mesh_data: Vec<u8>,
) -> Result<Vec<Vec<libremetaverse_types::Vector3>>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.MeshSubMeshAsConvexHulls(LibreMetaverse.Primitive,System.Byte[])",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.MeshSubMeshAsConvexHulls(LibreMetaverse.Primitive,System.Byte[],System.Collections.Generic.List{LibreMetaverse.Vector3}@)`.
pub fn mesh_sub_mesh_as_convex_hulls_with_primitive_bytes_list(
&self,
prim: libremetaverse::Primitive,
compressed_mesh_data: Vec<u8>,
bounding_hull: &mut Vec<libremetaverse_types::Vector3>,
) -> Result<Vec<Vec<libremetaverse_types::Vector3>>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.MeshSubMeshAsConvexHulls(LibreMetaverse.Primitive,System.Byte[],System.Collections.Generic.List{LibreMetaverse.Vector3}@)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.MeshSubMeshAsSimpleMesh(LibreMetaverse.Primitive,System.Byte[])`.
pub fn mesh_sub_mesh_as_simple_mesh(
&self,
prim: libremetaverse::Primitive,
compressed_mesh_data: Vec<u8>,
) -> Result<Option<libremetaverse::rendering::SimpleMesh>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.MeshSubMeshAsSimpleMesh(LibreMetaverse.Primitive,System.Byte[])",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.TerrainMesh(System.Single[0:,0:],System.Single,System.Single,System.Single,System.Single)`.
pub fn terrain_mesh(
&self,
z_map: Vec<f32>,
x_begin: f32,
x_end: f32,
y_begin: f32,
y_end: f32,
) -> Result<libremetaverse::rendering::Face, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.TerrainMesh(System.Single[0:,0:],System.Single,System.Single,System.Single,System.Single)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.TransformTexCoords(System.Collections.Generic.List{LibreMetaverse.Rendering.Vertex},LibreMetaverse.Vector3,LibreMetaverse.Primitive.TextureEntryFace,LibreMetaverse.Vector3)`.
pub fn transform_tex_coords(
&self,
vertices: Vec<libremetaverse::rendering::Vertex>,
center: libremetaverse_types::Vector3,
te_face: libremetaverse::PrimitiveTextureEntryFace,
prim_scale: libremetaverse_types::Vector3,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.TransformTexCoords(System.Collections.Generic.List{LibreMetaverse.Rendering.Vertex},LibreMetaverse.Vector3,LibreMetaverse.Primitive.TextureEntryFace,LibreMetaverse.Vector3)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.MeshFoundry.UnpackMesh(System.Byte[])`.
pub fn unpack_mesh(
&self,
asset_data: Vec<u8>,
) -> Result<Option<libremetaverse_structured_data::OSDMap>, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.MeshFoundry.UnpackMesh(System.Byte[])",
)
}
}
impl libremetaverse::rendering::IRendering for MeshFoundry {}

View File

@@ -1,5 +1,7 @@
//! `MeshFoundry` renderer corresponding to `LibreMetaverse.Rendering.MeshFoundry`.
extern crate self as libremetaverse_rendering_mesh_foundry;
mod generated;
pub use generated::*;

View File

@@ -9,6 +9,7 @@ description = "Simple renderer shims for the MetaCrate LibreMetaverse rewrite"
[dependencies]
libremetaverse = { path = "../libremetaverse" }
libremetaverse-imaging = { path = "../libremetaverse-imaging" }
libremetaverse-types = { path = "../libremetaverse-types" }
[lints]

View File

@@ -1,11 +1,70 @@
// @generated by tools/generate_surface.py; do not edit by hand.
// Source: LibreMetaverse 2aa70bb68513b39795da5d13c88f31b86e85a3ba
// @generated by tools/generate_api_shims.py; do not edit by hand.
#![allow(clippy::missing_errors_doc)]
#![allow(clippy::must_use_candidate)]
#![allow(clippy::all, clippy::pedantic, dead_code, unused_variables)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
/// `class` shim for C# `LibreMetaverse.Rendering.SimpleRenderer`; members remain intentionally unimplemented.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
/// C# type: `T:LibreMetaverse.Rendering.SimpleRenderer`.
pub struct SimpleRenderer;
impl SimpleRenderer {
pub const CSHARP_NAME: &'static str = "LibreMetaverse.Rendering.SimpleRenderer";
pub const CSHARP_KIND: &'static str = "class";
/// C# member: `M:LibreMetaverse.Rendering.SimpleRenderer.#ctor`.
pub fn new() -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Rendering.SimpleRenderer.#ctor")
}
/// C# member: `M:LibreMetaverse.Rendering.SimpleRenderer.GenerateFacetedMesh(LibreMetaverse.Primitive,LibreMetaverse.Rendering.DetailLevel)`.
pub fn generate_faceted_mesh(
&self,
prim: libremetaverse::Primitive,
lod: libremetaverse::rendering::DetailLevel,
) -> Result<libremetaverse::rendering::FacetedMesh, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.SimpleRenderer.GenerateFacetedMesh(LibreMetaverse.Primitive,LibreMetaverse.Rendering.DetailLevel)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.SimpleRenderer.GenerateFacetedSculptMesh(LibreMetaverse.Primitive,LibreMetaverse.Imaging.ManagedImage,LibreMetaverse.Rendering.DetailLevel)`.
pub fn generate_faceted_sculpt_mesh(
&self,
prim: libremetaverse::Primitive,
sculpt_texture: libremetaverse_imaging::ManagedImage,
lod: libremetaverse::rendering::DetailLevel,
) -> Result<libremetaverse::rendering::FacetedMesh, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.SimpleRenderer.GenerateFacetedSculptMesh(LibreMetaverse.Primitive,LibreMetaverse.Imaging.ManagedImage,LibreMetaverse.Rendering.DetailLevel)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.SimpleRenderer.GenerateSimpleMesh(LibreMetaverse.Primitive,LibreMetaverse.Rendering.DetailLevel)`.
pub fn generate_simple_mesh(
&self,
prim: libremetaverse::Primitive,
lod: libremetaverse::rendering::DetailLevel,
) -> Result<libremetaverse::rendering::SimpleMesh, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.SimpleRenderer.GenerateSimpleMesh(LibreMetaverse.Primitive,LibreMetaverse.Rendering.DetailLevel)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.SimpleRenderer.GenerateSimpleSculptMesh(LibreMetaverse.Primitive,LibreMetaverse.Imaging.ManagedImage,LibreMetaverse.Rendering.DetailLevel)`.
pub fn generate_simple_sculpt_mesh(
&self,
prim: libremetaverse::Primitive,
sculpt_texture: libremetaverse_imaging::ManagedImage,
lod: libremetaverse::rendering::DetailLevel,
) -> Result<libremetaverse::rendering::SimpleMesh, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.SimpleRenderer.GenerateSimpleSculptMesh(LibreMetaverse.Primitive,LibreMetaverse.Imaging.ManagedImage,LibreMetaverse.Rendering.DetailLevel)",
)
}
/// C# member: `M:LibreMetaverse.Rendering.SimpleRenderer.TransformTexCoords(System.Collections.Generic.List{LibreMetaverse.Rendering.Vertex},LibreMetaverse.Vector3,LibreMetaverse.Primitive.TextureEntryFace,LibreMetaverse.Vector3)`.
pub fn transform_tex_coords(
&self,
vertices: Vec<libremetaverse::rendering::Vertex>,
center: libremetaverse_types::Vector3,
te_face: libremetaverse::PrimitiveTextureEntryFace,
prim_scale: libremetaverse_types::Vector3,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Rendering.SimpleRenderer.TransformTexCoords(System.Collections.Generic.List{LibreMetaverse.Rendering.Vertex},LibreMetaverse.Vector3,LibreMetaverse.Primitive.TextureEntryFace,LibreMetaverse.Vector3)",
)
}
}
impl libremetaverse::rendering::IRendering for SimpleRenderer {}

View File

@@ -1,5 +1,7 @@
//! Simple renderer corresponding to `LibreMetaverse.Rendering.Simple`.
extern crate self as libremetaverse_rendering_simple;
mod generated;
pub use generated::*;

View File

@@ -54,6 +54,9 @@ pub struct IEqualityComparer<T>(pub PhantomData<fn(T)>);
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct StringReader(pub String);
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct StreamReader(pub Vec<u8>);
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct StringWriter(pub String);

View File

@@ -2,6 +2,7 @@
mod generated;
pub use TextureEntryFace as PrimitiveTextureEntryFace;
pub use generated::*;
pub use libremetaverse_imaging as imaging_abstractions;
pub use libremetaverse_structured_data as structured_data;

View File

@@ -0,0 +1,42 @@
use libremetaverse::Primitive;
use libremetaverse::rendering::{DetailLevel, SimpleMesh};
use libremetaverse_prim_mesher::PrimMesh;
use libremetaverse_rendering_mesh_foundry::MeshFoundry;
use libremetaverse_rendering_simple::SimpleRenderer;
#[test]
fn mesh_and_renderer_calls_compile_with_typed_elements() {
let _: fn(i32, f32, f32, f32, i32) -> Result<PrimMesh, libremetaverse_prim_mesher::Error> =
PrimMesh::new;
let _: fn(
&SimpleRenderer,
Primitive,
DetailLevel,
) -> Result<SimpleMesh, libremetaverse_rendering_simple::Error> =
SimpleRenderer::generate_simple_mesh;
let _: fn(
&MeshFoundry,
Primitive,
DetailLevel,
) -> Result<Option<SimpleMesh>, libremetaverse_rendering_mesh_foundry::Error> =
MeshFoundry::generate_simple_mesh;
}
#[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(),
"M:LibreMetaverse.PrimMesher.PrimMesh.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Int32)"
);
let Err(renderer_error) = SimpleRenderer::new() else {
panic!("failure-only renderer constructor unexpectedly returned a value");
};
assert_eq!(
renderer_error.csharp_member(),
"M:LibreMetaverse.Rendering.SimpleRenderer.#ctor"
);
}

View File

@@ -19,6 +19,11 @@ LEDGER = ROOT / "api/RUST-MAPPING.tsv"
COVERAGE = ROOT / "api/SHIM-COVERAGE.md"
TARGETS = {
"LibreMetaverse.Imaging.Abstractions": ROOT / "crates/libremetaverse-imaging/src/generated.rs",
"LibreMetaverse.Imaging.Skia": ROOT / "crates/libremetaverse-imaging-skia/src/generated.rs",
"LibreMetaverse.PrimMesher": ROOT / "crates/libremetaverse-prim-mesher/src/generated.rs",
"LibreMetaverse.Rendering.MeshFoundry": ROOT / "crates/libremetaverse-rendering-mesh-foundry/src/generated.rs",
"LibreMetaverse.Rendering.Simple": ROOT / "crates/libremetaverse-rendering-simple/src/generated.rs",
"LibreMetaverse.Types": ROOT / "crates/libremetaverse-types/src/generated.rs",
"LibreMetaverse.StructuredData": ROOT / "crates/libremetaverse-structured-data/src/generated.rs",
}
@@ -52,6 +57,7 @@ PRIVATE_LAYOUTS = {
"T:LibreMetaverse.StructuredData.OSDString": [("value", "String")],
"T:LibreMetaverse.StructuredData.OSDUUID": [("value", "libremetaverse_types::UUID")],
"T:LibreMetaverse.StructuredData.OSDUri": [("value", "libremetaverse_types::compat::Uri")],
"T:LibreMetaverse.Imaging.ManagedImage": [("data", "Vec<u8>")],
}
@@ -65,8 +71,10 @@ def format_rust(source: str) -> str:
input=source,
text=True,
capture_output=True,
check=True,
check=False,
)
if result.returncode:
raise ValueError(result.stderr.strip())
return result.stdout
@@ -183,7 +191,7 @@ def render_type(item: dict, type_row: dict, member_rows: dict[str, dict[str, str
if not trait:
for interface in item.get("interfaces", []):
base, arguments, _ = mapping.type_parts(interface)
if base not in mapper.interfaces:
if base not in mapper.interfaces or not base.startswith("LibreMetaverse."):
continue
mapped_arguments = [mapper.type(argument, None, set(names)) for argument in arguments]
trait_path = mapper.resolved[base] + generic_suffix(mapped_arguments)
@@ -194,7 +202,14 @@ def render_type(item: dict, type_row: dict, member_rows: dict[str, dict[str, str
def generate_sources(catalog: dict) -> tuple[dict[Path, str], dict[str, tuple[int, int]]]:
type_rows, resolved = mapping.build_type_rows(catalog)
type_by_id = {row["csharp_type_id"]: row for row in type_rows}
interfaces = {mapping.type_parts(item["signature"])[0] for assembly in catalog["assemblies"] for item in assembly["types"] if item["kind"] == "interface"}
interfaces = {
*{mapping.type_parts(item["signature"])[0] for assembly in catalog["assemblies"] for item in assembly["types"] if item["kind"] == "interface"},
*{
mapping.type_parts(item["signature"])[0]
for item in catalog["external_types"]
if item["kind"] == "interface" and not item["assembly"]["name"].startswith("System")
},
}
mapper = mapping.Mapper(resolved, interfaces)
member_rows = {row["csharp_id"]: row for row in csv.DictReader(LEDGER.open(), delimiter="\t")}
outputs = {}

View File

@@ -826,7 +826,14 @@ def coverage_report(catalog: dict, type_rows: list[dict[str, str]], member_rows:
def generate() -> dict[Path, str]:
catalog = json.loads(CATALOG.read_text())
type_rows, resolved = build_type_rows(catalog)
interfaces = {type_parts(item["signature"])[0] for assembly in catalog["assemblies"] for item in assembly["types"] if item["kind"] == "interface"}
interfaces = {
*{type_parts(item["signature"])[0] for assembly in catalog["assemblies"] for item in assembly["types"] if item["kind"] == "interface"},
*{
type_parts(item["signature"])[0]
for item in catalog["external_types"]
if item["kind"] == "interface" and not item["assembly"]["name"].startswith("System")
},
}
mapper = Mapper(resolved, interfaces)
member_rows = build_member_rows(catalog, mapper)
validate(catalog, type_rows, member_rows, mapper)