Unified texture processing interface (i.e. you can specify a TextureProcessingConfig for any texture being loaded/read; allowing you to swizzle, invert, or flip textures)
Can now inline load/parse texture combinations (up to four textures simultaneously) via LoadCombinedTexture / ReadCombinedTexture
Specialized functions for loading specific texture maps (e.g. LoadColorMap(), LoadAnisotropyMap(), etc.); often with useful parameters for combining image files or loading alternative formats
Much better layout of config structs in general
Methods that read textures or meshes now return the number of elements written to the destination span as a convenience
Provision of BuiltInTexturePaths property that provides some built-in greyscale textures and default maps for convenience
ITextureBuilder interface:
This is a new builder added specifically to deal with building various textures and maps that TinyFFR uses
TexturePatternPrinter added- new static class that prints TexturePatterns to a span or bitmap
Added ability to create icosphere meshes to IMeshBuilder
Test material:
Improved test material (now shows a UV test pattern)
Must now be created, meaning resource lifetime is easier to reason about
Added function to convert Transform2D to Matrix3x2
Added option to set memory usage rubric in factory setup
VSync control is now supported on Windows and Linux (MacOS support will come later).
Improved handling of resolution / size changes of windows across fullscreen/borderless modes
Replaced the ambiguous "Recommended" display property on the display discoverer with separate "HighestResolution" and "HighestRefreshRate" properties
Texture patterns:
Normal map texture patterns now use unit spherical coordinates which are more intuitive than unit vectors for creating patterns
Texture pattern translation is now relative to total texture size (rather than pixel-based)
Math:
Added Triangularize/TriangularizeRectified methods to Angle to help create triangle functions
Added UnitSphericalCoordinate to represent unit-length spherical coord (azimuthal + polar angle); can be converted to a Direction given two basis directions
Added interpolation type for Angle that interpolates through the shortest path around a circle
Fixed a build error with v0.4 that resulted in a DllNotFoundException on Linux or MacOS
Switching between Fullscreen and FullscreenBorderless modes is now more reliable and the correct mode should be reported back via the FullscreenStyle property.
Resolution modes of displays are now correctly reported on DPI-scaled Windows systems.
Fixed a small resource leak that occurred when disposing a scene without first removing its backdrop.
UserQuitRequested flag is now set when user requests a quit in a multi-window application.
Fixed an issue where attempting to add model instances or light objects that were previously added to a now-disposed scene to a new scene would not actually add them.
Fixed an issue where mipmaps were not being generated even when requested
Fixed a small bug with BoundedRay that could cause NaN or Infinity in resultant values when calculating closest point to zero-length ray (or when attempting to resize zero-length ray)