Releases: UltravioletFramework/ultraviolet
Releases · UltravioletFramework/ultraviolet
Ultraviolet Framework 2018.07
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
, andTextLanguage
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
Core
- Added setters to the
Location
andSize
properties of theRectangle
,RectangleF
, andRectangleD
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.
- This behavior can be overridden by setting the
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 toRenderTarget2D
. - Added the
VertexPositionNormalTexture
structure (thanks Scellow).
Ultraviolet Framework 2018.04
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.
- The
- 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 onTextRenderer
.
- Fallback fonts can be registered with the
- 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.
- See this wiki article for details.
Ultraviolet Framework 2018.03
Core
- Upgraded to JSON.NET 11.
Graphics
- Implemented
DynamicTextureAtlas
. Unlike the existingTextureAtlas
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
andDynamicTexture3D
. 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
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 toUltravioletConfiguration
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 toIUltravioletAudio
. - Added the
PlaybackDevice
property toIUltravioletAudio
. - 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 asSystem.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
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.
- The subsystem attempts to load a file called
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 loadfoo.vert
, the resulting program will be comprised offoo.vert
andfoo.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
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 nowUltraviolet.Core
.TwistedLogik.Gluon
is nowUltraviolet.OpenGL.Bindings
.TwistedLogik.Ultraviolet.UI.Presentation
is nowUltraviolet.Presentation
.- All
Testing
namespaces have been renamedTestFramework
. - All platform compatibility shims are now in
Ultraviolet.Shims
. - All other namespaces remain the same.
- The top-level
- 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 theMatrix
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.
- Matrices are now stored in row-major order, matching the
- 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.
- Syntax is:
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 toIUltravioletWindow
.
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()
, andPrepareOverride()
methods.- These methods are called when a view is opening and should load anything which is released by the
Cleanup()
,CleanupCore()
, orCleanupOverride()
methods.
- These methods are called when a view is opening and should load anything which is released by the
- The
Slider
control now supports theTickPlacement
,TickFrequency
,IsSnapToTickEnabled
, andIsMoveToPointEnabled
properties
Ultraviolet Framework 1.3.15.2677
Graphics
- Fixed a bug which caused alpha to be premultiplied twice when loading an instance of the
TextureAtlas
class.
Ultraviolet Framework 1.3.15
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 onContentManager
.- 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.
- 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
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 theeffects
andlayerDepth
parameters [from Scellow] - Added
GetAnimation()
method toSpriteAnimationController
[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
andVScrollBar
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 itsOrientation
dependency property. - Added a
Slider
control. This control can represent either a horizontal or vertical slider by changing the value of itsOrientation
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
totrue
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.
- You must opt into this feature by setting
- Made some adjustments to layout rounding (again).
- Made some adjustments to navigation using game pads.
Ultraviolet Framework 1.3.14
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 thanVertexPositionColorTexture
, 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 theuv_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.
- Vertex shaders intended for use with
- Multisample anti-aliasing (MSAA) is now disabled by default. It can be re-enabled by setting the
MultiSampleBuffers
andMultiSampleSamples
properties onOpenGLUltravioletConfiguration
to non-zero values. - Added
SetDataAligned<T>()
toVertexBuffer
. - Added
SetDataAligned<T>()
toIndexBuffer
. - 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
andDollarGesture
, 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.