メモリデバイス
メモリデバイスは、重なっているアイテムの描画操作を使用する際に主にちらつきから表示を防止するために、さまざまな状況で使用することができます。基本的な考え方は非常に簡単です。メモリデバイスを使用せずに、描画操作は、ディスプレイに直接書き込みます。描画操作が実行されるように画面が更新され、これはそれを様々な更新が行われるようにちらつきの外観を与えます。たとえば、前景の背景と、いくつかの透明なテキストにビットマップを描画したい場合は、まず、ビットマップ、テキストを描画する必要があります。効果は、テキストのちらつきとなります。
メモリデバイスはそのような手続きのために使用されている場合は、すべての描画操作がメモリ内で実行されています。最終結果は、すべての操作がないちらつきの利点で、行われているのみ画面に表示されます。この違いは、メモリデバイスを使用せずに両方の操作を描画の順序を示す次のセクション、の例で見ることができます。区別は次のように要約されることがあります:なしメモリデバイスが使用されていない場合、描画の効果操作は、ちらつきのディスプレイの欠点を、順を追って見ることができます。メモリデバイスで、すべてのルーチンの効果は、単一の操作として見えるように作られています。ない中間のステップは実際に見たことがないことができます。利点は、上述したように、ディスプレイのちらつきが完全に排除されていることであり、これはしばしば望ましい。メモリデバイスは、追加(オプション)ソフトウェアの項目であり、emWin基本パッケージに同梱されていません。メモリデバイス用のソフトウェアは、GUIのディレクトリのサブディレクトリMemdevに位置しています。
メモリデバイスを使用:図
次の表は、メモリデバイスがある場合とない場合の処理は、同じ操作のスクリーンショットを示しています。どちらの場合も目的は同じです:ワークが回転できるようになりますし、回転の各角度(ここで、10度)で標識。最初のケース(メモリデバイスなし)で画面が最初にクリアされ、その後、多角形は、新しい位置で再描画され、新しいラベルを持つ文字列が書き込まれます。後者の場合(メモリデバイスを含む)で同じ操作がメモリ内で実行されますが、画面はこの時間中には更新されません。唯一の更新は、ルーチンのGUI_MEMDEV_CopyToLCDが呼び出されたときに発生し、この更新は、一度にすべての操作を反映している。両方の手順の初期状態と最終的な出力が同じであることに注意してください。
APIの機能 | メモリデバイスなし | メモリデバイス含む |
ステップ0:初期状態 | ||
ステップ1:GUI_Clear | ||
ステップ2:GUI_DrawPolygon | ||
ステップ3:GUI_DispString | ||
ステップ4:GUI_MEMDEV_CopyToLCD(メモリデバイスを使用する場合のみ) |
基本的な機能
次のルーチンは、通常、メモリデバイスで使用されるものです。基本的な使い方はかなり簡単である:
- (GUI_MEMDEV_Createを使用して)メモリデバイスを作成します。
- (GUI_MEMDEV_Selectを使用して)それをアクティブにします。
- 描画操作を実行します。
- ディスプレイ(GUI_MEMDEV_CopyToLCDを使用)に結果をコピーします。
- (あなたがもはやそれを必要とする場合)メモリデバイスを削除します。
バンディングメモリデバイス
使用可能なメモリのサイズは、通常、全体の描画領域をカバーするのに十分ではありません。バンディングメモリデバイスは、バンドに描画領域を分割します。一つのバンドは、現在使用可能なメモリを持つできるだけ多くの行として扱います。C -コードと実行可能ファイルをダウンロードはここです。
自動デバイスオブジェクト
自動デバイスオブジェクトは、しばしばこのようなディスプレイの小さな部分だけを一度に更新される移動ポインタなどのアプリケーションに適しています。デバイスは自動的にディスプレイの部分が固定の項目で構成され、どの部分がアイテムを移動または変更することで構成されて区別します。自動デバイスオブジェクトの描画関数が初めて呼び出されるとき、それはすべての項目を描画します。移動または変更するオブジェクトによって使用される唯一の空間それぞれのさらなる呼び出しを更新。実際の描画操作は、しかし必要なエリア内でのみ、バンディングメモリデバイスを使用しています。自動生成されたデバイスオブジェクトを使用しての主な利点は、ディスプレイ全体を更新する保持しないので、それは、計算時間を節約できることにあります。C -コードを見てみましょうと実行可能ファイルをダウンロードここに。
メモリデバイスとウィンドウマネージャ
ウィンドウマネージャは、メモリデバイスとシームレスに動作します。すべてのウィンドウは、メモリデバイスは、レンダリングに使用する必要がある場合はウィンドウマネージャを知らせるためのフラグを持っています。いつでもウィンドウまたはセット/リセットを作成するときにこのフラグを指定することができます。メモリデバイスのフラグは特定のウィンドウに対して設定されている場合、ウィンドウを描画するときに、WMは自動的にメモリデバイスを使用しています。それは描画操作の後にウィンドウや削除を描画する前にメモリデバイスを作成します。
十分なメモリが使用可能な場合は、ウィンドウ全体がWMで作成されたメモリデバイスのサイズに収まる。十分なメモリが1つのメモリデバイスの完全なウィンドウに使用できる場合は、WMは、ウィンドウを描画するための"バンディング"を使用します。描画操作に使用されるメモリは、描画操作中に割り当てられます。ウィンドウの描画(再)利用可能な十分なメモリがない場合、ウィンドウは、メモリデバイスを使用せずに再描画されます。
パフォーマンス
メモリデバイスを使用すると、一般的には、パフォーマンスに著しい影響を与えることはほとんどありません。メモリデバイスが使用されている場合、ドライバーの作業は簡単です:それは単にディスプレイコントローラにビットマップを転送します。遅いドライバー(例:シリアルインターフェースを介して接続されて表示される)を持つシステムで、性能はメモリデバイスが使用されていることが望ましいのですが、速いドライバーを搭載したシステム上(例えばメモリマップディスプレイメモリとして、LCDLinドライバなど)メモリデバイスのコストの使用いくつかのパフォーマンス。"バンディング"が必要な場合は、ウィンドウを描画するために使用される時間は、バンドの数と共に増加する。メモリデバイスに使用可能なメモリ、パフォーマンスが向上します。
メモリデバイスAPI
以下の表は、emWinメモリデバイスのAPIの使用可能なルーチンを示します。すべての関数はそれぞれのカテゴリー内でアルファベット順に表示されます。
ルーチン | 説明 |
---|---|
GUI_MEMDEV_CopyToLCDAA() | アンチエイリアスメモリデバイスの内容をコピーします。 |
GUI_MEMDEV_CopyToLCDAt() | 与えられた位置でのLCDへのメモリデバイスのコピーが内容。 |
GUI_MEMDEV_Create() | メモリデバイス(最初のステップ)を作成します。 |
GUI_MEMDEV_CreateEx() | 追加の作成フラグとメモリデバイスを作成します。 |
GUI_MEMDEV_CreateFixed() | 特定の色の深さでメモリデバイスを作成します。 |
GUI_MEMDEV_Delete() | メモリデバイスが使用するメモリを解放します。 |
GUI_MEMDEV_DrawPerspectiveX() | 透視現在選択されているデバイスに歪んで指定されたメモリデバイスを描画します。 |
GUI_MEMDEV_GetDataPtr() | 直接操作するためのデータ領域へのポインタを返します。 |
GUI_MEMDEV_GetXSize() | メモリデバイスのXサイズ(幅)を返します。 |
GUI_MEMDEV_GetYSize() | メモリデバイスのY -サイズ(高さ)を返します。 |
GUI_MEMDEV_MarkDirty() | ピクセルを描画することが含まれているとして、特定の領域をマークします。 |
GUI_MEMDEV_ReduceYSize() | メモリデバイスのYサイズを減らします。 |
GUI_MEMDEV_Rotate() | 回転して、スケールのメモリデバイスをと"最近傍'メソッドを使用してメモリデバイスに結果を書き込みます。 |
GUI_MEMDEV_RotateHQ() | 回転して、スケールのメモリデバイスをと"高品質"の方法を使用してメモリデバイスに結果を書き込みます。 |
GUI_MEMDEV_Select() | 描画操作のターゲットとしてメモリデバイスを選択します。 |
GUI_MEMDEV_SetOrg() | LCD上のメモリデバイスの原点を変更します。 |
UI_MEMDEV_Write() | メモリデバイスにメモリデバイスの内容を書き込みます。 |
GUI_MEMDEV_WriteAlpha() | アルファブレンディングを使用してメモリデバイスにメモリデバイスの内容を書き込みます。 |
GUI_MEMDEV_WriteAlphaAt() | 指定された位置とアルファブレンディングを使用してメモリデバイスにメモリデバイスの内容を書き込みます。 |
GUI_MEMDEV_WriteAt() | 所定の位置にメモリデバイスにメモリデバイスの内容を書き込みます。 |
GUI_MEMEDV_WriteEx() | アルファブレンディングとスケーリングを使用してメモリデバイスにメモリデバイスの内容を書き込みます。 |
GUI_MEMDEV_WriteExAt() | アルファブレンディングとスケーリングを使用して、所定の位置にメモリデバイスにメモリデバイスの内容を書き込みます。 |
GUI_SelectLCD() | 描画操作のターゲットとしてLCDを選択します。 |
バンディングメモリデバイス | |
GUI_MEMDEV_Draw() | 描画用のメモリデバイスを使用 |
自動デバイスオブジェクト関数 | |
GUI_MEMDEV_CreateAuto | 自動デバイスオブジェクトを作成します。 |
GUI_MEMDEV_DeleteAuto | 削除します自動デバイスオブジェクト |
GUI_MEMDEV_DrawAuto | 描画のためにGUI_AUTODEVオブジェクトを使用しています |
測定装置のオブジェクト機能 | |
GUI_MEASDEV_ClearRect() | 測定の長方形をクリア |
GUI_MEASDEV_Create() | 測定装置を作成します。 |
GUI_MEASDEV_Delete() | 削除さ測定装置 |
GUI_MEASDEV_GetRect() | 測定結果を取得します。 |
GUI_MEASDEV_Select() | 測定装置は、描画操作のターゲットとして選択します。 |