Ultralight C API 1.4.0
|
Global platform singleton, manages user-defined platform handlers.
#include <Ultralight/CAPI/CAPI_Platform.h>
The library uses the Platform API for most platform-specific operations (eg, file access, clipboard, font loading, GPU access, pixel buffer transport, etc.).
Ultralight is designed to work in as many platforms and environments as possible. To achieve this, we've factored out most platform-specific code into a set of interfaces that you can implement and set on the Platform singleton.
We provide a number of default implementations for desktop platforms (eg, Windows, macOS, Linux) for you when you call ulCreateApp(). These implementations are defined in the AppCore repository, we recommend using their source code as a starting point for your own implementations.
When using ulCreateRenderer() directly, you'll need to provide your own implementations for ULFileSystem and ULFontLoader at a minimum.
ulCreateRenderer() | ulCreateApp() | |
---|---|---|
ULFileSystem | Required | Provided |
ULFontLoader | Required | Provided |
ULClipboard | Optional | Provided |
ULGPUDriver | Optional | Provided |
ULLogger | Optional | Provided |
ULSurfaceDefinition | Provided | Provided |
Functions | |
ULExport void | ulPlatformSetLogger (ULLogger logger) |
Set a custom Logger implementation. | |
ULExport void | ulPlatformSetFileSystem (ULFileSystem file_system) |
Set a custom FileSystem implementation. | |
ULExport void | ulPlatformSetFontLoader (ULFontLoader font_loader) |
Set a custom FontLoader implementation. | |
ULExport void | ulPlatformSetSurfaceDefinition (ULSurfaceDefinition surface_definition) |
Set a custom Surface implementation. | |
ULExport void | ulPlatformSetGPUDriver (ULGPUDriver gpu_driver) |
Set a custom GPUDriver implementation. | |
ULExport void | ulPlatformSetClipboard (ULClipboard clipboard) |
Set a custom Clipboard implementation. | |
ULExport void ulPlatformSetClipboard | ( | ULClipboard | clipboard | ) |
Set a custom Clipboard implementation.
This should be used if you are using ulCreateRenderer() (which does not provide its own clipboard implementation).
The Clipboard interface is used by the library to make calls to the system's native clipboard (eg, cut, copy, paste).
You should call this before ulCreateRenderer().
ULExport void ulPlatformSetFileSystem | ( | ULFileSystem | file_system | ) |
Set a custom FileSystem implementation.
The library uses this to load all file URLs (eg, file:///page.html).
You can provide the library with your own FileSystem implementation so that file assets are loaded from your own pipeline.
You should call this before ulCreateRenderer() or ulCreateApp().
ULExport void ulPlatformSetFontLoader | ( | ULFontLoader | font_loader | ) |
Set a custom FontLoader implementation.
The library uses this to load all system fonts.
Every operating system has its own library of installed system fonts. The FontLoader interface is used to lookup these fonts and fetch the actual font data (raw TTF/OTF file data) for a given given font description.
You should call this before ulCreateRenderer() or ulCreateApp().
ULExport void ulPlatformSetGPUDriver | ( | ULGPUDriver | gpu_driver | ) |
Set a custom GPUDriver implementation.
This should be used if you have enabled the GPU renderer in the Config and are using ulCreateRenderer() (which does not provide its own GPUDriver implementation).
The GPUDriver interface is used by the library to dispatch GPU calls to your native GPU context (eg, D3D11, Metal, OpenGL, Vulkan, etc.) There are reference implementations for this interface in the AppCore repo.
You should call this before ulCreateRenderer().
Set a custom Logger implementation.
This is used to log debug messages to the console or to a log file.
You should call this before ulCreateRenderer() or ulCreateApp().
ULExport void ulPlatformSetSurfaceDefinition | ( | ULSurfaceDefinition | surface_definition | ) |
Set a custom Surface implementation.
This can be used to wrap a platform-specific GPU texture, Windows DIB, macOS CGImage, or any other pixel buffer target for display on screen.
By default, the library uses a bitmap surface for all surfaces but you can override this by providing your own surface definition here.
You should call this before ulCreateRenderer() or ulCreateApp().