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

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
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