/// /// @file Renderer.h /// /// @brief The header for the Renderer class. /// /// @author /// /// This file is a part of Ultralight, a fast, lightweight, HTML UI engine /// /// Website: /// /// Copyright (C) 2019 Ultralight, Inc. All rights reserved. /// #pragma once #include #include #include namespace ultralight { /// /// @brief The core of Ultralight. You should initialize it after setting up /// your Platform config and drivers. /// /// This singleton class manages the lifetime of all Views (@see View) and /// coordinates all painting, rendering, network requests, and event dispatch. /// /// @note You don't have to create this instance directly if you use the /// AppCore API. The App class will automatically create a Renderer and /// perform all rendering within its run loop. @see App::Create /// class UExport Renderer : public RefCounted { public: /// /// Create the Renderer singleton. You should set up all your Platform config, /// file-system, and drivers before calling this function. @see Platform /// /// @note You should only create one Renderer per application lifetime. /// /// @return Returns a ref-pointer to a new Renderer instance. You should /// assign it to either a Ref (non-nullable) or /// RefPtr (nullable). /// static Ref Create(); /// /// Create a new View. /// /// @param width The initial width, in device coordinates. /// /// @param height The initial height, in device coordinates. /// /// @param transparent Whether or not the view background is transparent. /// /// @return Returns a ref-pointer to a new View instance. You should assign /// it to either a Ref (non-nullable) or RefPtr /// (nullable). /// /// @note The device coordinates are scaled to pixels by multiplying them /// with the current DPI scale (@see Config::device_scale_hint) and /// rounding to the nearest integer value. /// virtual Ref CreateView(uint32_t width, uint32_t height, bool transparent) = 0; /// /// Update timers and dispatch internal callbacks. You should call this often /// from your main application loop. /// virtual void Update() = 0; /// /// Render all active views to display lists and dispatch calls to GPUDriver. /// /// @note If you're using the default, offscreen GL driver, this updates the /// internal bitmap of each View (@see View::bitmap). /// virtual void Render() = 0; /// /// Attempt to release as much memory as possible. Don't call this from any /// callbacks or driver code. /// virtual void PurgeMemory() = 0; protected: virtual ~Renderer(); }; } // namespace ultralight