Release notes



Released 04 May 2022
FeatureImplemented the DOMContentLoaded event
FeatureThe page load event fires after all images are loaded, including images specified in styles
FeatureUnreal EnginePreview support for Unreal Engine 5. Known issues include rendering artifacts on Nintendo Switch and iOS and video playback on game consoles
FeatureUnityImplement Input event propagation handler
FeatureImplement an optimization for constant buffers to reduce number of updates and memory used.
EnhancementFixed increasing memory when changing the style attribute or its properties
EnhancementUnityAdd new sample to demonstrate the input events handling propagation
EnhancementDocumented how to avoid banding in gradients
EnhancementDocumented animation, chat and map JavaScript libraries support
EnhancementAdd different semantics for null and undefined in the C++ bindings
EnhancementImplemented the animationstart and transitionstart events.
EnhancementAdded propertyName to transition events.
EnhancementAdded animationName to animation events.
FixFixed 9-slice and wrong image repeat in some cases
FixFixed calling pushState and replaceState History APIs without URL
FixFixed possible frame delay when drawing a new image from an atlas
FixFixed firing animationend event more than once for certain animations
FixFixed flickering artifacts caused by negated scaling for path objects (used by clip-path, clip-polygon, etc.)
FixFixed a crash in ClipboardData::Set when called nullptr string or invalid length
FixFixed custom elements reaction callbacks invocation order
FixFixed deferred scripts execution order
FixFixed WebAnimations API to return current frame time instead of the previous frame time
FixFixed document.readyState to report the document state correctly no matter when it is queried
FixFixed leaking WebSocket connections in the Player app
FixFixed nodes ignoring scroll set via JavaScript on the first frame
FixFixed transitions not activating on elements with pseudo elements
FixFixed transition state breaking when cloning nodes with JavaScript
FixFixed duplicated Inspector and Mutation Observer events on element inlineStyle change
FixFixed absolute element positioning when size is defined
FixFixed the animationend event to be fired once per animation instead of per property.
FixFixed a race condition when multithreaded command processing was enabled.
FixFixed a crash when destroying GPU buffers (vertices & indices).
APIRemoved forceStyleResolve option from GetAnimationsOptions, getAnimations now works by standard
APIDeprecated ReadNull in favor of SkipValue in the cohtml::Binder

Migration guide

Changed enumerations naming

In this version to add more consistency in naming between shaders and C++ code, we made some changes in CBType (for available Constant Buffers) and ShaderType (for available shaders) enumerations.

In CBType:

// Vertex constant buffers
CB_Transforms -> CB_TransformVS
CB_RenoirShaderVS -> CB_RenoirShaderParamsVS

// Pixel constant buffers CB_GlobalPixel -> CB_GlobalDataPS CB_StandardPrimitivePixel -> CB_StandardPrimitivePS CB_StandardPrimitiveAdditionalPixel -> CB_StandardPrimitiveAdditionalPS CB_EffectsPixel -> CB_EffectsPS CB_RenoirShaderPS -> CB_RenoirShaderParamsPS

In ShaderType

ST_BatchedStandard -> ST_StandardBatched
ST_BatchedStandardTexture -> ST_StandardBatchedTexture
ST_TexturesWithColorMix -> ST_ColorMixing
ST_GenerateSDFOutline -> ST_GenerateSDF
ST_Clipping -> ST_ClipMask

We have changed the naming of the constant buffers in the shaders in order to be consistent with the enumerations, so you should get the latest shaders to run the latest backend.

Constant buffer usage optimization

Sometimes before some draws there might be constant buffer updates which actually are not used at all in the current draw. We wanted to optimize those cases, so we’ve implemented a feature which updates the constant buffer only if it exists in the shader in the next draw.