仮想スクリーンサポート
仮想スクリーンはディスプレイの物理的サイズよりも大きな表示領域のことです。追加のビデオメモリが必要になりますが、低速なCPUでの画面の切替を高速にすることができます。仮想スクリーンが設定されている時、実際の表示領域の切り替えは参照原点を変更することでできます。
仮想スクリーンではページの切替時にパンニングを利用することができます。
パンニング
アプリケーションがディスプレイサイズよりも大きな表示領域を使用している場合、仮想スクリーンAPIによって原点を変更することで目的の領域を画面に表示することができます。
仮想ページ
アプリケーションが複数のページを使用する場合、あらかじめ複数のページを仮想スクリーン上に読み込んでおくことで低速CPUでも高速な画面切り替えを可能します。たとえばアプリケーションが3ページ使用する場合、まだ表示しない2ページ目、3ページ目についてもあらかじめ仮想スクリーン上に読み込んでしまいます。下層ページを利用する場合、仮想スクリーンのサイズは高さはページ数分だけ大きくなります。
使用要件
仮想スクリーンでは通常のシングルスクリーンと比較して大きなビデオメモリが必要となります。
ビデオメモリサイズ
ディスプレイコントローラは仮想スクリーンに必要なビデオメモリサイズに対応している必要があります。例えば、解像度が320×240の画面で色深度が16ビット・2ページ分の仮想スクリーンの場合、必要なビデオメモリサイズは次のように計算できます。
- メモリサイズ= LCD_XSIZE × LCD_YSIZE × LCD_BITSPERPIXEL / 8 × NUM_SCREENS
- メモリサイズ= 320 × 240 × 16 / 8 × 2
- メモリサイズ= 307200バイト
表示開始位置
ディスプレイコントローラは、表示開始位置を自由に設定できる必要があります。すなわちディスプレイドライバも表示開始位置について保持するレジスタを持っていなければなりません。
初期化設定
仮想スクリーンは初期化設定をする必要があります。LCD_SetVSizeEx()で仮想スクリーンのサイズを設定し、LCD_X_SETORGで表示開始位置(原点)を設定します。
LCD_SetVSizeEx()
仮想スクリーンのサイズを設定する関数
- 変数の設定
int LCD_SetVSizeEx(int LayerIndex, int xSize, int ySize);
- 戻り値
成功時に0、エラー時に1
サンプル
次のサンプルは128x192の仮想スクリーンと128 × 64のディスプレイでどのように3ページを高速で切り替えるのか示します。
初期設定
#difine LCD_XSIZE 128
#difine LCD_YSIZE 64
#difjne LCD_VYSIZE 192
アプリケーション
GUI_SetColor(GUI_RED);
GUI_FillRect(0、0、127、63);
GUI_SetColor(GUI_GREEN);
GUI_FillRect(0、64、127、127);
GUI_SetColor(GUI_BLUE);
GUI_FillRect(0、127、127、191);
GUI_SetColor (GUI_WHITE);
GUI_SetTextMode(GUI_TM_TRANS);
GUI_DispStringAt("スクリーン0"、0、0);
GUI_DispStringAt("画面1"、0、64);
GUI_DispStringAt("画面2"、0、128);
GUI_SetOrg(0、64 ); / * スクリーン1の原点を設定* /
GUI_SetOrg(0、128); / *スクリーン2の原点を設定* /
出力
解説 | 画面出力 | 仮想スクリーン |
GUI_SetOrg(0, 240)実行前 | ||
GUI_SetOrg(0, 240)実行後 | ||
GUI_SetOrg(0, 480)実行後 |
ウィンドウマネージャのサンプル
emWinにはウィンドウマネージャーを使用した仮想スクリーンのサンプルをSampleGUIBASIC_VirtualScreens.cにあらかじめ用意してあります。
スクリーン0
スクリーン1
スタート画面は2つの温度変化をモニターするグラフ(スクリーン0)を表示しています。SetColorボタンを押すと画面は瞬時にスクリーン1に切り替わります。たとえ低速なCPUでも高速切替が可能です。
上記のサンプルのビューアでのスクリーンショット
ビューアを使用している場合、両方の画面を同時に表示することができます。上記スクリーンショットでは、左側に実際に表示さている画面を、右側に仮想スクリーン全体を表示しています。
ダイアログのサンプル
メイン画面/ スクリーン0
メイン画面/スクリーン1
キャリブレーション画面/ スクリーン2
説明画面/ スクリーン2
はじめにメイン画面としてスクリーン0がディスプレイに表示されます。"セットアップ"ボタンを押すと、"セットアップ"画面がスクリーン1に作成され画面を切り替えます。キャリブレーションと説明画面の両方はスクリーン2を使用して表示されます。
ビューアを使用している場合、両方の画面を同時に表示することができます。上記スクリーンショットでは、左側に実際に表示さている画面を、右側に仮想スクリーン全体を表示しています。