C

平台上下文结构体

struct Qul::Platform::PlatformContext

此类提供了一个实现平台上下文的抽象接口。 更多...

头文件 #include <platform/platform.h>
Qt Quick Ultralite (平台) 2.0

公共函数

virtual PlatformInterface::RectadjustedPartialUpdateRect(const PlatformInterface::LayerEngine::ItemLayer *layer, const PlatformInterface::Rect &rect) const
virtual PlatformInterface::Screen *availableScreens(size_t *screenCount) const
virtual PlatformInterface::DrawingDevice *beginFrame(const PlatformInterface::LayerEngine::ItemLayer *layer, const PlatformInterface::Rect &rect, int refreshInterval = 1)
virtual Qul::Platform::Configconfig() const
virtual voidconsoleWrite(char character)
virtual uint64_tcurrentTimestamp() = 0
virtual voidendFrame(const PlatformInterface::LayerEngine::ItemLayer *layer)
virtual voidexec()
virtual voidflushCachesForAsyncRead(const void *address, size_t length)
virtual Qul::Platform::FrameBufferingTypeframeBufferingType(const PlatformInterface::LayerEngine::ItemLayer *layer) const
virtual voidinitializeDisplay(const PlatformInterface::Screen *screen)
virtual voidinitializeHardware()
virtual voidinitializePlatform() = 0
virtual PlatformInterface::LayerEngine *layerEngine()
virtual PlatformInterface::MemoryAllocator *memoryAllocator(PlatformInterface::MemoryAllocator::AllocationType type)
virtual size_tpartialBufferPixelCount(const PlatformInterface::LayerEngine::ItemLayer *layer) const
virtual Platform::PerformanceMetrics *performanceMetrics()
virtual Qul::Platform::FrameStatisticspresentFrame(const PlatformInterface::Screen *screen, const PlatformInterface::Rect &rect)
virtual doublerand() = 0
virtual voidscheduleEngineUpdate(uint64_t timestamp) = 0
virtual uint64_tupdate() = 0
virtual voidwaitUntilAsyncReadFinished(const void *begin, const void *end)

详细描述

此类的这些方法是为硬件初始化、执行循环和平台级别的图形实现提供的平台API。当移植到新平台时,必须实现由此类派生的类,并重写虚拟方法以获取特定于平台的实现。Qt Quick Ultralite 核心使用此类的一个实例与硬件进行通信。更多信息请参阅Qt Quick Ultralite 平台移植指南

成员函数说明

[virtual] PlatformInterface::Rect PlatformContext::adjustedPartialUpdateRect(const PlatformInterface::LayerEngine::ItemLayer *layer, const PlatformInterface::Rect &rect) const

返回特定在部分缓冲时使用的平台特异性调整后的矩形。

Qt Quick Ultralite 核心库使用这些信息来调整部分缓冲时脏区域的大小。

调整后的矩形将稍后传递到beginFrame()以绘制对应部分更新的区域。

某些平台可能对更新矩形有特定的对齐要求或最小大小。

注意:默认实现返回rect

另请参阅:Qul::Platform::PlatformContext::beginFrame()和PartialBuffering

[virtual] PlatformInterface::Screen *PlatformContext::availableScreens(size_t *screenCount) const

返回可用屏幕的数组。如果没有可用屏幕,则函数返回nullptr。数组中项的数量通过输出指针screenCount返回。

返回的屏幕对象提供了有关屏幕尺寸以及用于向特定显示绘制和展示缓冲区所使用的交换链的信息。返回数组中的第一个元素被视为默认的、主屏幕。

注意:为返回值分配的内存归平台所有。没有所有权转移。默认实现返回nullptr

[virtual] PlatformInterface::DrawingDevice *PlatformContext::beginFrame(const PlatformInterface::LayerEngine::ItemLayer *layer, const PlatformInterface::Rect &rect, int refreshInterval = 1)

开始Qt Quick Ultralite帧渲染。

标志着给定的Qt Quick Ultralite帧渲染的开始,并返回一个DrawingDevice。rect值指定了将要绘制的脏区域。refreshInterval值指定了新帧展示的时间,相对于上一个帧展示的时间。刷新间隔为-1表示新帧应该立即展示。

注意:默认实现不执行任何操作。

另请参阅:endFrame(),presentFrame(),Qul::PlatformInterface::DrawingDeviceQul::PlatformInterface::Rect

[virtual] Qul::Platform::Config PlatformContext::config() const

提供Qul::Platform::Config的实例。

其主要目的是为Qt Quick Ultralite核心库提供平台配置。

注意:默认实现通过platform/common/platform.cpp提供,必须与自定义平台实现链接。

[虚函数]void PlatformContext::consoleWrite(char character)

将一个字符写入控制台。

由Qt Quick Ultralite核心库用于打印日志数据。

注意:默认实现不执行任何操作。

另见Qul::PlatformInterface::log() 和 qul_printf

[纯虚函数]uint64_t PlatformContext::currentTimestamp()

返回当前的系统时间,单位为毫秒。

[虚函数]void PlatformContext::endFrame(const PlatformInterface::LayerEngine::ItemLayer *layer)

结束Qt Quick Ultralite帧渲染。

标记给定的Qt Quick Ultralite帧渲染结束。

注意:默认实现不执行任何操作。

另见beginFrame() 和 presentFrame

[虚函数]void PlatformContext::exec()

运行平台提供的主exec循环。

exec循环将无限运行,或者至少会在应用程序运行期间运行,并在适当的时间调用Qul::PlatformInterface::updateEngine。如果没有更新需要执行,如果可能的话,应让出或者进入休眠状态。

以下是一个显示exec()函数可能外观的例子

void ExamplePlatform::scheduleEngineUpdate(uint64_t timestamp)
{
    nextUpdate = timestamp;
}
...
void ExamplePlatform::exec()
{
    while (true) {
        logFlush(); // Flush partially filled log buffer
        const uint64_t timestamp = this->update();

        if (timestamp > Platform::getPlatformInstance()->currentTimestamp()) {
            // The device may yield or go into sleep mode
        }
    }
}

注意:如果您不打算使用任何演示、实例、测试或调用Application::exec()或app_common框架,可以留空函数体。

另见Qul::PlatformInterface::updateEngine

[虚函数]void PlatformContext::flushCachesForAsyncRead(const void *address, size_t length)

在异步读取之前,调用此函数以同步指定的内存区域。

对于使用DMA2D(STM)或PXP(NXP)进行的异步传输,如位块传输和混合,可能有必要使一些缓存失效(如ARM架构CPU上的D-Cache),以确保在传输开始之前内存的任何更改都已全部提交。

使用此函数表示由地址长度指定的内存范围可能已更改,并且需要刷新缓存以确保异步传输读取正确且最新的数据。

注意:默认实现不执行任何操作。

[虚函数]Qul::Platform::FrameBufferingType PlatformContext::frameBufferingType(const PlatformInterface::LayerEngine::ItemLayer *layer) const

返回层的缓冲区类型。

返回给定的FrameBufferingType。

注意:默认实现返回FrameBufferingType::SingleBuffering。

另见FrameBufferingType

[虚函数]void PlatformContext::initializeDisplay(const PlatformInterface::Screen *screen)

初始化平台显示。

使用“screen”参数提供的屏幕几何图形初始化平台显示。在initializeHardware之后某个时间被调用。

注意:默认实现不执行任何操作。

[虚函数] void PlatformContext::initializeHardware()

初始化Qt Quick Ultralite所需的硬件。

这可能包括时钟、引脚、外设、总线和内存。

开发人员也可能选择不实现它,并执行自己的硬件初始化。

注意: 在静态库配置中,如果使用qul_run()调用时将initializeHardware设置为false,则不会调用此函数。

Qul::initHardware()调用。

[纯虚函数] void PlatformContext::initializePlatform()

初始化Qt Quick Ultralite平台特定组件。

这可能包括资源预加载和在Qt Quick Ultralite核心中初始化基于CPU的回退绘图引擎。

Qul::initPlatform()调用。

[虚函数] PlatformInterface::LayerEngine *PlatformContext::layerEngine()

返回平台的层引擎。

返回负责分配、更新和释放硬件层的层引擎。如果不支持多个层,则可以返回nullptr。

注意: 默认实现返回nullptr

[虚函数] PlatformInterface::MemoryAllocator *PlatformContext::memoryAllocator(PlatformInterface::MemoryAllocator::AllocationType type)

提供内存分配器

返回一个指向Qul::PlatformInterface::MemoryAllocator的指针,用于处理给定type的内存分配。

注意: 返回的指针由平台拥有,不应释放。默认实现返回指向Qul::PlatformInterface::MemoryAllocator静态实例的指针。

另请参阅 Qul::PlatformInterface::MemoryAllocator

[虚函数] size_t PlatformContext::partialBufferPixelCount(const PlatformInterface::LayerEngine::ItemLayer *layer) const

返回单个部分帧缓冲区中给定layer的像素数。

Qt Quick Ultralite平台库使用这些信息来限制在部分缓冲时beginFrame中rect的大小。

最小像素数是层的宽度。更大的像素数将减少渲染开销。

注意: 默认实现返回0。

另请参阅:Qul::Platform::PlatformContext::beginFrame()和PartialBuffering

[虚函数,自Qt Quick Ultralite (Platform) 2.6以来] Platform::PerformanceMetrics *PlatformContext::performanceMetrics()

提供Qul::Platform::PerformanceMetrics的一个实例

其主要目的是为Qt Quick Ultralite核心库提供访问平台性能测量数据。此数据通过QulPerf QML类型暴露给用户应用程序。

此功能是在Qt Quick Ultralite (Platform) 2.6中引入的。

[虚拟]Qul::Platform::FrameStatistics PlatformContext::presentFrame(const PlatformInterface::Screen *screen, const PlatformInterface::Rect &rect)

向屏幕展示层和帧更新并返回统计信息。

Qt Quick Ultralite 核心在通过 Qul::Platform::PlatformContext::layerEngine 对所有层进行更新后,以及使用 beginFrameendFrame 渲染所有帧更新内容后,调用 presentFrame

rect 参数指定了与上一帧相比已经发生变化的屏幕区域的边界矩形,前提是层的位置没有变化。

支持该特性的平台应根据 Qul::PlatformInterface::Screen::backgroundColor() 更新背景颜色。

注意:如果层的位置或透明度等属性发生变化,或者屏幕的背景颜色发生变化,可能在没有先调用 beginFrameendFrame 的情况下调用 presentFrame。默认实现不执行任何操作。

另请参阅:beginFrame(),endFrame(),Qul::Platform::FrameStatisticsQul::PlatformInterface::Rect,和 Qul::PlatformInterface::Screen

[纯虚函数]double PlatformContext::rand()

返回范围 [0, 1) 内的均匀随机值。

该函数返回范围 [0, 1) 内的随机值,这意味着 1不应该包含在内。如果可用,可能使用硬件随机数生成器。否则,可以使用 C++11 std::minstd_rand 或自定义软件 RNG。

[纯虚函数]void PlatformContext::scheduleEngineUpdate(uint64_t timestamp)

请求平台实现将 Qt Quick Ultralite 引擎更新调度到 timestamp

此函数应在执行 updateEngine() 时从 Qt Quick Ultralite 引擎中调用。它请求平台实现将 Qt Quick Ultralite 引擎的更新调度到给定的时间戳。时间戳基于 Qt Quick Ultralite 引擎计时器和运行动画进行计算。

小于当前时间戳或甚至为 0 的时间戳应导致尽快调用 updateEngine。大于当前时间戳的时间戳意味着平台实现应在给定的时间调用 updateEngine。在此调度时间之前,设备可能会进入睡眠模式。Qul::PlatformInterface::updateEngine 在需要之前不应调用。

有关用法示例,请参阅 exec() 或 updateEngine() 文档。

注意:此函数的实现可能从中断中调用,并且必须在中断上下文中安全运行。

另请参阅:Qul::PlatformInterface::updateEngine() 和 Qul::Platform::PlatformContext::exec

[纯虚函数]uint64_t PlatformContext::update()

执行单个更新,用于 Qt Quick Ultralite 核心引擎。

此函数执行所有操作以一次性更新Qt Quick Ultralite核心引擎。如果时间到了,它会调用Qul::PlatformInterface::updateEngine

以下是一个示例,说明update()函数可能的样子

uint64_t ExamplePlatform::update()
{
    const uint64_t timestamp = this->currentTimestamp();

    if (timestamp >= nextUpdate) {
        // Handle deadline or pending events
        Qul::PlatformInterface::updateEngine(timestamp);
    }

    return nextUpdate;
}

另请参阅Qul::PlatformInterface::updateEngineQul::Platform::PlatformContext::exec

[virtual] void PlatformContext::waitUntilAsyncReadFinished(const void *begin, const void *end)

在给定的内存范围内没有任何异步传输正在读取时停止。

一些平台支持异步传输,如DMA2D(STM)或PXP(NXP),这些用于绘图和混合。如果CPU写入某些异步混合操作正在读取的内存,则可能会导致不希望的图形故障。

使用此函数等待所有由beginend指定的内存区域的所有异步读取完成。该范围是[begin, end),这意味着end不包含在内,但用于表示范围的结束。

注意:默认实现不执行任何操作。

在特定Qt许可证下可用。
了解更多信息。