Release notes

What’s new

Core

External Profile Markers

Accessing Gameface profile markers

Gameface now allows external code to hook into its profiling markers. User code can setup handler that will be called when Gameface is profiled and receive information on internal profiling events. This makes displaying profiling markers in external tools and/or systems. More information can be found in the Profiling documentation page. The documentation also illustrates how can Tracy can be used to profile Gameface

Public API Changes

As part of the feature, there are also a few notable public API changes to Gameface:

  • cohtml::Library::EnableProfiling should be used instead of cohtml::System::EnableProfiling.
  • cohtml::LibraryParamsWithExternalRenderingLibrary::FileSystemWriter should be used instead of cohtml::SystemSettings::FileSystemWriter
  • cohtml::IProfileMarkersTracer and cohtml::LibraryParamsWithExternalRenderingLibrary::ProfileMarkersTracer can be used by client code to receive profiling events from Gameface

Migration guide

Unity3D Integration System behavior enhancements

The system behavior has been modified to prevent the addition of an unnecessary Default System when you have a Custom System created and modified on the scene. This change will improve the plugin’s performance and avoid confusion with additional components that are not needed on the scene. Moving forward from this version, please note some specifics of the new behavior of the Unity3D Cohtml Plugin integration:

  • It is no longer possible to enable the debugger and change the port on the default CohtmlUISystem through “Library Configuration” window.
  • If you need a System with custom settings, you should ensure it is created before you start creating CohtmlViews.
  • If you do not make modifications to the CohtmlUISystem component, no additional actions are required, as a default system will be automatically created to handle subsequent Views.
  • For more information, you can refer to the Cohtml Plugin Extended Setup Guide page.
  • If you have been modifying the SystemSettings of the Default System that is created at the application startup, you will now need to create a System with custom settings. To do this, you need to create a CohtmlUISystem and SystemSettings components through the Unity3D editor or dynamically via script and change the system’s settings. For more details, refer to the Custom Systems page.
  • The Debugger settings members in CohtmlSystemSettings have been modified to be accessed through properties, allowing for direct validation of the SystemSettings Native object passed to the Cohtml native plugin to create the system. You can change the values directly through the properties, or if it’s more convenient, you can use the CohtmlUISystem.OnSystemCreate delegate, which will be invoked just before the native system is created.
  • A new GameObject, called CohtmlPluginManager, has been introduced, which persists throughout the application’s life cycle. For more information on the functions of this component, refer to the Plugin Manager section in the Extended Guide.

Changes to the renoir::RendererBackend interface

  • In this release, we have added a new rendering backend resource operation, void CopyTextureToTexture(Texture2DObject source, Texture2DObject destination, UpdateBox sourceRect, float2 destinationPoint);, to the renoir::RendererBackend interface. The idea behind it is to copy a region from one texture into a region of another texture. The sourceRect represents the region we wish to copy from the source texture, while the destinationPoint refers to the upper left corner of the destination region. The source and destination region are of the same size which is represented by sourceRect.Right - sourceRect.Left for the width and sourceRect.Bottom - sourceRect.Top for the height. The provided backends offer a reference implementation of the new method.

  • An existing renoir::RendererBackend method, void UpdateTexture(Texture2DObject texture, const Texture2D& description, UpdateBox* boxes, const void** newBytes, unsigned count, bool willOverwrite), has been slightly altered. It is known that newBytes is a list of pointers with the new data, with which the texture will be updated, however now if any pointer from this list is nullptr, its corresponding region should be cleared.

If you are using a custom backend, you will have to implement these changes on your end as well.

Text atlas texture size change

The minimum allowed text atlas texture size has been increased from 64px to 1024px due to internal refactoring of our font loading scheme. If you are using the TextAtlasWidth or TextAtlasHeight initialization parameters of the Rendering library to set a custom size, the value will now be clamped between 1024px and 8192px, rounded up to the nearest power of two.

Changelog

Version 1.57.0.2


Released 02 Sep 2024
APIBumped the minimum required MacOSX version to 10.13+
APIMoved the EnableProfiling method from the System to the Library interface
APIMoved the FileSystemWriter implementation from the SystemSettings to the LibraryParams interface
APIUnityRemoved the default CohtmlUISystem instance and the DefaultUISystem property
APIAdded CopyTextureToTexture method to the renoir::RendererBackend interface
APIChanged the UpdateTexture method of the renoir::RendererBackend to allow to clear regions of the texture
APIChanged the minimum allowed text atlas texture size to 1024px
APIUnreal EngineEnabled the GPU tessellator for SVGs by default
FeatureAdded support for $0 - $4 to the inspector
FeatureAdded support for enabling external profiling systems to receive events about internal profile markers
FeatureAdded support for Webpack HMR and React Hot Loader
FeatureUnreal EngineIntroduced LLM Scope tags for CPU memory tracking via the LLM Tracker
EnhancementChanges to the the text children of a style element now change CSS
EnhancementAdded the property name and stack trace when accessing objects marked as destroyed with DestroyExposedObject from JavaScript
EnhancementAdded support for media query media types all, print and screen
EnhancementImproved the performance of the Web Animation API implementation in cases when CSS animations animate more than one CSS property
EnhancementImproved the performance of the the CSS animations when animating multiple properties with the same value type
EnhancementAdded two factor authentication sample UI
EnhancementAdded two factor authentication to the multiplayer UI sample
EnhancementAdded login and friends list sample UI
EnhancementUnityAdded ability to modify the SystemSettings with the OnSystemCreate delegate
EnhancementUnityAdded API reference documentation for the functions exposed by the Unity3D integration
EnhancementUnreal EngineMade the Unreal Editor Live Reload feature to be enabled by default
EnhancementUnreal EngineAdded ICohtmlPlugin delegate for overriding the default FCohtmlInputPreprocessor
FixUse TextureBatchingHint to ensure correct calculation of GetUserGPUMemoryStats total and peak values
FixReplaced assert with JavaScript exception when ES6 module fails to load
FixFixed stack-overflow crash when loading ES6 modules with very deep dependency tree
FixFixed accumulating memory when videos are hidden or unloaded
FixFixed calling audio stream pause callback on non-playing streams
FixFixed incorrect drawing of SVGs used as background, border or mask image
FixFixed mutation observer assert on document disposal
FixFixed a crash due to missing temporary allocator when triggering events from worker threads
FixFixed Linux samples compilation, linking and post-build steps
FixAdded packaging of the missing ICU libraries for Linux
FixFixed a race condition during textures destruction
FixFixed the anti-aliasing artifacts for scaled circles and ellipses
FixFixed WebSocket race condition during disconnecting
FixUnityFixed not being able to connect the Dev Tools Inspector on every second play in the Unity3D editor
FixUnityFixed resource loading issue on MacOS and iOS caused by white space in the StreamingAssets path
FixUnreal EngineFixed colors of textures imported with the Unreal Editor texture import menu
FixUnityFixed propagating the input with multiple Canvas On-Screen views