Skip to content

Releases: UltravioletFramework/ultraviolet

Ultraviolet Framework 2018.07

01 Aug 00:31
Compare
Choose a tag to compare

Graphics

  • FIX: Added support for matrix array uniform values (thanks stefnotch!)
  • Added support for rendering complex scripts which require text shaping, such as Arabic.
  • Added support for rendering right-to-left text.
  • Updated the text layout engine to support right-to-left layout.

UPF

  • Added the TextIsShaped, TextScript, TextDirection, and TextLanguage attached properties to provide support for complex scripts and right-to-left layout on most controls.
    • Text editing controls do not currently support these properties.

Ultraviolet Framework 2018.05

31 May 16:55
Compare
Choose a tag to compare

Core

  • Added setters to the Location and Size properties of the Rectangle, RectangleF, and RectangleD structures (thanks Scellow).

Platform

  • Windows are now hidden until the first frame is about to be rendered, preventing the user from seeing an unpainted window (thanks Scellow).
    • This behavior can be overridden by setting the WindowIsShownImmediately property when configuring the Ultraviolet context.

Android

  • Added the uvassetlist command line utility for generating asset lists.
  • Added support for pregenerated asset lists to improve loading times.
    • Add the list to the root of your project as an embedded resource in order to make use of this feature.

Graphics

  • FIX: Fixed a crash when attempting to use glTextureStorage2D() on some configurations.
  • By default, Ultraviolet will now use the latest version of OpenGL on desktop platforms.
  • Added the Invalidate() method to RenderTarget2D.
  • Added the VertexPositionNormalTexture structure (thanks Scellow).

Ultraviolet Framework 2018.04

28 Apr 17:17
Compare
Choose a tag to compare

Misc

  • FIX: Fixed a crash when attempting to run on Android the Release configuration.

Core

  • Implemented a plugin architecture using the UltravioletPlugin abstract class.

Graphics

NOTE: The Create() methods on RenderBuffer2D have been moved into Texture2D and renamed.
NOTE: The Create() methods in Texture2D and Texture3D have been renamed.

  • FIX: Fixed a crash when attempting to run under OpenGL ES 2.0.
  • Created a new library, Ultraviolet.FreeType2. This library implents a plugin which allows Ultraviolet to render OpenType and TrueType fonts, including fonts with CJK and other non-Latin character sets.
    • The Ultraviolet.FreeType2 library is now available as a NuGet package.
    • See this wiki article for details.
  • Updated the text layout engine to better support FreeType2 fonts.
  • Updated the text layout engine to support UTF-16 surrogate pairs.
  • Updated the text layout engine to support fallback fonts. If the current font does not contain a glyph which is being rendered, the engine will search for a registered fallback font which contains it and use that instead.
    • Fallback fonts can be registered with the RegisterFallbackFont() method on TextRenderer.
  • Added support for the SRGB color space. It is highly recommended that you enable this if you're using FreeType2 fonts; they won't render properly without proper gamma correction.

Ultraviolet Framework 2018.03

30 Mar 07:24
Compare
Choose a tag to compare

Core

  • Upgraded to JSON.NET 11.

Graphics

  • Implemented DynamicTextureAtlas. Unlike the existing TextureAtlas class, dynamic atlases can be constructed at runtime. The packing algorithm used by dynamic atlases will waste space if the individual textures are not uniformly sized, but it is substantially faster.
  • Implemented DynamicTexture2D and DynamicTexture3D. These textures have a callback which is invoked immediately before they are bound to the device for rendering, allowing them to be lazily updated.

Miscellaneous

  • Removed a number of redundant error checks across the Framework.

Ultraviolet Framework 2018.02

22 Feb 00:29
Compare
Choose a tag to compare

Audio

  • A new implementation of the Audio subsystem, built on FMOD, is now available for use.
    • BASS remains the default implementation.
    • The SelectAudioImplementation() method has been added to UltravioletConfiguration so that you can easily choose which implementation you want to use.
    • The FMOD and BASS implementations are (read: should be) functionally identical, but the underlying libraries have different licenses. Choose an implementation based on which license you prefer.
  • Added the EnumerateAudioDevices() method to IUltravioletAudio.
  • Added the PlaybackDevice property to IUltravioletAudio.
  • The selected playback device is now saved as part of the Ultraviolet audio settings.

Content

  • In content manifests, you can now specify a generic type in the form SomeType{ArgType1, ArgType2}. For example, you can refer to a generic list of string as System.Collections.Generic.List{System.String}.
  • On Android, the new UsePlatformSpecificFileSource() method will allow Android assets to be used as Ultraviolet's file source.

Presentation

  • FIX: Adjusted output of Roslyn compiler for better compatibility with Xamarin mobile platforms.

Ultraviolet Framework 2018.01

27 Jan 21:15
Compare
Choose a tag to compare

General

  • Upgraded to .NET Framework 4.7.
  • Upgraded to SDL2 2.0.7.
  • Added projects for .NET Standard 2.0.
  • Added projects for .NET Core 2.0.

NOTE:
Running Ultraviolet on .NET Core should still be considered highly experimental. CoreCLR is an entirely new runtime that is still very much in development; accordingly, some of Ultraviolet's features aren't fully implemented and others may contain bugs. Expect further changes when .NET Core SDK 2.1 is released.

Core

  • Implemented a new dynamic library loader, Ultraviolet.Core.Native.LibraryLoader, which eliminates the need for DllMaps and should make loading native libraries easier and more consistent across platforms.
    • Not yet supported on Android or iOS.

Input

  • The SDL2 implementation of the Input subsystem will now automatically attempt to load game controller mappings, if they are available.
    • The subsystem attempts to load a file called gamecontrollerdb.txt from the game's root directory.
    • A community-maintained database can be found here.

Graphics

  • FIX: Ultraviolet GLSL directives (#ifver, #include, #includeres, etc.) will no longer be parsed if they are inside of multi-line comments.
  • An instance of Effect can now be created by directly loading either a .frag or a .vert file. The content processor will automatically load the corresponding vertex or fragment shader, so long as both shader files have the same name. For example, if you load foo.vert, the resulting program will be comprised of foo.vert and foo.frag.
  • Added the #param GLSL directive, with syntax #param "uniform_name". When this directive appears in a shader file, it indicates to Ultraviolet that an effect parameter needs to be created for the specified shader uniform. If the uniform cannot be located at runtime, Ultraviolet will throw an exception indicating that it was optimized out.

Presentation

  • The UPF binding expressions compiler has been rewritten to make use of the Microsoft.CodeAnalysis.CSharp package (also known as Roslyn), bringing support for the latest C# language features.
  • A .NET Standard 2.0 version of the Ultraviolet.Presentation.Compiler library is now available.

Ultraviolet Framework 2017.12

26 Dec 17:43
Compare
Choose a tag to compare

General

  • Moved to calendar versioning.
  • Revised and updated the Framework's namespaces for improved consistency and clarity.
    • The top-level TwistedLogik namespace has been removed entirely.
    • TwistedLogik.Nucleus is now Ultraviolet.Core.
    • TwistedLogik.Gluon is now Ultraviolet.OpenGL.Bindings.
    • TwistedLogik.Ultraviolet.UI.Presentation is now Ultraviolet.Presentation.
    • All Testing namespaces have been renamed TestFramework.
    • All platform compatibility shims are now in Ultraviolet.Shims.
    • All other namespaces remain the same.
  • Reorganized the entire project to account for the explosion of folders that was created with the introduction of shared projects. The repository should hopefully be easier to navigate as a result.
  • Upgraded to .NET Framework 4.5.
  • Upgraded JSON.NET to 10.0.2.
  • Upgraded SDL2 to 2.0.5.

Core

  • ⚠️ IMPORTANT! ⚠️ The memory layout of the Matrix structure has changed.
    • Matrices are now stored in row-major order, matching the System.Numerics.Vectors library.
    • Application-specific shader code must be updated to account for this change.
  • All of Ultraviolet's core struct types have been made mutable.
  • Added the Quaternion structure.
  • Added the Plane structure.
  • Added the Ray structure.
  • Added the BoundingSphere structure.
  • Added the BoundingBox structure.
  • Added the BoundingFrustum class.

Audio

  • Fixed a race condition in the BASSSoundEffectPlayer class.

Graphics

  • Fixed a number of issues around incorrect use of RGBA vs. BGRA formats.
  • Fixed a bug causing TextureAtlas to be premultiplied twice.
  • Fixed a bug where SpriteBatch would incorrectly bind a texture which was already bound for writing.
  • Added the Surface3D class.
  • Added the Texture3D class.
  • Added the ITextureEffect interface.
  • Implemented the #sampler GLSL directive.
    • Syntax is: #sampler <num> "<uniform>" i.e. #sampler 1 "TextureMap"
    • Places the specified sampler uniform at the specified sampler index.

Content

  • When retrieving content assets, you can now request the asset for a specific DPI.
  • Dynamic reloading of watched assets has been improved.

Platform

  • Fixed a bug which would cause the 'Visible' property on 'IUltravioletWindow' to have the wrong value.
  • Added the Opacity property to IUltravioletWindow.

Presentation

  • Views will now load content assets appropriate for the DPI of the screen on which they are displayed, and will automatically reload their assets if they are moved to a different screen with a different DPI or if the DPI is changed on the current screen.
  • Added the Prepare(), PrepareCore(), and PrepareOverride() methods.
    • These methods are called when a view is opening and should load anything which is released by the Cleanup(), CleanupCore(), or CleanupOverride() methods.
  • The Slider control now supports the TickPlacement, TickFrequency, IsSnapToTickEnabled, and IsMoveToPointEnabled properties

Ultraviolet Framework 1.3.15.2677

27 Jul 23:11
Compare
Choose a tag to compare

Graphics

  • Fixed a bug which caused alpha to be premultiplied twice when loading an instance of the TextureAtlas class.

Ultraviolet Framework 1.3.15

23 Apr 21:03
Compare
Choose a tag to compare

Core

  • Localization databases will attempt to fall back to another culture with the same language as the current culture, rather than defaulting to American English. The en-US culture will still be used as a fallback of last resort if no appropriate same-language cultures exist in the database.

Content

  • Implemented watched content. You can now indicate that you'd like Ultraviolet to watch an asset file for changes by loading it using one of the new LoadWatched<T>() methods on ContentManager.
    • If Ultraviolet believes that it's running inside of a Visual Studio solution folder, it will attempt to watch the original solution files, rather than the copies that are placed in the bin folder at compilation time.
    • If reloading a file would cause an exception to be raised, the last known good version of the file is automatically restored.

Graphics

  • FIX: Cleaned up shaders for core effects and improved cross-platform compatibility.
  • FIX: Added some missing constructors to the SpriteFrame structure.
  • FIX: DrawScaledSprite() was ignoring the effects and layerDepth parameters [from Scellow]
  • Added GetAnimation() method to SpriteAnimationController [from Scellow]

Input

  • Added GamePadButton values corresponding to each of the supported analog axes. Corresponding button events will be generated whenever any of these axes cross a certain threshold value (by default, 90% of their maximum value).

Presentation

  • FIX: Tab navigation should now move correctly through controls using KeyboardNavigationMode.Once.
  • Reduced memory usage of dependency objects.
  • Implemented commands, command bindings, and input bindings.
    • Commands in UPF work basically the same way as they do in WPF; see this MSDN article for an overview.
    • Updated TextEditor to use commands.
    • Updated HScrollBar and VScrollBar to use commands.
    • Updated ScrollViewer to use commands.
  • Added a ScrollBar control. This control can represent either a horizontal or vertical scroll bar by changing the value of its Orientation dependency property.
  • Added a Slider control. This control can represent either a horizontal or vertical slider by changing the value of its Orientation dependency property.
  • Added support for deferred scrolling to ScrollViewer
  • Added support for watched content. Modifying a view definition or style sheet will now cause the corresponding view to be automatically reloaded at runtime.
    • You must opt into this feature by setting WatchViewFilesForChanges to true when configuring the Ultraviolet context.
    • You can make sure that the global style sheet is automatically reloaded by making use of the new CompositeUvssDocument class -- see the debug application for an example of how to do this.
    • Reloading views should be tolerant of errors, but the system wasn't originally designed to handle this scenario, so some things may have fallen through the cracks. If changing a file causes the application to crash from an unhandled exception, please report it as a bug.
  • Made some adjustments to layout rounding (again).
  • Made some adjustments to navigation using game pads.

Ultraviolet Framework 1.3.14

22 Aug 20:23
Compare
Choose a tag to compare

Core

  • FIX: Android applications were always considered "inactive," resulting in a significant reduction in framerates.
  • Performance should be significantly improved on all platforms, but particularly Android and iOS.

Graphics

  • BREAKING CHANGE: The SpriteBatch class now uses a custom vertex format, SpriteVertex, rather than VertexPositionColorTexture, resulting in a savings of 8 bytes per vertex. The z-coordinate has been removed and texture coordinates are now stored as a pair of unsigned 16-bit integers.
    • Vertex shaders intended for use with SpriteBatch will need to manually normalize the texture coordinates specified by the uv_TextureCoordinate0 vertex attribute. Consult the default shader for an example of how this should be done.
    • Since OpenGL ES 2.0 does not support integral vertex attributes, SpriteBatch will fall back to normalizing the texture coordinates outside of the shader, resulting in a small reduction in precision. Custom shaders should be prepared to handle this circumstance.
  • Multisample anti-aliasing (MSAA) is now disabled by default. It can be re-enabled by setting the MultiSampleBuffers and MultiSampleSamples properties on OpenGLUltravioletConfiguration to non-zero values.
  • Added SetDataAligned<T>() to VertexBuffer.
  • Added SetDataAligned<T>() to IndexBuffer.
  • Significantly reduced the number of redundant OpenGL API calls being made in a typical frame.

Input

  • Added support for $1 touch gestures.

Presentation

  • FIX: The binding expressions compiler should now properly handle relative paths containing . or ...
  • Added two new routed touch events, PreviewDollarGesture and DollarGesture, which are raised when a potential $1 gesture is performed.
  • Added precompiled type conversion delegates for several common types in order to improve performance on systems without runtime code generation.
  • Added precompiled binding expression delegates for expressions which are part of a data source wrapper in order to improve performance on systems without runtime code generation.