このページでは

C

Qul::Platform::PlatformContext Struct

struct Qul::Platform::PlatformContext

このクラスは、プラットフォームコンテキストを実装するための抽象インターフェースを提供します。詳細...

Header: #include <platform/platform.h>
Since: Qt Quick Ultralite (Platform) 2.0

パブリック関数

virtual Qul::PlatformInterface::Rect adjustedPartialUpdateRect(const Qul::PlatformInterface::LayerEngine::ItemLayer *layer, const Qul::PlatformInterface::Rect &rect) const
virtual Qul::PlatformInterface::Screen *availableScreens(size_t *screenCount) const
virtual Qul::PlatformInterface::DrawingDevice *beginFrame(const Qul::PlatformInterface::LayerEngine::ItemLayer *layer, const Qul::PlatformInterface::Rect &rect, int refreshInterval = 1)
virtual Qul::Platform::Config config() const
virtual void consoleWrite(char character)
virtual uint64_t currentTimestamp() = 0
virtual void endFrame(const Qul::PlatformInterface::LayerEngine::ItemLayer *layer)
virtual void exec()
virtual void flushCachesForAsyncRead(const void *address, size_t length)
virtual Qul::Platform::FrameBufferingType frameBufferingType(const Qul::PlatformInterface::LayerEngine::ItemLayer *layer) const
virtual void initializeDisplay(const Qul::PlatformInterface::Screen *screen)
virtual void initializeHardware()
virtual void initializePlatform() = 0
virtual Qul::PlatformInterface::LayerEngine *layerEngine()
virtual Qul::PlatformInterface::MemoryAllocator *memoryAllocator(Qul::PlatformInterface::MemoryAllocator::AllocationType type)
virtual size_t partialBufferPixelCount(const Qul::PlatformInterface::LayerEngine::ItemLayer *layer) const
(since Qt Quick Ultralite (Platform) 2.6) virtual Qul::Platform::PerformanceMetrics *performanceMetrics()
virtual Qul::Platform::FrameStatistics presentFrame(const Qul::PlatformInterface::Screen *screen, const Qul::PlatformInterface::Rect &rect)
virtual double rand() = 0
virtual void scheduleEngineUpdate(uint64_t timestamp) = 0
virtual uint64_t update() = 0
virtual void waitUntilAsyncReadFinished(const void *begin, const void *end)

詳細説明

このクラスのメソッドは、ハードウェアの初期化、実行ループ、およびプラットフォームレベルのグラフィックス実装のためのプラットフォーム API です。新しいプラットフォームへ移植する際は、このクラスを継承したクラスを実装し、仮想メソッドをオーバーライドして、プラットフォーム固有の実装を行う必要があります。Qt Quick Ultralite コアは、このクラスのインスタンスを使用してハードウェアと通信します。 詳細については、Qt Quick Ultralite Platform Porting Guide』を参照してください。

メンバ関数のドキュメント

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

部分バッファリングが使用されている場合、指定されたlayer に対して、プラットフォームごとに調整された矩形を返します。

Qt Quick Ultralite コアライブラリは、この情報を使用して、部分バッファリングが使用される際の変更領域のサイズを調整します。

調整された矩形は、後で `beginFrame()` に渡され、部分更新に対応する領域が描画されます。

プラットフォームによっては、更新矩形に対して特定の配置要件や最小サイズが定められている場合があります。

注:デフォルト の実装では、rect を返します。

Qul::Platform::PlatformContext::beginFrame() およびPartialBufferingも参照してください

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

利用可能なスクリーンの配列を返します。利用可能なスクリーンがない場合、関数はnullptr を返します。配列内の項目数は、screenCount 出力ポインタに格納されます。

返されるスクリーンオブジェクトは、スクリーンの寸法に関する情報に加え、特定のディスプレイへの描画に使用されるスワップチェーンや、表示用バッファに関する情報を提供します。返される配列の最初の要素は、デフォルトのプライマリスクリーンとして扱われます。

注: 戻り値用に割り当てられたメモリの所有権は プラットフォームが保持します。所有権の移転は行われません。デフォルトの実装では、nullptr が返されます。

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

Qt Quick のUltraliteフレームのレンダリングを開始します。

指定されたlayer に対するQt Quick Ultraliteフレームのレンダリングの開始をマークし、それに対応するDrawingDeviceを返します。rect の値は、描画対象となる変更領域を指定します。refreshInterval の値は、前回のフレームが表示された時点を基準として、新しいフレームをいつ表示するかを指定します。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 に含まれており、これをカスタムプラットフォームの実装とリンクする必要があります。

[virtual] void PlatformContext::consoleWrite(char character)

コンソールに「character 」を1つ出力します。

Qt Quick のUltraliteコアライブラリで、ログデータを出力するために使用されます。

注:デフォルト の実装では何も行われません。

Qul::PlatformInterface::log() およびqul_printf()も参照してください

[pure virtual] uint64_t PlatformContext::currentTimestamp()

現在経過したシステム時間をミリ秒単位で返します。

[virtual] void PlatformContext::endFrame(const Qul::PlatformInterface::LayerEngine::ItemLayer *layer)

Qt Quick のUltraliteフレームのレンダリングを終了します。

指定されたlayer に対するQt Quick のUltraliteフレームのレンダリングの終了をマークします。

注:デフォルト の実装では何も行われません。

beginFrame() およびpresentFrame()も参照してください

[virtual] void PlatformContext::exec()

プラットフォームが提供するメインの実行ループを実行します。

execループは、アプリケーションが実行されている限り、あるいは少なくともアプリケーションが実行されている間は永久に実行され続け、適切なタイミングでQul::PlatformInterface::updateEngine を呼び出す役割を担います。更新を行う必要がない場合は、可能であればyieldを実行するか、スリープ状態に入るべきです。

以下に、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()も参照してください

[virtual] void PlatformContext::flushCachesForAsyncRead(const void *address, size_t length)

この関数は、非同期読み取りを行う前に、指定されたメモリ領域を同期させるために呼び出されます。

DMA2D (STM) や PXP (NXP) を使用したブリティングやブレンディングなどの非同期転送では、転送開始前にメモリへの変更が確実に完全にコミットされるように、一部のキャッシュ(ARM ベースの CPU における D-Cache など)を無効にする必要がある場合があります。

この関数を使用すると、address およびlength で指定されたメモリ範囲が変更されている可能性があること、および非同期転送が正しい最新のデータを読み取ることを保証するためにキャッシュをフラッシュする必要があることを示すことができます。

注:デフォルト の実装では何も行われません。

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

レイヤーのバッファリングタイプを返します。

指定されたlayer に対して、FrameBufferingType を返します。

注:デフォルト の実装では、FrameBufferingType::SingleBuffering を返します。

FrameBufferingType」も参照してください

[virtual] void PlatformContext::initializeDisplay(const Qul::PlatformInterface::Screen *screen)

プラットフォームの表示を初期化します。

screen パラメータで指定された画面のジオメトリを使用して、プラットフォームの表示を初期化します。initializeHardware の呼び出しからしばらく経ってから呼び出されます。

注:デフォルト の実装では何も行われません。

[virtual] void PlatformContext::initializeHardware()

Qt Quick Ultraliteに必要なハードウェアを初期化します。

これには、クロック、ピン、周辺機器、バス、メモリなどが含まれる場合があります。

開発者は、これを実装せず、独自のハードウェア初期化を行うことも可能です。

注:静的ライブラリ構成の場合、 initializeHardwarefalse に設定された状態でqul_run() が呼び出されると、この関数は呼び出されません。

Qul::initHardware() によって呼び出されます。

[pure virtual] void PlatformContext::initializePlatform()

Qt Quick Ultralite プラットフォーム固有のコンポーネントを初期化します。

これには、リソースのプリロードや、Qt Quick Ultralite コアにおける CPU ベースのフォールバック描画エンジンの初期化などが含まれる場合があります。

Qul::initPlatform() によって呼び出されます。

[virtual] Qul::PlatformInterface::LayerEngine *PlatformContext::layerEngine()

そのプラットフォームのレイヤーエンジンを返します。

ハードウェアレイヤーの割り当て、更新、および解放を担当するレイヤエンジンを返します。プラットフォームが複数のレイヤーをサポートしていない場合、nullptr が返されることがあります。

注:デフォルト の実装では、nullptr が返されます。

[virtual] Qul::PlatformInterface::MemoryAllocator *PlatformContext::memoryAllocator(Qul::PlatformInterface::MemoryAllocator::AllocationType type)

メモリアロケータを提供します

指定されたtype のメモリ割り当てを処理するためのQul::PlatformInterface::MemoryAllocator ポインタを返します。

注: 返されるポインタプラットフォームが所有するものであり、解放してはなりません。デフォルトの実装では、Qul::PlatformInterface::MemoryAllocator の静的インスタンスへのポインタが返されます。

Qul::PlatformInterface::MemoryAllocator」も参照してください

[virtual] size_t PlatformContext::partialBufferPixelCount(const Qul::PlatformInterface::LayerEngine::ItemLayer *layer) const

指定されたlayer に対する、単一の部分フレームバッファのピクセル数を返します。

Qt Quick Ultraliteプラットフォームライブラリは、部分バッファリングが使用される場合、この情報を使用してbeginFrame 内のrectのサイズを制限します。

最小ピクセル数は、レイヤーの幅に相当します。ピクセル数を大きくすると、レンダリングのオーバーヘッドが軽減されます。

注:デフォルト の実装では 0 を返します。

Qul::Platform::PlatformContext::beginFrame() およびPartialBufferingも参照してください

[virtual, since Qt Quick Ultralite (Platform) 2.6] Qul::Platform::PerformanceMetrics *PlatformContext::performanceMetrics()

のインスタンスを提供します。Qul::Platform::PerformanceMetrics

その主な目的は、Qt Quick Ultralite コアライブラリ向けに、プラットフォームのパフォーマンス測定データへのアクセスを提供することです。このデータは、QulPerf というQMLタイプを介してユーザーアプリケーションに公開されます。

この関数は、Qt Quick Ultralite (Platform) 2.6で導入されました。

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

画面へのレイヤーおよびフレームの更新を行い、統計情報を返します。

Qt Quick Ultralite コアは、Qul::Platform::PlatformContext::layerEngine を使用してすべてのレイヤーの更新が完了し、beginFrame およびendFrame を使用して更新されたすべてのフレームコンテンツのレンダリングが完了した後、指定されたscreen に対してpresentFrame を呼び出します。

rect パラメータは、レイヤーの位置に変更がないことを前提として、前回のフレームと比較して変更された画面領域の境界矩形を指定します。

これをサポートするプラットフォームでは、Qul::PlatformInterface::Screen::backgroundColor() に基づいて背景色を更新する必要があります。

注: position や opacity などのレイヤーのプロパティが変更された場合、または画面の背景色が変更された場合、beginFrameendFrame が先に呼び出されなくてもpresentFrame が 呼び出されることがあります。デフォルトの実装では何も行われません。

関連項目: beginFrame()、endFrame()、Qul::Platform::FrameStatisticsQul::PlatformInterface::Rect 、およびQul::PlatformInterface::Screen

[pure virtual] double PlatformContext::rand()

範囲 [0, 1) 内の一様乱数を返します。

この関数は、範囲 [0, 1) 内の乱数を返します。つまり、1 は含まれません。利用可能な場合は、ハードウェア乱数生成器を使用する場合があります。そうでない場合は、C++11 の std::minstd_rand またはカスタムソフトウェア乱数生成器を使用できます。

[pure virtual] void PlatformContext::scheduleEngineUpdate(uint64_t timestamp)

プラットフォーム実装に対し、timestamp でのQt Quick Ultraliteエンジンの更新をスケジュールするよう要求します。

この関数は、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()も参照してください

[pure virtual] uint64_t PlatformContext::update()

Qt Quick Ultralite コアエンジンの更新を 1 回実行します。

この関数は、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::updateEngine 」および「Qul::Platform::PlatformContext::execも参照してください

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

指定されたメモリ範囲から非同期転送による読み取りが行われなくなるまでブロックします。

一部のプラットフォームでは、描画やブレンドに使用される DMA2D (STM) や PXP (NXP) などの非同期転送がサポートされています。CPU が、現在何らかの非同期ブレンド操作によって読み込まれているメモリ領域に書き込みを行うと、予期しないグラフィックの乱れが発生する可能性があります。

この関数を使用すると、begin およびend で指定されたメモリ領域からのすべての非同期読み取りが終了するまで待機できます。範囲は [begin,end) であり、end は含まれませんが、範囲の終了を示す役割を果たします。

注:デフォルト の実装では何も行われません。

特定の Qt ライセンスの下で利用可能です。
詳細はこちらをご覧ください。