Ultralight C++ API 1.4.0
|
#include <Ultralight/platform/Surface.h>
User-defined pixel buffer surface.
The library uses this to store pixel data when rendering Views on the CPU (see ViewConfig::is_accelerated).
You can provide the library with your own Surface implementation to reduce the latency of displaying pixels in your application (Views will be drawn directly to a block of memory controlled by you).
When a View is rendered on the CPU, you can retrieve the backing Surface via View::surface().
A default Surface implementation, BitmapSurface, is automatically provided by the library when you call Renderer::Create() without defining a custom SurfaceFactory.
You should cast the Surface to a BitmapSurface to access the underlying Bitmap.
To define your own implementation, you should inherit from this class, handle the virtual member functions, and then define a custom SurfaceFactory that creates/destroys an instance of your class.
After that, you should pass an instance of your custom SurfaceFactory class to Platform::set_surface_factory() before calling Renderer::Create().
Public Member Functions | |
virtual | ~Surface () |
virtual uint32_t | width () const =0 |
Width (in pixels). | |
virtual uint32_t | height () const =0 |
Height (in pixels). | |
virtual uint32_t | row_bytes () const =0 |
Number of bytes between rows (usually width * 4) | |
virtual size_t | size () const =0 |
Size in bytes. | |
virtual void * | LockPixels ()=0 |
Lock the pixel buffer and get a pointer to the beginning of the data for reading/writing. | |
virtual void | UnlockPixels ()=0 |
Unlock the pixel buffer. | |
virtual void | Resize (uint32_t width, uint32_t height)=0 |
Resize the pixel buffer to a certain width and height (both in pixels). | |
virtual void | set_dirty_bounds (const IntRect &bounds) |
Set the dirty bounds to a certain value. | |
virtual IntRect | dirty_bounds () const |
Get the dirty bounds. | |
virtual void | ClearDirtyBounds () |
Clear the dirty bounds. | |
Protected Member Functions | |
Surface () | |
Protected Attributes | |
IntRect | dirty_bounds_ |
|
virtual |
|
protected |
|
virtual |
Clear the dirty bounds.
You should call this after you're done displaying the Surface.
|
virtual |
Get the dirty bounds.
This value can be used to determine which portion of the pixel buffer has been updated since the last call to ClearDirtyBounds().
The general algorithm to determine if a Surface needs display is:
if (!surface.dirty_bounds().IsEmpty()) { // Surface pixels are dirty and needs display. // Cast Surface to native Surface and use it here (pseudo code) DisplaySurface(surface); // Once you're done, clear the dirty bounds: surface.ClearDirtyBounds(); }
|
pure virtual |
Height (in pixels).
Implemented in BitmapSurface.
|
pure virtual |
Lock the pixel buffer and get a pointer to the beginning of the data for reading/writing.
Implemented in BitmapSurface.
|
pure virtual |
Resize the pixel buffer to a certain width and height (both in pixels).
This should never be called while pixels are locked.
Implemented in BitmapSurface.
|
pure virtual |
Number of bytes between rows (usually width * 4)
Implemented in BitmapSurface.
|
virtual |
Set the dirty bounds to a certain value.
This is called after the Renderer paints to an area of the pixel buffer. (The new value will be joined with the existing dirty_bounds())
|
pure virtual |
Size in bytes.
Implemented in BitmapSurface.
|
pure virtual |
Unlock the pixel buffer.
Implemented in BitmapSurface.
|
pure virtual |
Width (in pixels).
Implemented in BitmapSurface.
|
protected |