logo HB

Changelog for Hummingbird

Version – released 3 April 2018see blog post

Feature Added support for 64-bit Universal Windows Platform (UWP).
Feature Added support for the CSS property text-align on all HTML elements except input fields (<input>, <textarea>). All forms (left, right, center, justify) of text alignment are supported.
FeatureAPIBreakingChange Added support for Input Method Editor (IME). Implement this API to allow players to write in input fields in Chinese, Japanese, Korean and others. The engine can now tell Hummingbird when text is being composited and Hummingbird will also notify the engine whenever something important IME-related happens (e.g. the user cancels the composition).

This is a breaking change – it adds new methods to cohtml::IViewListener which you’ll need to implement in your own view listener.
Feature Our native packages now contain a set of samples which focus on how to integrate specific features of the SDK into your engine. Our next releases will focus on adding many more samples as standalone apps instead of having all of the sample code in one place. This release contains the following samples:

  • HelloHummingbird – introduces the new sample infrastructure and just loads a single page
  • Nameplates – shows how to send data from C++ to JavaScript. In particular,it shows how to control the states of several nameplates (position, health, mana) in a straightforward way.
  • Localization – shows how to implement your version of cohtml::LocalizationManager and integrate Hummingbird’s localization system with your engine’s.
  • FallbackResources – Hummingbird has a feature which allows you to to load cooked files in place of uncooked files (e.g. automatically load .dds textures even if the HTML file is referring to a .png). The sample demonstrates how to extend your implementation of cohtml::IAsyncResourceHandler to achieve that.
FeaturePS4 Added support for SDK 5.0.
FeatureUE4 Added support for UE4 4.19.
APIBreakingChange The renoir::Texture2D::IsDynamic boolean property has been removed. The same data is now accessible via the renoir::Texture2D::Props bitset (check for renoir::ImageProperties::IMP_Dynamic). This change will only affect you if you are using a custom renoir::RendererBackend implementation; if you are using one of the provided backends you don’t have to do anything about it.
Enhancement Our dev tools now run on all consoles (PS4, XB1, UWP). Due to limitations in the JavaScript Virtual machine, only the panels that don’t require JS execution will operate correctly on these platforms. At this moment, this only includes the ‘Performance’ panel.
Enhancement The Hummingbird Player application now supports drag & dropping HTML files on Windows. Dragging and dropping will cause the application to load the HTML page immediately.
Enhancement The Hummingbird Player application now takes a --root argument which allows you to specify the root directory used for coui:// URLs.
Enhancement The docs about HTML / CSS / JS Event support have been updated and are now available on the website under the Supported HTML section. They are no longer available as standalone PDF files.
EnhancementAPI You can now specify what texture filtering mode you want the SDK to use for preloaded images. This allows you to preserve pixelized details on your images if your game requires so. See the new property cohtml::IAsyncResourceResponse::UserImageData::TextureFiltering.
Enhancement Optimized event handling time by 50%. Depending on the complexity of your page this could mean an improvement of up to 15% in overall frame time.

Previously, we would keep asking the JS VM whether each of our elements had an event handler attached and whether we should fire it which proved to be very expensive on events that are fired often (like mouse events).
Enhancement The data binding system will now detect and report many more instances of invalid usage, greatly improving debugging.
Enhancement Extended the support for Web Animations. We now support seeking, reversing and specifying playback rate on the Animation object . (i.e. currentTime, playbackRate, reverse). Although usable from your JavaScript, we envision those functions will be mostly used through the Adobe Animate Exporter.
Enhancement You can now run different views on different ‘Layout’ worker threads. Previously, when integrating our task system with your engine you were allowed to only schedule ‘Layout’ tasks from a single thread (even when using multiple views).
EnhancementiOS Our iOS build now has bitcode support enabled.
Fix Fixed a crash caused by attempts to reparent nodes (detach from the DOM tree and attach to a new parent) from JavaScript.
Fix Fixed a crash caused whenever a <script> element would attempt to remove itself from the DOM tree during its own execution.
Fix Fixed a bug that caused GIF images to animate faster than they were supposed to when the GIF file didn’t specify frame duration.
Fix Fixed a bug which prevented the inspector from working while two or more views were running simultaneously.
Fix Fixed a series of warnings that the inspector triggered anytime it connected to a View.
Fix Fixed a bunch of minor instability issues with the Hummingbird Player (crashes, inconsistent input problems)
Fix Fixed a bug which caused the gamepad API to stop working after you refresh the page.
FixU3D Fixed a crash on a few Android devices caused by Unity3D telling us that the device was GLES3 capable when in fact it was only GLES2 compatible.

Version – released 22 February 2018see blog post

Feature Added support for DirectX 12. We added a separate sample solution / project demonstrating that on Windows. DX12 is now the default renderer in our samples on Xbox One.
Feature Extended support for Chrome’s Developer Tools with the ‘Console’ panel. Console messages (e.g. from console.log or console.error) will now be displayed. You can type arbitrary JavaScript and Hummingbird will evaluate it and print the result. To access the tools, open Chrome and go to http://localhost:9444 after launching your game.
Feature Extended support for Chrome’s Developer Tools with the ‘Performance’ panel. You can now profile your UI and inspect what parts of the page are the most demanding.To access the tools, open Chrome and go to http://localhost:9444 after launching your game.
Feature Extended the data-bind-for syntax. It now supports passing the index of the current element, as well as an iterator for the element itself. Briefly, this allows you to use this syntax data-bind-for="index, it: {{myModel.myArray}}". See the docs for more info.
Feature Extended the standard CSS filter property with a new custom keyword. coh-color-matrix allows you to specify a color matrix which will be applied to the element and to achieve some effects that are not otherwise doable with standard CSS filters.
FeatureUE4 Support for UE4 4.19, Preview 3.
FeatureUE4 Added support for live views and preloaded images to the UE4 plugin. This allows you to easily achieve some impressive effects like displaying a 3D avatar of the player in the UI.
See the newly added LiveViewMap which shows how to have the feed from two cameras displayed within the UI.
FeatureUE4 The data binding system can now be used from Blueprints. You can create and update data models and synchronize the game and the UI without ever leaving Blueprints.
FeatureUE4 Unreal types (UCLASS / USTRUCT) are now automatically exposed to JavaScript. Previously, you would have had to describe them to the SDK by writing a CoherentBind function for each of your classes. This is now done automatically.
Fix The data binding system now ignores whitespace in data bind attributes. Previously, it would fail to interpret attributes correctly if they contained whitespaces.
Fix The CSS property transform-origin now works as expected with non-percentage values.
Fix Fixed a crash caused by clicking on text input past the final character after a certain number of characters were previously deleted.
Fix Added a virtual destructor to the cohtml::Library interface.
FixUE4 Fixed a bug causing the ‘Add HUD’ button in the Hummingbird menu to add a HUD page without visible text.

Version – released 6 February 2018see blog post

Feature Added support for GIF images in <img> tags.
Feature Added support for the <nav>, <header>, and <footer> elements.
Feature Added support for attributes on DOM elements, including the dataset API used for setting data-* attributes.
Feature Added support for 3D transforms, transform-origin, and perspective-origin. Completed support for transform (previously it was missing support for the matrix2d syntax).
Feature Added support for complex CSS selectors. The SDK now works correctly with the following selectors:

Support for this feature is hidden behind the ViewSettings::EnableComplexCSSSelectorsStyling flag and is turned off by default as it has performance implications.

Feature Added support for the inherit keyword in CSS rules.
Feature Added partial support for the WebAnimations API.
Feature Added support for the History API.
Feature Added support for the Location API.
Feature Added support the Text and CharacterData interfaces which allows text nodes in the DOM to be manipulated from JS.
Feature Added support for Node.getFirstChild and Node.getLastChild.
Feature Added support for the MutationObserver API.
Feature Added support for document.querySelector and document.querySelectorAll.
Feature The data binding system now allows you to bind to the CSS properties class, background-image, and transform. This allows you to synchronize more data between the UI and the game. See the blog post linked above for examples. The relevant data-binding attributes are data-bind-class, data-bind-class-toggle, data-bind-background-image-url, and data-bind-transform2d attributes.
Feature The data binding system now supports structural data binding via the data-bind-if and data-bind-for attributes. Together they allow you to generate elements in the page dynamically, directly from your data. See the blog post / documentation for further information.
Feature Added support for data binding using pure JavaScript objects. This allows UI developers to use the system without corresponding C++ models which is especially helpful for mocking and for data that’s computed / stored in JS. See the docs for further information.
Feature Added initial support for Chrome’s Developer Tools. Open Chrome and go to http://localhost:9444 after launching your game to access the tools. Currently only the ‘Source‘ panel works which serves as a JS debugger. You can set breakpoints, add watches, inspect values and the callstack and follow the code’s execution.
FeatureUE4 Added support for Unreal Engine 4.18
Enhancement Improved performance by drastically improving cache locality in some of our computationally intensive systems like animation playback and event dispatching.
Enhancement Expanded the existing JS interface for the Document by adding items from the standard.
Enhancement Added ES6 support to platforms where it was previously missing (PS4, XB1)
Enhancement Added canvas support to platforms where it was previously missing (PS4, XB1, iOS, MacOS)
Enhancement Improved library compatibility on Android – all symbols in our third party dependencies are now hidden in a namespace so they won’t clash with versions of the same libraries the engine is using.
EnhancementAPI Added new public method (cohtml::View::ShowElementAABBs) allowing users to visualize the bounding boxes of all elements on the page.
Enhancement Added support for console.time and console.timeEnd
Enhancement The cohtml::Library interface now supports reinitialization. Previously, it was unsupported to deinitialize and create a second instance of the library.
Fix The JS event ‘touchend’ will now be properly dispatched. Previously, only ‘touchstart’ and ‘touchmoved’ were dispatched.
Fix Fixed multiple bugs in the <input> and <textarea> elements caused by incorrect calculation of text size.
Fix The :hover CSS pseudoselector is now correctly applied to all hovered elements in the DOM tree. Previously, only the topmost element would receive this style but not his ancestors.
Fix Fixed a major memory leak on platforms using V8 (Windows, Android) caused by garbage collection being run very rarely.
Fix Fixed a crash in engine.call on platforms using JavaScriptCore (PS4, XB1, iOS, MacOS).

Version 1.5 – released 22 August 2017 – see blog post

Feature Added live view support. Live views allow you to show 3D scenes in the UI (picture-in-picture) e.g. show a player’s 3D avatar or an item in the UI.
Feature Added CSS filter support. CSS filters allow you to apply postprocessing effects on any element in the page e.g. blur or grayscale.
Feature Added a new, nonstandard, display mode for layout – display: simple which greatly simplifies the layout algorithm used by Hummingbird and results in much faster frame time. See the docs for more details.
FeatureUE4 Introduced a plugin for UE4 closely resembling the GT plugin. It features:

  • Creating UI for HUDs and for in-world surfaces via AHUD / actor components
  • Slate and UMG support
  • Full keyboard, mouse and gamepad support
  • Localization support
  • Blueprint support for all of the above
  • Performance metrics via stat Hummingbird / stat HummingbirdMemory
  • Console commands (e.g. hb.reload to reload all Hummingbird views)
  • In-editor menu for setting up common system properties
  • Supports Windows, PS4 and XboxOne
  • Comes in a separate installer (or .zip archive if you’d rather)
  • Separate docs
  • A sample game for versions UE4.16+.

Version – released 26 June 2017

Feature Significantly improved the CSS layout algorithm. Added support for percent (%) values on positions and sizes.
Feature Significant improvements in the SVG renderer. SVGs now look better, take less memory and are rendered more efficiently.
Feature Added support for declarative data-binding. Developers can bind values in the HTML to their data-model in C++.
Feature Added gamepad support and API for using gamepads directly in Hummingbird.
Feature Implemented the innerHTML JavaScript property on DOM nodes.
Enhancement Improved the performance of Hummingbird during style changes.

Version – released 20 Feb 2017

Fixed Crash on closing Unity game on MAC
Fixed Animations look choppy on Motorola G (3rd gen) with OpenGL ES 3
Fixed Toggling the display property from block to none breaks the layout
FixedUnity Strategy game (cards game) sample – cards pop-up descriptions do not occur on tocuh event
Fixed Fix nodes position when an node is changed from hidden to visible
Fixed JS GetClassNames return name with trailing ws

Version – released 11 Jan 2017

FeatureNative Added JS debugger for Android and Windows
FeatureUnityNative Added support for compressed image formats on mobile – ASTC, ETC1, ETC2
FeatureNative Added support for pre-loaded images
FeatureNative Added support for fallback image formats – in development users can use PNG but in shipping the library automatically loads ETC/DDS etc.
FeatureNative Added support for a “onload” event and resource load tracking
EnhancementNativeUnity Coherent Editor
EnhancementUnityNative Added back and forth buttons to the samples
EnhancementUnity Added support for Unity 5.5
Fixed SVG Opacity does not work as expected
Fixed Bug in the MOBA sample – the potions randomly disappear
FixedUnity On low end devices the input events do not work
Known Issues The resourses in Mad Rabbits Sample and Moba Main Menu Sample load slowly
Known Issues On Motorola G (3rd gen) with OpenGL ES 3, the animations look choppy
Known Issues Problem with animations when fired with onload event
Known Issues Crash on attaching the debugger to a page flooding with console.log()
Known Issues In particular cases, the keyboard input could cause a crash

Version 1.02 – released 16 Nov 2016

FeatureNative Added debugger shared object to the Android apk
FeatureUnityNative The global context logic removed from JSC
Fixed Error in the backend when running Multiple views on gles2
Fixed SVG polygon renderer on iOS
Fixed MOBA sample – bug with the On/OFF music button
Fixed MOBA sample – MainMenu fixed
FixedUnity Unity documentation indexes
FixedUnity Mad Rabbits sample – crash on exit on iOS
FixedNative Menu sample – js error on toggling menu
Fixed Unity Logging in Unity does not work

Version 1.0 – released 08 Nov 2016

FeatureUnityNative Support for OpenGL ES 2 & OpenGL ES 3 on Android and iOS
FeatureUnityNative Support for input related tags
FeatureUnityNative Support for @font-face rule
FeatureUnityNative Support for keyframe animations
FeatureUnityNative Support for text shadow and box shadow
FeatureUnityNative Support for masks
FeatureUnityNative Support for 9-slice and rounded borders
FeatureUnityNative Support for text input and touch events
FeatureUnityNative Support for multiple views
FeatureUnityNative Support for SVG images (Tiny specification)
FeatureUnityNative Support for reloading pages in the UI
FeatureUnityNative Devtools integration in development, console log printing working on Android and Windows