Release notes



Released 12 Oct 2022
FeatureAdded an interface for time zone support for Sony PlayStation and Nintendo Switch
EnhancementImplemented an optimization to reduce the number of render passes when rendering complex effects
EnhancementAdded functionality and API to capture backend command buffers
EnhancementUnitySupport for Android x64
EnhancementIntroduced new backend API for resource barriers (see the rendering migration guide)
EnhancementEnhance batching to check for older combinable commands
FixFixed the growth of the stroke width for elements in SVGs to be bidirectional
FixUnityFixed binding between C# and JavaScript
FixFixed typescript definition of registering binding attribute
FixFixed order of custom element reactions when content is added through insertAdjacentHTML
FixFixed wrong indexing arrays with literal numbers in data-binding expressions
FixFixed crash in data-binding with complex expression and literal numbers indexing arrays
FixFixed the time on Nintendo Switch.
FixFixed clipped text shadows when using line height which is less that the character height.
FixFixed background/mask-position when using a gradient as an image
FixFixed mask-position property when the mask-image is a gradient.
FixFixed a crash when changing the html background before the body element is created.
FixUnreal EngineFixed assert when custom effects are enabled
FixUnreal EngineFixed safe zone calculation with multiple viewports
FixUnreal EngineFixed texture drawing in atlas crash in Unreal Engine 5 with DirectX12
FixFixed the default value of stop-color in gradients defined in SVGs


Released 21 Oct 2022
FeatureExperimental support for inline layout background styles per row (color, images and gradients)
FixFixed elements leaving visual artifacts after being removed from the DOM
FixFixed a case where CSS variables will fail to be resolved
FixFixed a crash when certain SVGs have zero width/height

Migration guide

Added support for resource state transitions in the rendering backends

With this version of Gameface, the Renoir rendering library supports the ability to explicitly issue state transitions for textures and depth-stencil textures. The feature is aimed at modern graphics APIs that support GPU resource states. Previously, the state transitioning logic was up to the backend to implement. Now Renoir can request state transitions explicitly through rendering commands. There are several API changes related to this:

  • There is a new field in the renoir::RendererCaps structure - SupportsResourcesStateTransitions. If the field is set to true, Renoir will generate commands that indicate that the state of a texture should be changed. For example, just before a texture is used as a render target, there will be a command that changes the state of the texture in question to “render target”.

  • Two new backend commands – BC_TransitionTextureState and BC_TransitionDSTextureState. Together with the new structures - TransitionTextureStateCmd and TransitionDSTextureStateCmd - these command tell the rendering backend which texture should be transitioned to which state.

For examples of how the new commands should be handled, you can check out the provided DX12 and Vulkan rendering backend. For more details on when exactly are texture state transitions generated, see Resource state transitions.

Added a rendering backend API that allows the execution of resource commands

The rendering backends now have a new method - RendererBackend::ExecuteResourceCommands - that should be implemented to make GPU resource creation and destruction possible. The job of the method is very similar to RendererBackend::ExecuteRendering but it only processes resource commands. Renoir will create several BackendResourceCommandsBuffer (very similar to BackendCommandsBuffer) objects and will pass them to RendererBackend::ExecuteResourceCommands where the resource command should be executed by the backend. The resource commands definitions can be found in the new public header RenoirBackend/BackendResourceCommands.h. All of the provided rendering backends have a proper implementation of the new RendererBackend::ExecuteResourceCommands method. Those can be used as a reference implementation for custom backends. For more details on the new flow for executing resource commands, see Resource state transitions.