# `ark-api-ffi` changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased - **social** Added support for filtering relationships using a bitmask via `get_relationships_with_filter` ### Added ⭐ - **telemetry** Added function to telemetry API that allows sending events associated with a specific player. - **world** Added `Environment::SunIntensity` - **world** Added `Physics::NonUniformScale` - **world** Added `Render::NonUniformScale` - **world** Added `try_get_entity_value` and `try_set_entity_value` functions to the world API, to allow safely adding and getting entity component parameter values. - **applet** Added `detach_player_*` APIs for detaching players to a new instance of the same applet with different launch arguments. - **applet** Added `get_session_id` which allows retrieving the current session ID, common to all detached applet instances and the root applet instance they came from. A sentinel value `LOCAL_SESSION` may be returned by this function, which indicates this is a local (non-multiplayer) session. - **applet** Added new `ark_applet_hot_reload` which allows circumventing the process of spawning new servers when it's not required, after a detach player request. Users must call the `notify_finish_hot_reload()` API function once the hot-reload has completed. - **applet** Added `EventType2::Rotation` to communicate client-side controlled camera rotations. - **ml** Added `raw_experiment_config_from_registry` function, retrieving a JSON blob from a training server without parsing it. Also utility functions `{poll,take}_future_string` to help drive the async host APIs. - **ml** new V5 API supplanting the `start_training` API with a more direct API with fewer intermediate types. - **ml** new V5 submit APIs that do not require pre-allocating the response on the client side. - **core** Added new debug context properties that a module can add and remove to describe key state of a module which will be gathered and displayed if a module crashes, to help with debugging and figuring out why the module crashed - **storage** Added `store_async_open` / `store_async_poll_open` which allow opening a store (sync or async) in the background. - **feature-toggle** Introduced new API that allows to read the values of feature toggles at runtime. - **ml-inference** Introduced new API for optimized ML inference at runtime. - **http-client** Introduced new API for stateful HTTP and GRPC. - **system-metrics** Introduced new API for giving access to current system metrics, such as CPU, disk, and memory usage - **world** Added `impulse` to `OnCollision`. - **world** Added `get_collided_entity_pairs`, `get_collision_info`, `get_all_collision_info`, `get_ended_collision_entity_pairs`, `get_started_trigger_entity_pairs` and `get_ended_trigger_entity_pairs`. - **world** Added `EntityPair` and `CollisionInfo`. - **world** Added `exclude_from_shared_body` to enable excluding entities from shared physics bodies. - **world** Added `RotationGrabFingerId` integer param for `Camera` components and `NO_FINGER_GRAB` ID constant. These allow modules to grant the host a (single-finger) grab for rotating the camera. - **content-moderation** Introduced new API for functionality to moderate content and filter user input texts. - **render** Added `get_mesh_bounds()` - **render** Added `fov_y` to `RenderFrameData` & `RenderFrameInfo` - **applet** Added support for cancelling `DetachPlayerRequest` - **world** Added `MeshTransformed` data type, for retransformed mesh data. - **world** Added `COMPUTE_INTERIOR_PENETRATION_DEPTH` flag to get penetration depth for initial overlaps in shapecasts. - **world** Impulse in `get_collision_info` now match the pair order in the query - **social** Added Social FFI API and host dummy implementation - **applet** Added `get_region_id()`, an arbitrary server region ID. Note that it may change between versions. - **behavior** Added allocate_actor_id, versioned_actors_with_aspect, aspect_get_with_version that supports a 64-bit ActorIdWithVersion instead of the deprecated ActorId - **world** Added `INVALID` constant to `RaycastHit`, equivalent to the value that `invalid()` used to return. - **world** Added `DOUBLE_SIDED_MESH_TEST` flag to detect initial overlaps in triangle meshes when casting rays or shapes. - **ml-inference** Added `onnx_to_cervo()` and `SnapshotFormat` - **applet** Added `set_player_cursor_mode()` and `reset_player_cursor_mode()`. - **applet** Added `open_player_url()`. - **applet** Replaced `events_get()` and `events_count()` with `events_get2()` and `events_count2()`. - **world** Added `SoftContact`, `SoftContactDamping` and `SoftContactStiffness` properties to Physics component. - **world** Added support for Reduced Coordinate Articulation (again) with two new components: `Articulation` and `ArticulationJoint`. - **profiler** Introduce `v1` of the Profiler API, where scope metadata is sent only once initially. - **report** Introduced new API for functionality for sending player reports from within a module. - **user** Added `full_display_name_of()` to get full unique username for a player. - **user** Added `access_flags_of()` to get access flags for a player. - **world** Added `closest_point_query()`. - **world** Added support for setting unstable dynamic parameters to `set_entity_values`, and for resetting them using `reset_unstable_dynamic_values`. - **world** Added ArticulationJoint: `DriveTargetPosition` and `DriveTargetOrientation`. More convenient than the low low level per axis params. - **world** Added ArticulationJoint: `DriveTargetLinearVelocity` and `DriveTargetAngularVelocity`. More consistent with drive target pose. - **world** Added ArticulationJoint: `Position` and `Orientation`. More convenient than `LinearPosition` and `AngularPosition`. - **world** Added `ArticulationJoint::DriveEnabled`. A convenience param for toggling drives on and off. ### Changed 🔧 - **world** Renamed `Environment::SkyExposure` to `Environment::SkyIntensity` - Require Rust 1.75.0 - Upgraded to `speedy` 0.8.4 to use new `glam` - Upgraded `num_enum` v0.6 -> v0.7 - Upgrade public-api `v0.30` -> `v0.32` & pinned nightly to 2023-08-25 - **world** All spatial queries is using PhysX by default, `SpatialQueryOptions::PHYSX_QUERY` nolonger needs to be specified. ### Removed 🔥 - **world** Removed `PhysicsCharacter` component. - **world** Removed `Joint` component. - **world** Removed `push_message`, `pop_message`, `has_message` in favour of `send_messages`, `retrieve_messages` and `get_message_counts`. - **world** Removed external mesh style support for `RenderComponent` - **world** Removed deprecated `raycast()` and `raycast_batched()` in favor of `spherecast_batched2`. - **world** Removed deprecated `spherecast()` and `spherecast_batched()` in favor of `spherecast_batched2()`. - **world** Removed `invalid()` from `RaycastHit`, replaced by `INVALID` constant. - **world** Removed deprecated and unused `ray_cast()`, use `spherecast_batched2()` instead. - **profiler** Removed support for `v0` of the Profiler API (only backed by empty stubs). - **world** Removed ArticulationJoint: `DriveTargetPositionX`, `DriveTargetPositionY`, `DriveTargetPositionZ`, `DriveTargetPositionTwist`, `DriveTargetPositionSwing1`, `DriveTargetPositionSwing2` - **world** Removed ArticulationJoint: `DriveTargetVelocityX`, `DriveTargetVelocityY`, `DriveTargetVelocityZ`, `DriveTargetVelocityTwist`, `DriveTargetVelocitySwing1`, `DriveTargetVelocitySwing2` - **world** Removed ArticulationJoint: `LinearPosition`, `AngularPosition`, Instead use `Position` and `Orientation`. ### Deprecated ⌚ - **world** Deprecated `EntityValueType::EntityLocalTransform`, `EntityValueType::EntityWorldTransform`, `EntityValueType::EntityWorldTransformAffine3` in favour of `EntityValueType::EntityLocalTransformConformal3`, `EntityValueType::EntityWorldTransformConformal3`. Deprecated `Transform::Scale`, `Transform::WorldScale` in favor of `Transform::ScaleUniform`, `Transform::WorldScaleUniform`. - **world** Deprecated `force` in `OnCollision`. - **world** `SpatialQueryOptions::PHYSX_QUERY` is deprecated, as it is set by default. - **world** Deprecated `PlayerIdSet` (renamed to `PlayerIdSetLegacy`) in favour of a new `PlayerIdSet` that expects a bitset instead of a slice of players. - **world** Deprecated `AudioSource::AllowInterruption`. ### Fixed 🐛 - Fixed incorrect `Semver` comparison between pre-releases and non-pre releases. ### Unstable 🚧 - **servlet** Added initial support for _servlet_ modules that act as small web services responding to HTTP requests ## 0.16.0 - 2022-08-31 ### Added ⭐ - **ml** Added variant `SnapshotFormat::Cervo`. - **ml** New function: `onnx_to_cervo`. Given a buffer of ONNX byte-data, converts it to a Cervo-wrapped NNEF brain instead. - Added `ErrorCode::HttpRequestFailed`. - **world** Added functionality for setting and getting the world transforms as Affine3 - Building with this crate now embeds the crate version into a global into the built WASM module that can be used for debugging & validation purposes. ### Changed 🔧 - **ml** `SnapshotFormat` enum is now serializable - **ml** The `start_tract_inference` function now supports `SnapshotFormat::Cervo`. - **world** The `messages` and `properties` modules have been remove & flattened into the `world_v0` module - Require Rust 1.63 (properly through crate configuration). - API versions no longer re-exports previous API versions, but only the types they use ### Deprecated ⌚ - Added the `#[deprecated]` attribute to a significant amount of functions & types that had been deprecated for over a year but only with comments ## 0.15.1 - 2022-07-08 ### Changed 🔧 - Upgraded to `speedy` 0.8.2 which includes our required [`glam` support PR](https://github.com/koute/speedy/pull/13). - Require Rust 1.62 (properly through crate configuration). ## 0.15.0 - 2022-07-08 First public version published on crates.io 🎉 ### Added ⭐ - **behavior-controller** Added new API which provides functionality to indirectly communicate with external behavior modules. - **behavior** Added new API which provides functionality for a behavior module to communicate with the rest of the world. - **behavior** Added `actors_with_aspect` which returns serialized byte vector containing all actors with a specific aspect - **behavior** Added global persist and restore entrypoints to be able to respawn behavior modules upon failure. - **applet** Added `request_quit`. This can be used to quit an applet which is useful if it is running headless without user input. - **render** Added the immediate mode `Render` API for drawing things on the screen. In its current form, this API is a merge/refactor of our `Canvas` API together with the `Texture` functionality from the ImGui API. - **render** New SDF rendering API as part of the new `Render` API. - **render** New immediate mode mesh drawing API, camera API, and environment lighting/fog API as part of the `Render` API. - **render** New debug line drawing API, identical to the old Scene debug line drawing API. - **user** New functions to get multiplayer names and colors. - **user** Added `user-v1`, which is a simplified implementation of `user-v0` which is now deprecated. - **world** New SDF rendering API for the `World` API as well. - **world** New component `AudioSource` and data resource types `AudioClipOgg` and `AudioClipWav`. - **world** New `RetrieveDataType::Info` to currently only get information about an audio clip in the form of an `AudioClipInfo`. - **world** Added support for loading GLTF files directly. - **world** New flag `SpatialQueryOptions::IGNORE_INTERIOR_HITS` for specifying if inside hits should be ignored for raycasts. - **world** Added World V4 api with `RaycastQueryWithOptions` raycasts. - **world** Cameras now need to be activated manually by pushing the `SetActive` or `SetActiveForPlayer` message in `world_v2::safe::push_message`. - **world** Deprecated `push_message`, `pop_message`, `has_message` in favour of `send_messages`, `retrieve_messages` and `get_message_counts`. - **world** Added new `MeshSimplified` which simplifies and existing mesh, useful for collision meshes for instance. - **scene** Added support for loading GLTF files directly. - **ml** Added `ml-v1` which makes the api more asynchronous. - **ml** Added `ml-v2` and `ml-v3` which add additional functionality. - **ml** In `ml-v2`, use run-id instead of experiment-id - **ml** In `ml-v1`, expand `ExperimentStatus` to include `Aborted` and `Unhealthy` and make it non-exhaustive. - **world** Added `PlayerIdSet` that can be set on render and audio components to filter visual and audible things by player. - **storage** Added `storage-v2` which fixes a race condition when using the `keys` and `get` methods. - **world** Added support for accessing `MeshStyle` on `SdfModel` and `SkinnedSdfModel` - **world** Added support for setting debug options on individual entities (debug shape rendering) - **world** Added support for batching commonly updated entity values (transforms, tints, enable flag). - **behavior** Added new API that allows to handle batches of a message in a single FFI call. - **world** Added support for measuring the size of formatted text: `measure_formatted_text`. - **world** Added `MessageType::Invalid` to track invalid but properly-initialized messages. ### Changed 🔧 - **all** Derived marker traits for static validation of ABI invariants for types - As part of this, added various `_pad` manual padding fields to some structs which do not change the ABI and so are not breaking, but fill up what were previously "true padding" bytes in these types. ### Removed 🔥 - **applet** Removed HMD events - **ml** Removed `v0` (but added `v1`). - **http-request** Removed `v0` API, but added `v1` with status code support - **canvas** Removed Canvas API. Functionality has been moved to the new Render API. - **imgui** Removed Imgui API. Texture allocation has been moved to the new Render API. - Removed support for `ark_description` entrypoint where a multi-line description text of a module could be retrieved. This has been deprecated for a while in favor of the single-line brief module description in `Cargo.toml` - **scene** Removed support for the Scene API ray intersection and mesh semantics extensions - **scene-procedural** Removed the Scene Procedural API. Replaced by the new SDF functionality in the Render API. - **time** Removed v0 API, replaced with v1 API - **storage** Removed v0 API which had a race condition bug, use v1 API instead - Removed unused `ErrorCode::Unknown` (actually removed this time, 0.14.0 removed the usages of it but left the variant) - **world** Deprecated `push_message`, `pop_message`, `has_message` in favour of `send_messages`, `retrieve_messages` and `get_message_counts`. - **world** Deprecated `SkinnedSdfModel`. Deprecated `Opacity`, `Lighting`, `PlayerIdSet`, `MeshStyle` properties of the `SdfModel` component. ### Unstable 🚧 ## 0.14.0 - 2020-12-10 ### Added ⭐ - **ml** Added `can_connect_to_hive`. This can be used to check if a local hive server is running. - **ml** Added `poll_started` to check the status of an ML experiment. This is useful when training in the cloud where servers take a long time to start. - **applet** Added `MouseEventType::Still` and `TouchEventType::Still` to represent absent pointer input. - **applet** Added `VirtualKeyCode::LCommand` and `VirtualKeyCode::RCommand`, which represents the command keys on MacOs and control keys on Windows and Linux. - **applet** Added support for applets launching other applets with a URL through the new `launch_applet_with_url` function - **http-request** Add support HEAD, OPTIONS, CONNECT, and TRACE HTTP methods. - **module** Added new optional `ark_get_alloc_stats` entrypoint for the client to ask the module about its memory use and statistics - **scene-procedural** Stabilized API for SDF rendering. - **storage** Added new API for fast local and synchronized data stores - **telemetry** Added new Telemetry API for modules to be able to send their own custom events to analyze how users are using the module - **world** Added `raycast` and `raycast_batched`. - **world** Added function to create physics bodies mid-frame - **world** Added function to update the collision matrix mid-frame (to support the mid-frame body creation) ### Changed 🔧 - **ml** Changed the `done` parameter in many API calls to be an enum `EpisodeState` instead of a u32. The C level FFI is backwards compatible. - **applet** `VirtualKeyCode` now has integer member values. - **applet** Removed excessive amount of variants in `VirtualKeyCode`. - **imgui** Upgraded to `imgui` 0.6.0 ([changelog](https://github.com/Gekkio/imgui-rs/blob/master/CHANGELOG.markdown)) - Make sure all enums derive at a minimum `Copy`, `Clone`, `Debug`, `Hash`, `Eq`, `PartialEq` - Converted multiple APIs (render, storage, time, profiler, mixer, telemetry) to use infallible functions to simplify their usage as the host is responsible for catching any catastrophic failures instead of the function return in failure. ### Removed 🔥 - **http-download** Removed previously deprecated API, use the more general HTTP Request API instead - Removed unused `ErrorCode::Unknown` ### 0.13.0 - 2020-10-19 ### Added ⭐ - **applet** Added `TouchInput` and `TouchEventType` to represent touch input. - **file-ux** Added new API with a function to pop up a file dialog and let the user save data to a file. - **http-request** Stabilized v0 API! - **mixer** Added OGG format support. - **ml** Stabilized v0 API! - **resource** Stabilized v0 API! ### Changed 🔧 - `ErrorCode` is now marked as `#[must_use]` ### Removed 🔥 - **audio** Removed support for the old Audio API. - **mixer** Removed unsupported v0-v3 APIs, use v4 API instead - **log** Removed support for the deprecated Log API. - Removed support for the old pre-applet module entrypoints: `ark_scene_update`, `ark_world_update`, `ark_imgui_update`, `ark_key_input`, `ark_mouse_input`. Now required to use the applet `ark_applet_update` entrypoint and the Applet API instead. ### Deprecated ⌚ - **http-download** Deprecated API in favor of the more general HTTP Request API. It being deprecated means the host continues to support it but it is no longer recommended to be used, as it will eventually be removed. ### 0.12.0 - 2020-09-17 ### Added ⭐ - **applet** Added function to set the appearance of the mouse cursor. - **canvas** API is now stable! - **world** Added functions to query what other entities an entity is touching. - **world** Exposed the `RigidBodyMode` enum, for reading the mode of a Physics component. ### Changed 🔧 - Require Rust 1.46+ - Replaced the `REMOVED_APIS` list with a `KNOWN_APIS` list. This is intended for internal usage though but is part of the public API - Multiple FFIs now use enums directly in their signature instead of their primitive type. ### Unstable 🚧 - **http-request** Added new HTTP Request API that can do GET/POST/PUT/DELETE/PATCH async requests - **ml** Added support for retrieving state values and pushing augmented observations ### 0.11.0 - 2020-08-24 ### Added ⭐ - **applet** Added function to get the real time since module start. - **applet** Added function to control the timestep mode. - **mixer** Added v4, which is a combination of v1 to v3 using `#[ark_api_macros::ark_bindgen]`. - **world** Added v2, which is a combination of v0 and v1 using `#[ark_api_macros::ark_bindgen]`. - **world** Added convex mesh to `PhysicsShape`. ### Changed 🔧 - Require Rust 1.45+ - **imgui** Changed to use `#[ark_api_macros::ark_bindgen]`. - **scene** Changed to use `#[ark_api_macros::ark_bindgen]`. ### Removed 🔥 - **scene** Removed `MeshStyleFlags::FLAGS_END`. - **world** Removed v0 and v1 function imports. Use v2. - **mixer** Removed v0, v1, v2, v4 function imports. Use v4. ### Unstable 🚧 - **scene procedural** Add per-instance options for opacity, lighting, depth test and depth write. - **scene procedural** Add Cone primitive. - **ml** Changed to use `#[ark_api_macros::ark_bindgen]`. ### 0.10.1 - 2020-06-26 ### Added ⭐ - Added serialization support for `VirtualKeyCode` and `MeshStyleFlags` when `with_serde` feature is enabled ### 0.10.0 - 2020-06-25 ### Added ⭐ - **world** Added function for retaining data handle ref counts. - **world** Added compound physics shape. - **profiler** Added new stable Puffin Profiler API! - **unstable-ml** Added function for imitation learning ### Changed 🔧 - Require Rust 1.44+ - **applet** Added `HmdActionTag::Axis` for axis events represented as a 2d vector to `HmdActionUnion` ### Unstable 🚧 - **scene procedural** New unstable API for drawing geometry using procedures. ## 0.9.0 - 2020-05-28 ### Added ⭐ - **applet** Added new API which drives applets through a single `ark_applet_update` entry point - **mixer** Added `mixer__unload_clip()`, to reclaim the memory used by a clip you no longer need - **world** World v1 API has now been stabilized! - **unstable canvas** New unstable API for drawing textured and/or colored triangles in screen space - **unstable profiler** New unstable API for using the Puffin Profiler for profiling modules - **unstable resource** New unstable API for using static resources in modules ### Changed 🔧 - Enum `try_from` functions now return `Result` instead of `Option` and are implemented using `std::convert::TryFrom` ### Removed 🔥 - **unstable sys** Removed API, functionality replaced by the applet API. ## 0.8.0 - 2020-05-07 ### Added ⭐ - Added support for the `#[ark_api_macros::ark_bindgen]` proc macro, which can generate idiomatic FFI bindings from normal Rust function signatures. - **module-run** Module Run API has now been stabilized! - **unstable ml** Added support for hive checkpoints in api. - **unstable ml** Added access to raw snapshot data, for persistence ### Changed 🔧 - Require Rust 1.43+ - The `improper_cyptes` lint is now denied. This lint will trigger if `rustc` detects that a type being passed across and FFI boundary is not safe to do so. ### Removed 🔥 - **mixer** Removed confusing `MixerClipId` typedef that was used in an inconsistent manner. ## 0.6.0 - 2020-04-16 ### Added ⭐ - **imgui** `ig_plot_lines` now exposed, for making little line graphs. - **world** Added new property `LocalUpVector` to `Camera`. - **world** Added new message `SetActive` to set active `Environment` or `Camera`. - **world** Added new messages `SpatialQueryRaycast2`, `SpatialQueryWithinSphere2`, `SpatialQueryBehindPlane2` - **unstable ml** Added functions for downloading metrics, and inferring from Hive snapshots. - **unstable module-run** Added support for launching separate named modules, instead of just the calling module itself - **unstable world** Added new `CreateDataType` `WorldEntityQuery` - **unstable world** Added `WorldEntityQueryType` to `WorldEntityQuery` that lets you choose the initial set of the query, either `AllEntities`, `TransformChildren` or `TransformDescendants`. ### Changed 🔧 - **input** Changed types to be part of the input entrypoint functions, not an API as it is not an API at this time. - **unstable module-run** Functions now have to be created (bound) before launching - **mixer** Prevent accidentally assigning a `MixerClipId` to a `MixerPlayId`. ## 0.5.3 - 2020-03-26 ### Added ⭐ - Added module entrypoint definitions and documentation. Such as `ark_initialize`, `ark_scene_update`, etc. - **core** Added `ark_register_panic_hook` which installs a panic hook, this is automatically called before `ark_initialize` - **scene** Added `scene-ext-poly` that can be used to create poly meshes asynchronously. - **state-persist** Added state persistence entrypoints that enable modules to persist their state across executions - **world** Add new properties `UpDirection` and `CollisionFlags` to `PhysicsCharacter` component. - **unstable module-run** New experimental API that enables modules to launch copies of themselves in parallel for offloading heavy compute tasks - **unstable world** Add new unstable world API with functions for creating and retrieving generic data. Currently used for reflecting what components and parameters an entity has. ### Changed 🔧 - **cmdlet** Change `ark_cmdlet_run` to return 0 or 1 `u32` return code instead of `ErrorCode`, and enable it to return error message string. This is a Rust semantic type change, but no change in actual value in the FFI as it already was a `u32`. ## 0.5.2 - 2020-03-12 ### Added ⭐ - **sys** New support for hiding and grabbing mouse cursor with `set_cursor_mode`. Will only work when disabling editor UI with tab. - **world** World API has now been stabilized! - **world** Add `clone_entities` and `copy_component` functions ## 0.5.1 - 2020-03-05 ### Changed 🔧 - **imgui** Stabilize v0 API! - **imgui** `create_texture` now also takes a `data_size` parameter - **imgui** New `TextureFormat` enum instead of `bytes_per_pixel` parameter ## 0.5.0 - 2020-03-02 ### Added ⭐ - **world** Some new enum values to support the new joint break force. ### Changed - **imgui** Redefined API as unstable - **imgui** Use `ErrorCode` for results and added `remove_texture` ## 0.4.7 - 2020-02-28 ### Added - **world**: A number of new enum / struct values for World features. ### Changed - **world**: Rename the joint types (revolute->hinge, prismatic->slider, spherical->ball) - **world**: Expose 'has_component', 'set_entity_value_checked', 'get_entity_value_checked'. - **world**: A number of new enum values and structs for World features. ## 0.4.6 - 2020-02-24 ### Added - **world**: A number of new enum values for World features. ## 0.4.5 - 2020-02-14 ### Added - **world**: Expose functions to check validity of mesh and entity IDs. - Add enums and message structs for a number of new World features. ## 0.4.4 - 2020-02-10 ### Added - Re-export used scene API types in scene API extensions - **sys**: New module Sys, with a single function get_elapsed_time, for internal profiling. ### Changed - Unstable World API redesigned with many more capabilities. ## 0.4.3 - 2020-01-29 ### Added - Added `MeshStyleFlags::BILLBOARD` flag for enabling billboard rendering of a mesh through the `scene-ext-mesh-style` extension. - Added unstable world API. This is highly in development and will evolve and change rapidly. ### Changed - Stabilized `scene-ext-ray-intersect` and `scene-ext-has-mesh-semantics` extensions - Changed API & API extensions to be defined using a new `ApiId` struct and `define_api_id!` macro. This is an easier, and more future-proof solution that provides both unique id and name for every API and extension. - Renamed unstable extensions to have `unstable` as a prefix for clarity. - Unstable APIs and extensions are now enabled with a single `unstable` feature instead of individual feature flags. ## 0.4.2 - 2020-01-17 ### Added - **scene:**: `scene-ext-mesh-style` unstable extension added to be able to render mesh instances with a specific style. Through the style one can now enable lighting, alpha blending, premultiplied alpha, flat shading, set the diffuse tint and apply a hue/saturation/value transform. - Add initial `imgui` API - `http_download_v1` API which adds new function pointers that allow non blocking downloads. `http_download__download` now returns a handle that can be used to query if the download has been completed. ### Changed - Mark `ErrorCode` and `Api` enums as `#[non_exhaustive]` so we can add new values to them in the future without having to change the major version of the crate - Require Rust 1.40 as minimal version (for `#[non_exhaustive]` attribute) ## 0.4.1 - 2019-12-10 ### Added - **scene:**: `scene-ext-ray-intersect` unstable extension added to be able to intersect a ray with a mesh. This is not yet performance optimized but is fast enough to be usable sparingly. ## 0.4.0 - 2019-12-08 ### Added - Added **scene-v4** API. Includes the `scene-ext-mesh-buffer` which replaces the old bincode-serialized `create_mesh` function. ### Changed - Stabilized the `scene-ext-mesh-buffer` API extension. The feature flag for it has been removed. - Additive API version now reuse function definitions from previous versions instead of duplicating them. This only affects the `wasm_import_module` namespace for the functions. ## 0.3.0 - 2019-12-08 ### Added - **scene-v0:** Add `MeshOrigin` enum, was previously opaque ### Removed - **scene-v0:** Removed `glam` dependency for math types to reduce build times, uses plain `f32` arrays instead - Removed old `Behavior_v0` API enum, the API itself had already been removed ### Changed - Flattened all module names. Example: `log::v0` and `scene::ext_mesh_buffer` is now accessed as `log_v0` and `scene_ext_mesh_buffer` - `input` module now is versioned and called `input_v0` - `serde` is now an optional dependency to reduce build times. Enable by using the `with_serde` feature. If not enabled then Scene API functions that use bincode are compiled out, such as `create_mesh` ## 0.2.1 - 2019-12-08 ### Added - First published private release