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 のプラットフォーム固有の調整済み rect を返します。
Qt Quick Ultralite コアライブラリは、この情報を使用して、部分バッファリングが使用されているときのダーティ領域のサイズを調整します。
調整されたrectは、後で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::DrawingDevice 、およびQul::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ループを実行する。
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()も参照してください 。
[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が必要とするハードウェアを初期化する。
これにはクロック、ピン、ペリフェラル、バス、メモリが含まれる。
開発者はこの関数を実装せず、独自のハードウェア初期化を行うこともできます。
注記: スタティック・ライブラリ構成の場合、initializeHardware をfalse に設定して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 core は、Qul::Platform::PlatformContext::layerEngine を使用してすべてのレイヤーの更新が行われ、beginFrame とendFrame を使用してすべての更新されたフレームの内容がレンダリングされた後に、与えられたscreen に対してpresentFrame を呼び出します。
rect パラメータは、レイヤーの位置が変更されていないと仮定して、最後のフレームと比較して変更された画面の領域の外接矩形を指定します。
これをサポートするプラットフォームでは、Qul::PlatformInterface::Screen::backgroundColor ()に基づいて背景色を更新する必要があります。
注意: 位置や不透明度などのレイヤープロパティが変更された場合、または画面の背景色が変更された場合、beginFrame またはendFrame が最初に呼び出されることなく presentFrame が呼び出されることがあります。デフォルトの実装では何もしません。
beginFrame()、endFrame()、Qul::Platform::FrameStatistics 、Qul::PlatformInterface::Rect 、Qul::PlatformInterface::Screenも参照 。
[pure virtual] double PlatformContext::rand()
範囲 [0, 1) 内の一様な乱数値を返します。
この関数は[0, 1]の範囲の乱数値を返します。利用可能な場合はハードウェア乱数生成器を使用します。そうでない場合は、C++11のstd::minstd_randまたはカスタムソフトウェアRNGを使用できます。
[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 コア エンジンを更新するためのすべてのアクションを 1 回実行します。更新の期限が近づいたら、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 ライセンスの下で利用可能です。
詳細を確認してください。