Release notes
What’s new
Content Development
Data Binding Performance Tracing
Starting from this release, the performance of each data binding attribute can be inspected in the “Performance” tab of the Chrome Inspector.
For more details, see the documentation for Enhanced Performance Tracing
Core
Simple Filters
We’ve enhanced how CSS filters are processed in Gameface. Previously, each filter (like brightness, sepia, etc.) would generate its own texture, which could quickly add up in complex DOM trees—especially when stacking multiple filters.
With this update, filters without any opacity effects (like transparency or alpha changes) are now intelligently merged into a single color matrix operation. This reduces texture creation, saves memory, and significantly improves rendering performance-especially in deeply nested or filter-heavy documents.
Note that the following filters would still create a texture:
- blur
- coh-axis-blur
- drop-shadow
Rendering
Global GPU Resources Pool
With this version of Gameface, several of the internal rendering caches are getting merged into a single one - the global GPU resources pool. Previously, the Gameface’s rendering library had multiple caches that had to be adjusted and fine-tuned individually. Now there is a single such cache that can be controlled with a single target GPU memory number. For more information, see the “Global GPU Resources Pool” in the documentation on Internal Caches.
Releasing of the user background and global backdrop mask textures
Previously, Gameface was not releasing the Global Backdrop Filter Mask and the User Background textures properly upon the destruction of the corresponding. cohtml::ViewRenderer
of a given cohtml::View
. Now, when calling cohtml::ViewRenderer::Destroy
, both of those textures will be destroyed through a renoir::BRC_DestroyTexture
command in the rendering backend. For more information on the specifics, see the corresponding documentation for both of the features:
Removed support for explicit resource state transitions generated by the rendering library
We have deprecated the renoir::RendererCaps::SupportsResourcesStateTransitions
field and the BRC_TransitionTextureState
, BC_TransitionTextureState
and BC_TransitionDSTextureState
rendering backend commands as a result of dropping the support for explicit resource state transitions generated by Renoir. These state transitions will continue to be handled entirely in the backends.
Unreal Engine
New delegates for modifying Library, System and View options
The Gameface integration for Unreal Engine now provides new ModifyLibraryParams
, ModifySystemSettings
, and ModifyViewSettings
delegates for modifying all Gameface Library, System and View options.
ModifyLibraryParams
, ModifySystemSettings
, and ModifyViewSettings
delegates are located inside ICohtmlPlugin.h
, and are called right before creating a Gameface Library, System and View, passing a pointer to the already populated settings.
Migration guide
Changes to binding of 64-bit integer values
Starting from this release, all 64-bit
integer values are bound to JavaScript as BigInt
. In previous versions Number
was used if the value fits in Number.MAX_SAFE_INTEGER
, otherwise BigInt
. If your code counts on the old behavior, you can restore it by changing the View
setting: Int64BindingMode
to Int64BindingModeType::Mixed
, however this is not recommended and the option will be removed in future releases.
Changelog
Version 2.0.0.0
Released 10 Oct 2025
API | Added ViewSettings::Int64BindingMode to control how to expose int64_t values to JavaScript |
API | Removed support for the backend commands for resource state transitions |
Feature | Introduced a Global GPU Resources Pool that unifies several internal caches for GPU resources. For more information, see the Internal Caches page in the documentation |
Feature | Early flex gap property support behind developer option --use-compatibility-yoga |
Feature | Added Inspector performance trace events for data binding |
Enhancement | Introduced a Simple Filters feature that allows non-standard but optimized rendering of elements with color filters |
Enhancement | Added command line arguments pass through for Player startup scripts |
Enhancement | Enhanced the release of the user background and the global backdrop filter mask to avoid leaks. For more information, see the pages on the Backdrop Filter and the Global Backdrop Filter |
Enhancement | Enhanced string conversion for background-repeat and mask-repeat style properties to match the web standard behavior |
Enhancement | Enhanced the debug marker support in Unity’s C# backend. Submitted markers are now properly visualized in graphics debugging tools like RenderDoc |
Enhancement | Improved styling performance with complex selectors in some cases |
Enhancement | Improved warnings for JS Styling via el.style.prop and el.style.someFunc() |
Enhancement | Added a warning when setting invalid value using the el.style.setProperty JS API |
Enhancement | Improved warning message with more information when setting invalid values |
Enhancement | Log warning when trying to remove a non-existing property via el.style.removeProperty() |
Enhancement | Enhanced warnings for unsupported all property operations to be more descriptive |
Enhancement | Added support for binding int64_t values as BigInt in JavaScript |
Enhancement | Added support for using rem units on non-inline SVG root’s ‘width’ and ‘height’ presentation attributes |
Enhancement | Added --position-x and --position-y options to the Player to control its starting window position |
Enhancement | setInterval DOM API now supports the default value of 0 for omitted delay argument |
Enhancement | Support for the Performance Monitor tab in DevTools |
Enhancement | The performance monitor panel in the Inspector visualizes the top level profiling markers |
Enhancement | Implemented Depth-Stencil resolve to color texture for the OpenGL, Metal, and Nintendo Switch backends. The GPU tessellator now uses one texture less on those backends |
Enhancement | Enabled all GPU markers in the backends for the Debug and Development configurations |
APIUnreal Engine | Removed the bConfigureForCustomEffectsAndCompositorAPI option |
EnhancementUnreal Engine | Improved error message for incorrectly configured views using Custom Effects |
EnhancementUnreal Engine | Added support for Custom Effects with Unreal Engine Material Additive Blend Mode |
EnhancementUnreal Engine | Added support for Vulkan Shader Model 6 |
EnhancementUnreal Engine | Integrated internal profiling markers into Unreal Insights |
EnhancementUnreal Engine | Add ICohtmlPlugin::OnGetDataStorageProvider delegate for providing implementation of the cohtml::IDataStorageProvider |
EnhancementUnreal Engine | Add Delegates to modify LibraryParams , SystemSettings and ViewSettings |
Fix | Prevent custom expressions are not supported warning from appearing when trying to set a property to an invalid value that is not a custom expression value |
Fix | Fixed the type name of dynamic properties with the Safe Data Binding enabled |
Fix | Fixed a race condition when creating a ScriptCompiler in a worker thread |
Fix | Fixed getting inline styles with custom expressions in them for el.style properties and el.style.getPropertyValue() |
Fix | Fixed a bug where setting inline style for property fails if the old or new inline style for the property is using a custom expression value |
Fix | Fixed default computed style for ‘animation-delay’ and ‘transition-delay’ to now return 0s instead of just ‘0’ |
Fix | Fixed the string serialization of ‘animation-timing-function’ and ‘transition-timing-function’ for the ‘step-end’ value to be ‘steps(1)’ instead of ‘steps(1, end)’, in line with browsers, since ‘end’ is the default value and should be omitted |
Fix | Fixed the default value for mask-repeat to be repeat instead of no-repeat , as per the standard |
Fix | Fixed reifying of mix-blend-mode in CSSTOM from color-Burn to color-burn |
Fix | Fixed reifying of background-repeat so that, for more than 1 comma separated values, we return CSSStyleValue as CSSTOM doesn’t currently support it |
Fix | Removed commas between color components in computed style of color(coh-scrgb ...) color value since this type of color value accepts only whitespace as a delimiter between color components |
Fix | Fixed text-align sometimes not working when parent container grows because of sibling |
Fix | Stop logging getProperty warning for non-existent property when removeProperty() was called instead |
Fix | Fixed JS Styling bugs for el.style.prop and el.style.someFunc() and el.style.cssText APIs |
Fix | Fixed default inline styles for properties to return empty strings instead of default computed styles for shorthand or undefined for longhand properties |
Fix | Fixed setting el.style.prop as null , now treated as setting to empty value and will remove the inline property declaration |
Fix | Fixed an assert when trying to remove all property inline style by setting it to empty style value |
Fix | Removed leading whitespace in el.style.cssText for the inline styles |
Fix | Removed xlink:href from the css properties as it is not a css property. It’s usage as an attribute is unaffected |
Fix | Removed non-standard unused css property percent |
Fix | Fixed JS APIs for modifying/getting styles not working for missing properties |
Fix | Fixed coh-font-fit not being recognized as a valid property when using it with el.style functions (getPropertyValue /setProperty /removeProperty ) and the CSSTOM el.attributeStyleMap functions (get /set /delete /has ) |
Fix | Fixed not being able to style coh-simple-opacity from JS via el.style.cohSimpleOpacity /via the functions of el.style /via the functions of el.attributeStyleMap for CSSTOM |
Fix | Fixed not being able to style backdrop-filter from JS via el.style.backdropFilter |
Fix | Fixed not being able to style coh-enable-backdrop-filter from JS via el.style.cohEnableBackdropFilter |
Fix | Fixed not being able to style coh-partitioned from JS via el.style.cohPartitioned |
Fix | Fixed SVG images without specified id attribute having an empty id attribute instead |
Fix | Fix crash when unloading an svg used as an image before it has fully loaded |
Fix | Fixed setInterval and setTimeout to work with non-positive delays correctly |
Fix | Fixed line height not being applied to <input type='button'> elements with a value attribute |
Fix | Fixed textarea and input elements with empty text not being sized correctly |
Fix | Fixed an issue in the Vulkan backend related to creating compute shaders and causing a hang on some Android devices |
Fix | Fixed an issue in the PS5 backend leading to a crash when drawing multiple views |
Fix | Fixed justify-content space-around failing to align for absolute children |
Fix | Fixed percent offsets on absolute elements sometimes resolving to negative values |
FixUnreal Engine | Fixed a crash when accessing nullptr element of TObjectPtr<> C-style array bound through the CohtmlUTypeBinder |
FixUnreal Engine | Fixed a crash upon uninitialization when destroying the FileSystemWriter implementation |
FixUnreal Engine | Fixed FSlateApplication::Get() assert during OnDisplayMetricsChanged on MacOS |
FixUnreal Engine | Fixed leaking User Background textures when a view gets destroyed before a WrapUserTexture call is received for them |