Release notes

Changelog

Version 1.9.0.11


Released 17 Jun 2020
FeatureUnity3D Package Manager packages for console platforms
FeatureAdded custom memory allocator support to Renoir backends
FeatureAdded callbacks for resources lifetime in Renoir backends
EnhancementImproved the performance of loading font collections
EnhancementReduced the repaint area when a small part of the view is changed
EnhancementImproved error messages when binding map-like objects with non-string keys
EnhancementImproved using custom SystemSettings in Unity3D
EnhancementAdded engine.off information to the Documentation
EnhancementUpdated support for Unity3D HDRP to the latest rendering pipeline API changes
FixText wrapping properly respects
FixQuery selectors and CSS selectors work with data- attributes
FixFixed crash when multiple gradient definitions are parsed in parallel
FixFixed assert on view destruction for ChakraCore platforms with multiple views and data-binding are used
FixFixed degrading performance when using hover on complex selectors
FixFixed updated layout styles depending on rem or em units when the unit changes
FixFixed flex properties that continued to be in effect after removing their CSS declarations
FixFixed loading resources with a backslash in the URL for Unity3D
FixFixed gamma-correctness for Unity3D HDRP
FixFixed handling of events by the TextInputHandler when Advance() is not called on the System
FixFixed crash caused by updating of the pointed/hovered elements after scrolling.
APIDeprecated handled flag for input events

Version 1.9.0.12


Released 18 Jun 2020
FeatureSupport for Unreal Engine 4 4.25
APIThis version is not compatible with versions of Unreal Engine 4 different that 4.25

Version 1.9.2.2


Released 14 Jul 2020
FeaturePaint rectangles can be toggled by the Inspector rendering panel
EnhancementAdded support for percent values in SVG images
EnhancementReduced per-frame allocations for transformations
EnhancementExtended the performance timeline of the Inspector with additional events
EnhancementMade the destruction of the UCohtmlWidget non-blocking in the Unreal Engine 4 plugin
FixQuerySelectorAll returns elements in the correct depth-first-search order
FixFixed crash when dispatching events during document unloading
FixFixed crash when starting a XmlHTTPRequest during document unloading
FixFixed elements disappearing during scrolling
APIDeprecated the Android builds with the gnustl standard library. They are moved to the *_gnustl folders
FixFixed lifetime of the AudioWrapper objects in the Unreal Engine 4 plugin
FixFixed the plugin unload order in the Unreal Engine 4
FixCrash when responding to XmlHTTPRequests after the plugin has been uninitialized in Unreal Engine 4

Version 1.9.2.4


Released 20 Jul 2020
FeatureSupport for PlayStation 4 SDK 7.5

Version 1.9.5.4


Released 06 Aug 2020
FeatureAdded line break iterator API to aid text wrapping
FeatureEnabled saving profile from Inspector’s Performance tab
FeatureAdded support for aborting of resource requests when the view is destroyed or navigate to another page
FeatureUpdate PlayStation 4 SDK to version 7.5
FeatureAdded setting for converting property names to lower case in Unreal Engine 4 when using the automatic UType binder
FeatureAdded a special CSS property “coh-composition-id” which allows users to compose the element with a custom renderer
FeatureAdded special CSS properties “coh-custom-effect-name” along with several custom animatable parameters that allow users to apply a custom shader to the element
FeatureAdded new RendererCaps members which allow customizing the maximum allowed texture size. These new properties must be filled in the RendererBackend::FillCaps method.
FeatureSupport for Live Views in Unity3D
EnhancementIncreased the maximum allowed paint rectangles
EnhancementPaint rectangles now leave a short trail
EnhancementMade CohtmlView and CohtmlUISystem Unity3D specific methods virtual
EnhancementAdded customizing the Library configuration in Unity3D
FixFixed getPropertyValue for the transform CSS property
FixFixed crash when using toLocaleLowerCase on Xbox
FixFixed FInputGesture deprecated warnings in Unreal Engine 4
FixFixed History feature minor memory retention on reload
FixFixed capital letters, spaces and special characters in Unity3D with the new Input System
FixFixed multiple views rendering and overlaying in HDRP mode for Unity3D
FixFixed crash in the CSS parser for malformed calc expressions
FixFixed crash when toggling view visibility in Unreal Engine 4
FixFixed crash when responding to resource requests after destroying the library in Unreal Engine 4
APIAdded an API for an external break iterator implementation
APIAdd View::SetCustomSceneCompositor method that forwards the passed arguments the Renoir scene, which fires callbacks on the interface
APIAdd View::SetSceneCustomEffectRenderer method that forwards the passed arguments the Renoir scene, which fires callbacks on the interface
APIAdded API for clearing the navigation history of a given cohtml::View
APIAdded an option to receive resource request calls on the main thread

Version 1.9.7.2


Released 17 Aug 2020
FeatureSupport for WebSockets in Unreal Engine 4
FixFixed disappearing elements with certain style changes
FixFixed crash when registering new engine.on handers during execution of a handler
FixFixed crash when locking vertex or index buffers fails
FixRenamed internal rapidjson and rapidxml libraries to avoid clashes

Version 1.9.9.2


Released 02 Sep 2020
EnhancementAdded support for the background-position-x and background-position-y CSS properties
EnhancementImproved Dualshock 4 contoller support for Unity3D
FixFixed wrongly fired resource abort notifications for already completed requests
FixFixed race issues when executing layout tasks in parallel
FixFixed linker issues when the library is delay loaded with certain compiler options
FixFixed a crash which was occuring during event dispatching
FixFixed an error about missing context argument in engine.off
FixFixed a bug causing rare failures to load style sheets
FixImproved tagging of memory allocations to better reflect its usage
FixFixed chaining CSS animations on the same CSS property
FixFixed by ref binding of empty std::vector collections
FixRemoved requirement for Vulkan runtime on Windows for Unity3D plugin
FixFixed scrolling on Linux in Unity3D with the new InputSystem
FixFixed Unity3D editor deadlocks when stopping the game
FixFixed checkout issues for Perforce users in the Unreal Engine 4 plugin
FixFixed memory allignment issue in VirtualAllocators on PS5 and Switch
APIAdded option to disable internal allocators that retain memory
APIAdded “pixels per scroll” to set the speed of the scrolling in Unity3D
APIIncreased the version of cohmtl.js – update all your copies

Version 1.9.9.5


Released 10 Sep 2020
FixFixed possible deadlock when advancing the views

Version 1.9.9.8


Released 16 Sep 2020
FixFixed crash when calling FreeRenderingResources on views with SVG images
FixFixed possible leak of SVG tessellated data

Migration guide

Prysm version 1.9 introduces two new features in all example backends - user texture and user depth stencil lifetime event callbacks and custom allocators.

User resources callbacks

User texture and depth stencil callbacks give the user the ability to be informed about user texture wrapping, destruction, user depth stencil wrapping and destruction. To enable this functionality, the user is required to provide a class that inherits from IUserResourcesListener by calling the SetUserResourcesListener of the used backend. The backend will then inform the user about relevant events as they happen. If no such IUserResourcesListener is set, all backends will continue to work as they currently do. It’s proper to point out that destruction callbacks will only be called for resources that have been wrapped after providing an IUserResourcesListener.

Example:

// Create an instance of a class that inherits IUserResourcesListener
EngineResourceListener m_EngineResourceListener(...);
...
// Create a backend and initialize it
auto dx11 = new renoir::Dx11Backend(...);
if (!dx11->InitializeStaticResources())
{
    APP_LOG(Error, "Unable to initialize backend static resources!");
    return false;
}
...
// Set the texture listener
dx11->SetUserResourcesListener(&m_EngineResourceListener);
...
// Wrap a user resource - texture/depth stencil
dx11->WrapUserTexture(userObject, description, object);
...
// Destroy a user resource - texture/depth stencil
dx11->DestroyTexture(object);
...
// Receive a callback in the EngineResourceListener::OnUserTextureDestroyed() callback
void EngineResourceListener::OnUserTextureDestroyed(void* userObject)
{
    // Inform the engine that the texture is no longer being used
}

Custom backend allocators

The second and bigger feature is the addition of user backend allocators that are used to allocate memory for data in the backends. Please note, that this memory is only used by the backend itself, but it does not encompass memory needed by graphics driver calls (e.g. D3D). While for some backends this memory is required from the user anyway (e.g. PS4), in general, the feature doesn’t target those kinds of allocations. To provide an allocator to the backend, the user might supply an object that implements the IBackendAllocator interface to the backend constructor. Once set, the allocator should NOT be changed and should be used for the whole lifetime of the backend. If no such allocator is set, everything will continue to work as it has until now, as there’s a default malloc/free-based allocator provided.

Due to the specifics of each backend, there are some differences in the way (and cases where) these allocators are used.

  • For all backends, the allocator is used for dynamically allocated objects and all STL-based containers and STL-based objects.
  • For the NVN backend - the allocator is also used for GPU allocations under the hood.
  • For the Vulkan backend - if no VulkanBackendAllocator is provided in its constructor, the default VulkanBackendAllocator implementation uses the IBackendAllocator passed to the VulkanBackend (if one is given) for allocations made inside it.
  • For the PS4 backend - the memory allocators that were passed in the constructor had their types changed to IBackendAllocator and are now used for everything that they were previously used for with the following improvement - the Onion allocator now additionally handles the dynamic allocations inside the backend. Requires user changes.
  • For the PS5 backend - the memory allocator that was passed in the constructor had its type changed to IBackendAllocator and is now used for everything that it was used so far, plus all dynamic allocations inside the backend. Requires user changes.

Example:

// Create an instance of a class that inherits IBackendAllocator
EngineBackendAllocator m_EngineBackendAllocator(...);
...
// Create a backend and initialize it with the desired custom IBackendAllocator
auto dx11 = new renoir::Dx11Backend(
    m_Renderer.get())->GetDevice(), false, m_PreferCPUWorkload, &m_EngineBackendAllocator);
// All backend allocations will now use the m_EngineBackendAllocator
// Again note that depending on the backend used, graphics driver calls may or may not
// use the custom allocator for allocation.

Transitioning to Prysm 1.9.5

New fields in the renoir::RendererCaps structure.

There are 2 new fields in the renoir::RendererCaps structure: renoir::RendererCaps::MaxTextureWidth and renoir::RendererCaps::MaxTextureHeight. The default versions of all backends are updated to fill in these values, which represent the maximum possible width and height of a 2D texture for the device, respectively. These values are used to limit the size of temporary textures that the Renoir library creates. A good default is 8192 by 8192 pixels, which is what was used internally before exposing these options.