Porting from 1.3 to 1.4
Summary of changes needed when updating code to v1.4
Critical Changes:
- Renderer::RefreshDisplay() must now be called from your render loop.
When managing rendering yourself via Renderer::Create(), you must now call Renderer::RefreshDisplay(0) before calling Renderer::Render().
void MyApplication::Render() {
// **NEW**:
// Notify the renderer that the default display has physically refreshed
// so that the engine has a chance to update animations.
renderer.RefreshDisplay(0);
// Render all Views to their respective surfaces / render-targets.
renderer.Render();
// Handle any updated surfaces / textures here.
}Discussion
Previous to 1.4, calling Renderer::Render() would update animations (eg, CSS animations, JavaScript requestAnimationFrame(), scroll animations, etc.) each time it was called.
This didn't quite match the spec since animations are supposed to be updated in lock-step with the physical refresh rate of the display which may or may not have matched the rate at which Renderer::Render() was called.
To fix this, we've introduced a new API method, Renderer::RefreshDisplay(display_id), that should be called whenever the display refreshes.
Single Monitor Setup
If you're using a single display, simply call Renderer::RefreshDisplay(0) whenever the display updates (all Views have a default display_id of 0).
Multi-Monitor Setup
If you're using multiple displays and want to independently control their refresh rate, you should:
- Associate a
Viewwith a display by updatingViewConfig::display_idwith a unique integer identifying the display. - Call
Renderer::RefreshDisplay(display_id)whenever the display physically refreshes.
- ViewListener::OnAddConsoleMessage() now has different parameters.
You will need to update your ViewListener::OnAddConsoleMessage() implementation to use the new ConsoleMessage class instead of individual parameters.
virtual void OnAddConsoleMessage(ultralight::View* caller,
const ultralight::ConsoleMessage& message) { }Other Changes
- New ImageSource API
ImageSourceandImageSourceProvidercan be used to composite custom image and texture data inside a web-page.
- New Listener APIs
NetworkListener(andView::set_network_listener()) can be used to listen for network requests and individually block/allow them.DownloadListener(andView::set_download_listener()) can be used to handle file downloads.
- New String API Improvements
ultralight::Stringand other string classes now have improved support for comparison, hashing, andstd::move()for better compatibility with STL containers.- You can optionally include the new
StringSTL.hheader for easy conversions betweenultralight::Stringandstd::stringorstd::string_view.
- New MessageSource enum values
The values for theMessageSource enum have changed.
- Defines Updated
ULTRALIGHT_VERSIONhas been updated to"1.4.0"WEBKIT_VERSIONhas been updated to"615.1.18.100.1"
You can use these defines to verify that you're working with the correct API version.
Updated 4 months ago
