Skip to content
SiteEmail

Feature

Unity3D Package Manager packages for console platforms

Feature

Added custom memory allocator support to Renoir backends

Feature

Added callbacks for resources lifetime in Renoir backends

Enhancement

Improved the performance of loading font collections

Enhancement

Reduced the repaint area when a small part of the view is changed

Enhancement

Improved error messages when binding map-like objects with non-string keys

Enhancement

Improved using custom SystemSettings in Unity3D

Enhancement

Added engine.off information to the Documentation

Enhancement

Updated support for Unity3D HDRP to the latest rendering pipeline API changes

Fix

Text wrapping properly respects  

Fix

Query selectors and CSS selectors work with data- attributes

Fix

Fixed crash when multiple gradient definitions are parsed in parallel

Fix

Fixed assert on view destruction for ChakraCore platforms with multiple views and data-binding are used

Fix

Fixed degrading performance when using hover on complex selectors

Fix

Fixed updated layout styles depending on rem or em units when the unit changes

Fix

Fixed flex properties that continued to be in effect after removing their CSS declarations

Fix

Fixed loading resources with a backslash in the URL for Unity3D

Fix

Fixed gamma-correctness for Unity3D HDRP

Fix

Fixed handling of events by the TextInputHandler when Advance() is not called on the System

Fix

Fixed crash caused by updating of the pointed/hovered elements after scrolling.

API

Deprecated handled flag for input events


Feature

Support for Unreal Engine 4 4.25

API

This version is not compatible with versions of Unreal Engine 4 different that 4.25


Feature

Paint rectangles can be toggled by the Inspector rendering panel

Enhancement

Added support for percent values in SVG images

Enhancement

Reduced per-frame allocations for transformations

Enhancement

Extended the performance timeline of the Inspector with additional events

Enhancement

Made the destruction of the UCohtmlWidget non-blocking in the Unreal Engine 4 plugin

Fix

QuerySelectorAll returns elements in the correct depth-first-search order

Fix

Fixed crash when dispatching events during document unloading

Fix

Fixed crash when starting a XmlHTTPRequest during document unloading

Fix

Fixed elements disappearing during scrolling

API

Deprecated the Android builds with the gnustl standard library. They are moved to the *_gnustl folders

Fix

Fixed lifetime of the AudioWrapper objects in the Unreal Engine 4 plugin

Fix

Fixed the plugin unload order in the Unreal Engine 4

Fix

Crash when responding to XmlHTTPRequests after the plugin has been uninitialized in Unreal Engine 4


Feature

Support for PlayStation 4 SDK 7.5


Feature

Added line break iterator API to aid text wrapping

Feature

Enabled saving profile from Inspector's Performance tab

Feature

Added support for aborting of resource requests when the view is destroyed or navigate to another page

Feature

Update PlayStation 4 SDK to version 7.5

Feature

Added setting for converting property names to lower case in Unreal Engine 4 when using the automatic UType binder

Feature

Added a special CSS property “coh-composition-id” which allows users to compose the element with a custom renderer

Feature

Added special CSS properties “coh-custom-effect-name” along with several custom animatable parameters that allow users to apply a custom shader to the element

Feature

Added new RendererCaps members which allow customizing the maximum allowed texture size. These new properties must be filled in the RendererBackend::FillCaps method.

Feature

Support for Live Views in Unity3D

Enhancement

Increased the maximum allowed paint rectangles

Enhancement

Paint rectangles now leave a short trail

Enhancement

Made CohtmlView and CohtmlUISystem Unity3D specific methods virtual

Enhancement

Added customizing the Library configuration in Unity3D

Fix

Fixed getPropertyValue for the transform CSS property

Fix

Fixed crash when using toLocaleLowerCase on Xbox

Fix

Fixed FInputGesture deprecated warnings in Unreal Engine 4

Fix

Fixed History feature minor memory retention on reload

Fix

Fixed capital letters, spaces and special characters in Unity3D with the new Input System

Fix

Fixed multiple views rendering and overlaying in HDRP mode for Unity3D

Fix

Fixed crash in the CSS parser for malformed calc expressions

Fix

Fixed crash when toggling view visibility in Unreal Engine 4

Fix

Fixed crash when responding to resource requests after destroying the library in Unreal Engine 4

API

Added an API for an external break iterator implementation

API

Add View::SetCustomSceneCompositor method that forwards the passed arguments the Renoir scene, which fires callbacks on the interface

API

Add View::SetSceneCustomEffectRenderer method that forwards the passed arguments the Renoir scene, which fires callbacks on the interface

API

Added API for clearing the navigation history of a given cohtml::View

API

Added an option to receive resource request calls on the main thread


Feature

Support for WebSockets in Unreal Engine 4

Fix

Fixed disappearing elements with certain style changes

Fix

Fixed crash when registering new engine.on handers during execution of a handler

Fix

Fixed crash when locking vertex or index buffers fails

Fix

Renamed internal rapidjson and rapidxml libraries to avoid clashes


Enhancement

Added support for the background-position-x and background-position-y CSS properties

Enhancement

Improved Dualshock 4 controller support for Unity3D

Fix

Fixed wrongly fired resource abort notifications for already completed requests

Fix

Fixed race issues when executing layout tasks in parallel

Fix

Fixed linker issues when the library is delay loaded with certain compiler options

Fix

Fixed a crash which was occurring during event dispatching

Fix

Fixed an error about missing context argument in engine.off

Fix

Fixed a bug causing rare failures to load style sheets

Fix

Improved tagging of memory allocations to better reflect its usage

Fix

Fixed chaining CSS animations on the same CSS property

Fix

Fixed by ref binding of empty std::vector collections

Fix

Removed requirement for Vulkan runtime on Windows for Unity3D plugin

Fix

Fixed scrolling on Linux in Unity3D with the new InputSystem

Fix

Fixed Unity3D editor deadlocks when stopping the game

Fix

Fixed checkout issues for Perforce users in the Unreal Engine 4 plugin

Fix

Fixed memory alignment issue in VirtualAllocators on PS5 and Switch

API

Added option to disable internal allocators that retain memory

API

Added “pixels per scroll” to set the speed of the scrolling in Unity3D

API

Increased the version of cohmtl.js – update all your copies


Fix

Fixed possible deadlock when advancing the views


Fix

Fixed crash when calling FreeRenderingResources on views with SVG images

Fix

Fixed possible leak of SVG tessellated data

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

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
}

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.

New fields in the renoir::RendererCaps structure.

Section titled “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.