Download Latest Version StereoKitTest_win32_v0.3.11.zip (6.9 MB)
Email in envelope

Get an email when there's a new version of StereoKit

Home / v0.3.8
Name Modified Size InfoDownloads / Week
Parent folder
StereoKitTest_win32_x64_v0.3.8.zip 2023-09-27 5.4 MB
net.stereokit.stereokittest_netandroid-v0.3.8.apk 2023-09-27 9.1 MB
native_binaries_headers_v0.3.8.zip 2023-09-27 56.5 MB
README.md 2023-09-26 20.2 kB
v0.3.8.tar.gz 2023-09-26 19.5 MB
v0.3.8.zip 2023-09-26 19.9 MB
Totals: 6 Items   110.5 MB 0

It's finally here! After more than a year of development, v0.3.8 is ready at last! This release took way longer than expected, but includes a lot of really good work. Many thanks to all the contributors here with quite a variety of fixes and features!

Templates

New dotnet powered templates are now available, and are the recommended way to develop going forward! These templates work both for Visual Studio 2022 as well as CLI environments like VSCode. And most notably, the templates now include an official Android compatible template! The getting started guide on stereokit.net has also been updated to use these templates.

Nightly Builds and CI / CD

StereoKit now uses GitHub Actions for nightly builds, releases, and verification of PRs! This helps catch and prevent certain bugs and build issues before they happen, and helps get you features and fixes sooner. All changes on the /develop branch will be available the next day as a .preview build on NuGet! To get nightly builds, make sure to enable Include prerelease in your Visual Studio NuGet Package Manager.

To help facilitate this, StereoKit's build tooling was also completely overhauled to make it easier to build the SDK from scratch. If you're interested in contributing to the core, things just got a bit easier for you :)

Demos, Samples and Tools

API Additions

Highlights

  • Added the ability to change StereoKit's spatial reference point! Stage and Floor are now valid options in addition to Local. See: SKSettings.origin, World.OriginMode and World.OriginOffset.
  • Added a Device info class. Name, GPU, DeviceTracking, DisplayBlend, DisplayType, ValidBlend, HasEyeGaze, HasHandTracking.
  • Added Material.Chain for multi-pass materials.
  • Added UI.LayoutPush, UI.LayoutPushCut, and UI.LayoutPop for more flexible UI layouts.

UI

  • Added overload to UI.SetThemeColor that allow for specifying separate colors for different element states. [#506]
  • Added overload to UI.ButtonBehavior to provide the interacting hand.
  • Added parameter to UI.Handle and UI.HandleBegin to allow configuration of the activating gesture. [#601]
  • Added UI.SystemMoveType for configuring how SK provided UI windows move. [#479]
  • Added UIVisual.ButtonRound, UIVisual.Panel, and UIVisual.Carat for customizing a few more UI elements. [#484]
  • Added UI.Toggle overload with sprite arguments. [#514]
  • Added a UINotify property to UI.HSlider to change notification behavior between 'on changed' and 'on finalized'. [#321]
  • Added UI.VSlider and UI.VSliderAt.
  • Added UI.TextAt and UI.Text with size. [#540]
  • Added a read only UI.TextStyle for peeking the current style.
  • Added a getter for UI.Settings.
  • Added a UIBtnLayout.None option to image button UI elements.
  • Added UISettings.rounding and UISettings.margin. [#556]
  • Added UIVis.SliderLineActive and SliderLineInactive.
  • Added overload for UI.ButtonBehavior that takes a depth and activation depth.
  • Added image overloads for UI.Radio, and added UI.RadioAt. [#571]
  • Added UI.LastElementHandActive and UI.LastElementHandFocused.
  • Added UI.PopupPose, a function for getting a good popup location between the user and what they're interacting with. [#478]
  • Fallback soft keyboard and file picker popup now use UI.PopupPose for their location. [#478]
  • Deprecated UI.LastElementHandUsed.

Assets

  • Added Assets.All, Assets.Type, get/set properties for Id on assets, and all asset types now inherit from the IAsset interface. [#432]
  • Added Mesh.SetData for setting vertices and indices at the same time.
  • Added Mesh.GenerateCircle, and added doubleSided to Mesh.GeneratePlane, thanks jackdaus! [#503]
  • Added calculateBounds parameter to Mesh.SetVerts.
  • Added Tex.Mips, Tex.GetNativeSurface, and a new overload for Tex.GetColors. [#466]
  • Added Tex.GenParticle.
  • Added Tex.SetMemory, thanks Austin!. [#574]
  • Added the ability to control ownership of a native texture resource when calling Tex.SetNativeSurface, thanks technobaboo! [#459]
  • Added a Material constructor that takes a shader filename.
  • Added getters for Material shader properties: GetTexture, GetFloat, GetInt, GetUInt, GetBool, GetMatrix, GetVector2, GetVector3, GetVector4, GetColor.
  • Added Material.Chain for multi-pass materials.
  • Added ModelNode.Info for storing per-node key/value pair data. GLTF also loads "extras" here [#447]
  • Added Model.RecalculateBoundsExact, thanks Paul! [#578]
  • Added overload to Model.Draw that allows for overriding the Materials used.
  • Added Sprite.Find.
  • Added TextStyle.FromFont, a more consistent replacement for Text.MakeStyle.
  • Added a setter for TextStyle.CharHeight.
  • Deprecated the Solid asset. Reactphysics3d will be removed in v0.4. Please see this sample project for how to use a 3rd party library such as Bepu.

Math

  • Added Matrix.Transpose and Matrix.Transposed.
  • Added Vec3.Direction and Vec2.Direction, [#476] thanks Ethan Merchant!
  • Added Quat.Delta and Quat.Relative, deprecated Quat.Difference, [#479] thanks Ethan Merchant!
  • Added a Pose constructor that defaults to Quat.Identity for orientation.
  • Added Matrix.Perspective overload for camera perspectives. [#577], thanks Austin!
  • Added Pose.LookAt.

Backend

  • Added Backend.OpenXR.SystemId, Backend.OpenXR.OnPreCreateSession, <inline_block>2</inline_block>(#513, and Backend.OpenXR.AddEndFrameChain.
  • Added Backend.OpenXR.UseMinimumExts to only load critical extensions by default, and Backend.OpenXR.ExcludeExt to exclude specific extensions. [#444]
  • Added Backend.OpenXR.SetHandJointScale for scaling joint sizes that come from the hand tracking extension, for [#337]
  • Added Backend.OpenGL_WGL, OpenGL_GLX, and OpenGLES_EGL, along with related enum values to Backend.Graphics. [#382]

Input

  • Added Input.HandSource for figuring out what type of hand data is currently present.
  • Added Input.Mouse.Ray.
  • Added customizable poses for the hand simulation: Input.HandSimPoseAdd, Input.HandSimPoseRemove, and Input.HandSimPoseClear. [#149]
  • Added Input.KeyInjectPress/Release and Input.TextInjectChar to the public API. [#630]
  • Added OpenXR controller profile for Pico. [#603], [#632], thanks Ray!
  • Added support for XR_EXT_hand_tracking_data_source. When present, this allows SK to properly handle controllers that pretend to be hands. [#667]
  • Added support for XR_EXT_hand_interaction. Prevents an error popup on HoloLens 2. [#490]
  • Added support for XR_EXT_palm_pose, controller simulated hands may show up with a 'better' orientation.

Miscellaneous

  • Added SK.GetStepper and SK.GetOrCreateStepper.
  • Added overload for Renderer.Screenshot that takes a Pose instead of 2 Vec3s. [#628]
  • Added Renderer.Scaling, Multisample, SKSettings.renderScaling and renderMultisample. May not work on some runtimes, use carefully! [#483]
  • Added PNG support and JPEG quality to Renderer.Screenshot. [#629]
  • Added overloads for Renderer.Screenshot that provide raw color buffers in custom formats. [#618], [#622], thanks Austin!
  • Added RenderLayer.FirstPerson, ThirdPerson, AllFirstPerson, and AllThirdPerson enum values.
  • Default RenderLayer is now RenderLayer.AllFirstPerson.
  • Added IntPtr overloads for Sound.Read / WriteSamples.
  • Added Time.Frame.
  • Added Time.Step and deprecated Time.Elapsed, and added time_total instead of time_get in the C API.
  • Added extra operator overloads for doing math on Color.
  • Added backend_opengl_egl_get_config to C API. Thanks technobaboo! [#451]

Improvements and Changes

  • Mesh and Model bounds now update during animations.
  • Improved performance of Model.AddNode for large numbers of nodes. [#383]
  • Added support for multimaterial skinned meshes, thanks cameronfr! [#495]
  • Text material now uses DepthTest.LessEq, should help reduce z-fighting artifacts on far text.
  • Sprites now use DepthTest.LessEq by default.
  • Added auto-compile for shaders in the Assets folder.
  • Increased log verbosity for D3D11 calls and Linux/Win file loading.
  • Shaders now use filename instead of meta name for their id. [#529]
  • UI.Input now hides passwords. [#552]
  • UI.Input now scrolls when typing or moving past the end of the visible area.
  • Added a sound when dragging a UI.H/VSlider.
  • Added images to UI.Toggle and UI.Radio.
  • UI.Input now uses ButtonBehavior code, gaining backpress prevention. [#600].
  • UI.Slider's push confirm mode can now also be pinched.
  • Improved layout for larger, custom sized image buttons. [#571]
  • Improved layout of multiline UI.Labels.
  • Improvements to UI.Panel's behavior.
  • Added extra functionality to UI.Input, now supports carat navigation and keyboard-based text selection. No finger based selection or multi-line yet. [#434]
  • Android will no longer fall back to flatscreen if MixedReality is specified.
  • Closing the SK Window when OpenXR+Win32 is running will now also close the SK app.
  • StereoKit can now run and shut down multiple times in the same process. [#386]
  • Added tex_scale property to the builtin Unlit shader.
  • Improved SK's hash table implementation for ~10x speed improvement.
  • D3D platforms now generate mip-maps for non-power-of-two textures.
  • Single Sprites now pick their id based on the Texture's id.
  • .obj loader now generates normals if none are found in the file.
  • Threadsafe add/remove for ISteppers. [#542], [#538]
  • OpenXR initialization now only happens once.
  • SK.Initialize now picks an assembly based name if none is provided.
  • In stereokit.h, empty () parameter lists were switch to the more appropriate (void).
  • Added an improvement to the pinch point that prevents most "travel" when placing handles. [#676]
  • Improved logging for OpenGL shader compile issues.
  • Transparent displays no longer force a specific clear color, and the default clear color went from (0,0,0,1) to (0,0,0,0).
  • When using SK.Step, calling StereoKit functions in the loop instead of the callback is now valid.

SDK and Build Systems

  • .NET Core projects now obey ApplicationIcon.
  • Added auto-copy of Assets folder SKCopyAssets true/false, SKAssetFolder path, and SKAssetDestination path
  • Added ability to switch between the standard and Oculus version of the OpenXR Loader, SKOpenXRLoader.
  • Added SKOpenXRLoaderFolder and SKShaderStandardInclude to the SK MSBuild properties.
  • Lots of build improvements for StereoKit's core code, /develop should be much nicer to build from scratch! [#392]
  • Built-in shader files are now zipped, saves ~100kb.
  • skshaderc no longer requires GLEW on Linux, [#291]
  • Shader binary builds are now repeatable.
  • Removed Linux dependencies on libjsoncpp and libglew. [#507] and [#485]
  • Cmake now works with Android, thanks Malek! [#516]
  • Updated OpenXR Loader to v1.0.30
  • Updated cgltf to v1.13
  • Updated miniaudio to v0.11.9.
  • Replaced TinyCThread with engine specific code.
  • StereoKit now targets Android v32 with a minimum of v29.
  • No longer define a JNI_OnLoad when built as a static Android library. [#666]
  • Added Android x64 and Win32 ARM64 binaries to the NuGet package.
  • Docs are now in their own repository.
  • OpenXR custom loader system now supports multiple binaries.
  • OpenXR custom loader system will now also search in the openxr_loader folder in your project.
  • On Android, StereoKitC and openxr_loader libraries are now automatically loaded by StereoKit.
  • Simulator window on Win32 will now restore its location from the last session.

Fixes

  • Fixed an issue with paths in skshaderc. [#390]
  • Fixed a bug in PassthroughFBExt.cs where it was still enabled even when the extension was absent. [#392]
  • Fixed a crash with GLTF files that don't have index buffers. [#398]
  • Fixed rotation correction of linear/step mode animations on root nodes. Cubic still may have issues.
  • Fixed a crash when switching to animations with more curves.
  • Fixed 'blinking' animations with Models that had single frame animation curves. [#399]
  • Fixed an issue with Windows style file paths preventing Android from locating a file. [#399]
  • Fixed crash when destroying assets that are currently in the draw queue (C side issue). [#403]
  • Fixed strange behavior of sound stream sample info. [#427]
  • Fixed SKG_LINUX_EGL option failing to compile, thanks technobaboo! [#426]
  • Fixed Model.Find / PlayAnim returning a valid result on failure. [#422]
  • Fixed mouse look on Wayland [#428], thanks slitcch!
  • Fixed a number of multithreaded asset load bugs.
  • Fixed Solid's deconstructor not releasing the asset properly.
  • Fixed performance report giving wrong values for shutdown time.
  • Fixed mouse-based hand overshooting with movement during long frames.
  • Fixed an issue with the fallback file picker with paths that have no folders.
  • Fix for UI.ButtonImg's glitchy alpha fade. [#440]
  • Fixed extra padding on UI.ButtonImg with explicit size. [#448]
  • Fixed WASDQE during UI.Input text entry no longer moves the camera in the Simulator. [#365]
  • Fixed extra asset thread CPU usage. [#467]
  • Fixed a number of dangling asset references. [#471]
  • Fixed crash when failing to compile shaders.
  • Fix for EGL crashing in XR mode on Linux, thanks technobaboo! [#458]
  • Fixed issue with Platform.WriteFile adding an extra \0 character on Windows, [#477]
  • Fixed an issue with a missing library on UWP ARM via cmake, [#501]
  • Fixed an issue with parsing certain URIs in GLTF files.
  • Fixed an issue with the simulated hand's wrist joint not matching real hand data.
  • UI.Panel now uses the correct visual element. [#484]
  • Fixed an issue where ISteppers would sometimes Step before Initialize when added from a separate thread. [#528]
  • Fixed an issue with C# projects not gathering shaders for build. [#537]
  • Fixed an issue with asset reference counting where multithreaded dereferencing could occasionally cause an asset to be inappropriately destroyed. [#535]
  • Fixed crash with material.Shader = null, now falls back to Unlit.
  • Fixed a crash when assigning a Material's Shader a Shader with no global parameters.
  • Fixed UI using padding instead of gutter for spacing at the end of a Window.
  • Fixed UI.Text using the wrong depth.
  • Fixed UI.Label sizing wrong when not using padding.
  • Fixed a crash with multithreaded calls to Tex.SetColors. [#528]
  • Fixed a crash with multithreaded Shader creation. [#561]
  • Fixed multithreaded calls to SK.ExecuteOnMain. [#568]
  • Fixed an issue with not finding assets when invoking from dotnet run.
  • Fixed an issue with Model calculating incorrect bounds for some assets. [#567]
  • Fixed .obj loader crashing when faces pointed to invalid data indices.
  • Fix for custom GLX loader issue with Monado, thanks Moshi! [#581]
  • Fixed a Maui hack related to UWP library references. [#586]
  • Fixed glyph corruption bug when resizing font atlas. [#575]
  • Fixed bug with UIWin.Empty not being grabbable.
  • Fixed UIMove.None handles/windows showing far ray and focus highlighting.
  • Fixed shader build issue on Linux. [#589]
  • Fixed shader build issue with nested folders. [#588]
  • Fixed issue with auto-layout windows growing under certain settings. [#593]
  • Fixed issue with capabilities not being detected on the Holographic Remoting runtime.
  • Fixed facing UI Windows "flailing" when too close to the viewer.
  • Fixed UI.Popup offset when Renderer.CameraRoot was not identity.
  • Fixed a padding issue for explicit size labels.
  • Fixed an issue where untracked hands could interact with UI handles. Related to [#599]
  • Fixed a performance issue when submitting many small chunks of text all at once.
  • UI focus no longer changes over the course of the frame. [#599]
  • Fix occasional issue when drawing text in zero width sized boxes. [#446]
  • Fix return value for World.FromPerceptionAnchor when getting the pose was invalid. [#616], thanks Austin!
  • Fixed an issue with mouse scroll on UWP. [#655], thanks Austin!
  • Fix for crash when submitting a null image to a button and a non-none layout option.
  • Fix reference space not getting properly updated during space changes when using stage fallback for Floor origin mode. [#715].
  • Fixed an issue with transparent textures not downsampling properly when creating mip-maps.
  • Various fixes for Snapdragon Spaces OpenXR runtime.

Internal Changes

  • Changed ids for some internal assets
  • render/skybox_mesh -> sk/render/skybox_mesh
  • render/skybox_material -> sk/render/skybox_material
  • platform/swapchain -> sk/platform/swapchain
  • platform/swapchain_zbuffer -> sk/platform/swapchain_zbuffer

Install or Update

Installation is via the dotnet templates and NuGet, please refer here for instructions! https://stereokit.net/Pages/Guides/Getting-Started.html

If you already have a project using StereoKit, go to Project->Manage NuGet Packages, and update to this version! Do a full rebuild of your project afterwards.

Source: README.md, updated 2023-09-26