Release notes
On this page
Changelog
Version 1.25.1.2
Released 04 Mar 2022
Feature | Support for Binary WebSockets in the Network panel in the inspector |
Feature | Support MQTT over WebSockets |
Feature | Binary messages support for WebSockets |
Feature | Introduced support for anti-aliased clipping |
FeatureUnreal Engine | Added option that enables the loading of UTextures instead of raw images if they exist inside an Atlas or can be located on disk |
Enhancement | Exposed V8 Tracing events on Xbox, which show where V8 is spending time when executing JavaScript code |
Enhancement | Introduced new member in Compositor’s DrawInfo structure to show which view owns the composition which has to be drawn |
Enhancement | Reduced various internal classes memory footprint |
Enhancement | Cache attributes NamedNodesMap instead of allocating a new one on each query for better performance and memory |
Enhancement | Optimized redrawing areas size and frequency |
Enhancement | Reduced the HTMLParser memory usage |
Enhancement | Optimized the transitions performance to be not affected by using transition: all |
Enhancement | Added support for render passes in the DirectX12 backend |
Fix | Fixed a crash when GC happens inside MutationObserver notification |
Fix | Fixed premature removal of data-bind nodes from the evaluation graph when they have mutators |
Fix | Fixed Player app gamepad swapped buttons 8 and 9 |
Fix | Fixed possible graphics artifact (color bleeding) when using a SVG as repeated background image |
Fix | Fixed positioning of SVG |
Fix | Fixed the class, style and id attributes to be able to be empty |
Fix | Added missing mutation records when classes are changed through classList |
Fix | Handle possible assertion for a degenerate triangle when handling glyphs that contain cubic curves |
Fix | Fix SVG clipping for background SVGs with viewBox attribute that has non-zero position |
Fix | Fixed mutation observers being garbage collected too early |
Fix | Fixed resized images being minified when drawing them onto CanvasRenderingContext2D |
Fix | Fixed possible null access crash in DrawShadowShape |
Fix | Fixed suffix attribute selector |
Fix | Fixed flex absolute children size calculation not respecting the direct parent |
Fix | Calculate transform origin based on snapped to pixel size box |
Fix | Fixed ArrayBuffer type on JSC VM |
Fix | Allow cohtml.js to be included multiple times without side effects |
Fix | Fixed a rare crash when profiling performance via the inspector |
Fix | Fixed stale stacking contexts which in certain cases improves memory consumption |
Fix | Fixed an assert failure when using the compositor feature in Debug configuration |
Fix | Fixed rare cases where elements would be missing their visual style during rendering leading to assert failures and crashes |
Fix | Fixed wrong AABB debug visualization when using ShowElementAABBs feature |
Fix | Fix disappearing pseudo elements |
Fix | Fixed URL parsing for URLs that contain backslashes |
Fix | Transitionend events are no longer fired when an element with a transition is shown |
Fix | Transition property changes now correctly take effect when the active transition ends |
Fix | Fix incorrect display of preloaded images using non-premultiplied alpha |
FixUnreal Engine | Fixed Video sample crash on Switch by disabling the Procedural sounds |
API | Modified the User fonts API so it takes the Ascent/Descent of a font instead of just the baseline |
API | Introduced new field in the RenderCaps structure of the backends – EndingRenderPassRequiresStateUpdate |
Migration guide
Anti-aliased clipping
Version 1.25 of Gameface introduces anti-aliased clipping (for more details see Anti-Aliased Clipping. This has required some changes to the rendering.
- All backends now support 5 texture slots instead of 4.
- The
PerPrimitivePS
constant buffer now has a newint
fieldShouldClip
. - There is a new pixel shader –
CohClipMaskPS.hlsl
- There are a few new pixel shader types (
renoir::PixelShaderTypes
).renoir::PixelShaderTypes::PST_ClippingRect
– used for drawing a clip rectangle,renoir::PixelShaderTypes::PST_ClippingCircle
– used to drawing clip circle,renoir::PixelShaderTypes::PST_ClippingTexture
– used for drawing clip image, andrenoir::PixelShaderTypes::PST_ClippingPath
– used to draw a clip-path. The handling of these shader types is in the newCohClipMaskPS.hlsl
pixel shader. - There are a few new shader types that all backends are being able to handle –
renoir::ShaderType::ST_Clipping
,renoir::ShaderType::ST_ClippingRect
,renoir::ShaderType::ST_ClippingCircle
,renoir::ShaderType::ST_ClippingTexture
, andrenoir::ShaderType::ST_Clipping::ST_ClippingPath
. The handling of these shader types can be seen in therenoir::Dx11Backend
backend.
Enhancement of user fonts API
Previously, the cohtml::UserFontDescription
structure contained a Baseline
field, which divided the line height into 2 parts. In version 1.25 this field is removed in favor of adding 2 different ones - Ascent
and Descent
, which are produced by most font authoring tools and provide greater control for the glyph positioning. The Ascent
is the part above the baseline and the Descent
is the part below. These 2 values may not sum up to the LineHeight
- the excess height is the line gap, which is used internally for proper positioning.
The samples and documentation are updated to reflect this change.
- If the tool you’re using for generating user fonts outputs the
Ascent
andDescent
, you can directly use them (ascent is positive and descent is negative). - If you don’t have those values readily available, you can do an approximation that assumes no line gap using the
Baseline
value:- Ascent = Baseline
- Descent = Baseline - LineHeight
Compositor API Enhancement
Version 1.25 of Gameface introduces enhancement of the usage of Compositor (see Compositor.
unsigned ViewId
is added to therenoir::ISublayerCompositor::DrawData
structure. With this change, you can have the same composition IDs in different views.- Likewise,
unsigned viewId
is added as a parameter toOnCompositionRemoved
callback to identify the actual composition for removal
New rendering backend capability
- There is a new field in the
renoir::RendererCaps
structure -EndingRenderPassRequiresStateUpdate
. The field indicates whether the GPU state should rebound after a render pass has been ended. This is a requirement for some graphics APIs (e.g. Metal) where the driver requires you to update the GPU pipeline state every time after the end of a render pass. TheEndingRenderPassRequiresStateUpdate
has been added in order not to burden the backend themselves to cache the GPU state and rebind it again after a render pass ends.