JP2009265414A - 情報処理装置および制御方法 - Google Patents
情報処理装置および制御方法 Download PDFInfo
- Publication number
- JP2009265414A JP2009265414A JP2008115856A JP2008115856A JP2009265414A JP 2009265414 A JP2009265414 A JP 2009265414A JP 2008115856 A JP2008115856 A JP 2008115856A JP 2008115856 A JP2008115856 A JP 2008115856A JP 2009265414 A JP2009265414 A JP 2009265414A
- Authority
- JP
- Japan
- Prior art keywords
- register
- storage area
- contour
- glyph
- stored
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Controls And Circuits For Display Device (AREA)
Abstract
【課題】電力の供給を停止しても計算された最大値および最小値のデータを保持する技術を提供すること。
【解決手段】情報処理装置は、第1の記憶領域と、第2の記憶領域と、座標の最大値および最小値を含む複数のデータセットを記憶する第3の記憶領域とを有し、少なくとも第2の記憶領域および第3の記憶領域が不揮発性であるメモリと、制御装置と、電源制御回路と、フォント描画装置とを有し、制御装置は、メモリの第1の記憶領域に、複数の描画命令を書き込み、第1のレジスタに、複数の描画命令の先頭位置を示すアドレスを書き込み、第2のレジスタに、第3の記憶領域の先頭位置を示すアドレスを書き込み、制御装置は、メモリ、第1のレジスタおよび第2のレジスタに対して書き込みを行った後で、フォント描画装置を起動し、電源制御回路は、フォント描画装置が起動されると、制御装置およびメモリへの電力の供給を停止させる。
【選択図】図17
【解決手段】情報処理装置は、第1の記憶領域と、第2の記憶領域と、座標の最大値および最小値を含む複数のデータセットを記憶する第3の記憶領域とを有し、少なくとも第2の記憶領域および第3の記憶領域が不揮発性であるメモリと、制御装置と、電源制御回路と、フォント描画装置とを有し、制御装置は、メモリの第1の記憶領域に、複数の描画命令を書き込み、第1のレジスタに、複数の描画命令の先頭位置を示すアドレスを書き込み、第2のレジスタに、第3の記憶領域の先頭位置を示すアドレスを書き込み、制御装置は、メモリ、第1のレジスタおよび第2のレジスタに対して書き込みを行った後で、フォント描画装置を起動し、電源制御回路は、フォント描画装置が起動されると、制御装置およびメモリへの電力の供給を停止させる。
【選択図】図17
Description
本発明は、アウトラインフォントを描画する技術に関する。
グリフ(文字の可視化表現またはその構成部分から大きさ及び意匠を正規化した抽象表現)の形をコンピュータ上で表現するためのデータ形式として、アウトラインフォントが知られている。アウトラインフォントは、グリフの形状を、基準となる点の座標と輪郭線の集まりとして表現する形式である。グリフの輪郭線の描画および塗り潰しは、レンダリングメモリ上で、マトリクス状に配置された複数の画素を単にとして行われる。実際にグリフが描画される範囲、すなわち、グリフを包含する外接矩形により切り取られる領域は、このマトリクスのうち一部分であり、しかもその範囲はグリフ毎に異なっている。グリフが描画される範囲が分からないと、レンダリング用メモリからVRAM(Video Random Access Memory)にデータを転送する際、実際にグリフが描画されていない部分も含めてマトリクス全体を転送しなければならなくなり、不必要なメモリアクセスが生じる。ここで、特許文献1は、ストロークフォントにおいて、グリフ部分の範囲をあらかじめ記憶する技術を開示している。また特許文献2は、情報処理装置における電源管理に関する技術を開示している。
グリフ部分の範囲をグリフ毎に記憶する構成とすると、その範囲を特定する4点(水平方向および垂直方向の最大値および最小値)の座標を記憶する記憶領域が各グリフについて必要になる。さらに、グリフデータをビットマップデータに変化する際に、その4点についてもビットマップデータに変化する必要が生じる。すなわち、少なくとも4回の計算をしなければならない。さらに、複数のパーツグリフを組み合わせて表現される複合グリフを描画する際には、複合グリフについても独自に、グリフ部分の範囲を特定する4点の座標を記憶する必要がある。また特許文献2に記載されたように、動作しない要素に対する電力の供給を停止すると、計算された最大値および最小値のデータが消えてしまう場合がある。
これに対し本発明は、グリフ部分の範囲をあらかじめ記憶しなくても、グリフが描画される領域を特定する点の座標を計算する技術、特に、電力の供給を停止しても計算された最大値および最小値のデータを保持する技術を提供する。
本発明は、グリフの描画命令を記憶する第1の記憶領域と、2次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶する第2の記憶領域と、各々が前記2次元座標系における座標の最大値および最小値を含む複数のデータセットを記憶する第3の記憶領域とを有し、少なくとも前記第2の記憶領域および前記第3の記憶領域が不揮発性であるメモリと、前記メモリにアクセスするメモリアクセス手段と、前記第1の記憶領域のうち描画命令が記憶されているアドレスを記憶する第1のレジスタと、前記第3の記憶領域のうち次に最大値または最小値を記憶すべきアドレスを記憶する第2のレジスタと、前記複数の描画命令のうち前記第1のレジスタに記憶されているアドレスで指定される前記メモリ上の領域に記憶されている描画命令により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、前記2次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、1つのグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する第3のレジスタと、前記描画位置計算手段により計算された描画位置としての座標と前記第3のレジスタに記憶されている最大値および最小値とを比較し、比較結果により前記第3のレジスタに記憶された最大値または最小値を更新する最大最小更新手段と、前記第2の記憶領域のうち前記描画位置により特定される画素のデータを記憶する領域に、前記輪郭線が通る画素であることを示すデータを書き込む輪郭描画処理を行う輪郭描画手段と、1つのグリフについて前記輪郭描画処理が完了すると、前記第2のレジスタに記憶されているアドレスで指定される記憶領域に、前記第3のレジスタに記憶されている最大値または最小値を、前記メモリアクセス手段を介して書き込む書き込み処理を行う最大最小書き込み手段と、前記書き込み処理が終了すると、前記第2のレジスタに記憶されているアドレスを更新する更新手段とを有するフォント描画装置と、前記フォント描画装置を制御する制御装置と、前記フォント描画装置に電力を供給する電源制御回路と、を有し、前記制御装置は、前記メモリの前記第1の記憶領域に、前記複数の描画命令を書き込み、前記第1のレジスタに、前記複数の描画命令の先頭位置を示すアドレスを書き込み、前記第2のレジスタに、前記第3の記憶領域の先頭位置を示すアドレスを書き込み、前記制御装置は、前記メモリ、前記第1のレジスタおよび前記第2のレジスタに対して書き込みを行った後で、前記フォント描画装置を起動し、前記電源制御回路は、前記フォント描画装置が起動されると、前記制御装置および前記メモリへの電力の供給を停止させることを特徴とする情報処理装置を提供する。
この情報処理装置によれば、メモリへの電力の供給が停止されても、メモリには座標の最大値および最小値が記憶されている。
この情報処理装置によれば、メモリへの電力の供給が停止されても、メモリには座標の最大値および最小値が記憶されている。
好ましい態様において、前記フォント描画装置は、前記第1の記憶領域に記憶された命令の実行が終了すると、前記フォント描画装置への電力の供給を停止させる信号を前記電源制御回路に出力してもよい。
この情報処理装置によれば、命令の実行が終了すると、フォント描画装置への電力の供給が停止される。
この情報処理装置によれば、命令の実行が終了すると、フォント描画装置への電力の供給が停止される。
また、本発明は、グリフの描画命令を記憶する第1の記憶領域と、2次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶する第2の記憶領域と、各々が前記2次元座標系における座標の最大値および最小値を含む複数のデータセットを記憶する第3の記憶領域とを有し、少なくとも前記第2の記憶領域および前記第3の記憶領域が不揮発性であるメモリと、前記メモリにアクセスするメモリアクセス手段と、前記第1の記憶領域のうち描画命令が記憶されているアドレスを記憶する第1のレジスタと、前記第3の記憶領域のうち次に最大値または最小値を記憶すべきアドレスを記憶する第2のレジスタと、前記複数の描画命令のうち前記第1のレジスタに記憶されているアドレスで指定される前記メモリ上の領域に記憶されている描画命令により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、前記2次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、1つのグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する第3のレジスタと、前記描画位置計算手段により計算された描画位置としての座標と前記第3のレジスタに記憶されている最大値および最小値とを比較し、比較結果により前記第3のレジスタに記憶された最大値または最小値を更新する最大最小更新手段と、前記第2の記憶領域のうち前記描画位置により特定される画素のデータを記憶する領域に、前記輪郭線が通る画素であることを示すデータを書き込む輪郭描画処理を行う輪郭描画手段と、1つのグリフについて前記輪郭描画処理が完了すると、前記第2のレジスタに記憶されているアドレスで指定される記憶領域に、前記第3のレジスタに記憶されている最大値または最小値を、前記メモリアクセス手段を介して書き込む書き込み処理を行う最大最小書き込み手段と、前記書き込み処理が終了すると、前記第2のレジスタに記憶されているアドレスを更新する更新手段とを有するフォント描画装置と、前記フォント描画装置を制御する制御装置と、前記フォント描画装置に電源を供給する電源制御回路と、を有する情報処理装置の制御方法であって、前記制御装置が、前記メモリの前記第1の記憶領域に、前記複数の描画命令を書き込むステップと、前記制御装置が、前記第1のレジスタに、前記複数の描画命令の先頭位置を示すアドレスを書き込むステップと、前記制御装置が、前記第2のレジスタに、前記第3の記憶領域の先頭位置を示すアドレスを書き込むステップと、前記制御装置が、前記メモリ、前記第1のレジスタおよび前記第2のレジスタに対して書き込みを行った後で、前記フォント描画装置を起動するステップと、前記電源制御回路が、前記フォント描画装置が起動されると、前記制御装置および前記メモリへの電力の供給を停止させるステップとを有する制御方法を提供する。
この制御方法によれば、メモリへの電力の供給が停止されても、メモリには座標の最大値および最小値が記憶されている。
この制御方法によれば、メモリへの電力の供給が停止されても、メモリには座標の最大値および最小値が記憶されている。
A.第1実施形態
1.構成
図1は、第1実施形態に係る情報表示装置1のハードウェア構成を示す図である。情報表示装置1は、情報処理装置の一例である。CPU(Central Processing Unit)10は、情報表示装置1の各要素を制御する制御装置である。ROM(Read Only Memory)20は、情報表示装置1の起動・動作に必要なプログラムやデータを記憶する不揮発性の記憶装置である。本実施形態において、ROM20は、フォントに関するデータとしてグリフデータを記憶している。グリフデータとは、グリフの輪郭線および輪郭線の向きを示すデータである(詳細は後述)。RAM(Random Access Memory)30は、CPU10がプログラムを実行する際にワークエリアとして用いられる記憶装置である。表示体40は、供給されたデータに従った画像を表示する装置、この例ではEPD(Electrophoretic Display)である。EPDは、記憶性表示体の一例である。VRAM(Video Random Access Memory)50は、表示するデータの格納に用いられる記憶装置である。表示制御装置60は、CPU10の制御下で、VRAM50に記憶されているデータに従って表示体40を制御する装置である。入力装置70は、ユーザからの指示、データ等の入力に用いられる装置、例えば、ボタン(書き換えボタンやページ送りボタン、決定ボタンなど)・キーパッド・ホイール・レバー・タッチパネル・ペンデバイスなどである。バス80は、要素間のデータや信号の伝送に用いられる伝送路である。バスコントローラ90は、バス80に接続されているすべての装置(モジュール)について、バス権(バスを使用する権利)の調停を行う装置である。フォントプロセッサ100は、フォントの描画に用いられる装置であり、フォント描画装置の一例である。
1.構成
図1は、第1実施形態に係る情報表示装置1のハードウェア構成を示す図である。情報表示装置1は、情報処理装置の一例である。CPU(Central Processing Unit)10は、情報表示装置1の各要素を制御する制御装置である。ROM(Read Only Memory)20は、情報表示装置1の起動・動作に必要なプログラムやデータを記憶する不揮発性の記憶装置である。本実施形態において、ROM20は、フォントに関するデータとしてグリフデータを記憶している。グリフデータとは、グリフの輪郭線および輪郭線の向きを示すデータである(詳細は後述)。RAM(Random Access Memory)30は、CPU10がプログラムを実行する際にワークエリアとして用いられる記憶装置である。表示体40は、供給されたデータに従った画像を表示する装置、この例ではEPD(Electrophoretic Display)である。EPDは、記憶性表示体の一例である。VRAM(Video Random Access Memory)50は、表示するデータの格納に用いられる記憶装置である。表示制御装置60は、CPU10の制御下で、VRAM50に記憶されているデータに従って表示体40を制御する装置である。入力装置70は、ユーザからの指示、データ等の入力に用いられる装置、例えば、ボタン(書き換えボタンやページ送りボタン、決定ボタンなど)・キーパッド・ホイール・レバー・タッチパネル・ペンデバイスなどである。バス80は、要素間のデータや信号の伝送に用いられる伝送路である。バスコントローラ90は、バス80に接続されているすべての装置(モジュール)について、バス権(バスを使用する権利)の調停を行う装置である。フォントプロセッサ100は、フォントの描画に用いられる装置であり、フォント描画装置の一例である。
CPU10・ROM20・RAM30・VRAM50・表示制御装置60・フォントプロセッサ100は、バス80に直接接続されている。この構成により、CPU10・表示制御装置60・フォントプロセッサ100は、それぞれ独立してメモリ(ROM20・RAM30・VRAM50)にアクセスすることができる。CPU10とフォントプロセッサ100間の信号線は、CPU10からフォントプロセッサ100への描画開始命令の供給、およびフォントプロセッサ100からCPU10への描画完了通知の供給に用いられる。CPU10および表示制御装置60間の信号線は、CPU10から表示制御装置60への画面更新(すなわち表示体40への転送命令)の供給に用いられる。この信号線は、表示体40として液晶ディスプレイ等、記憶性表示体でない表示体を用いた場合には不要である。
図2は、フォントプロセッサ100の構成を示す図である。フォントプロセッサ100は、CPU10からの描画命令に応じてグリフを描画する。すなわち、フォントプロセッサ100は、CPU10からの描画命令に応じて、グリフのデータをVRAM50に書き込む。メインコントローラ101は、フォントプロセッサ100の各要素を制御する。メインコントローラ101は、レジスタ102を有する。レジスタ102は、例えば、メインコントローラ101が読み出すべきデータのアドレスを記憶するのに用いられる。フォント描画コントローラ103は、フォント描画に必要な情報、例えばアフィン変換パラメータを記憶する。フォント描画コントローラ103はさらに、与えられた命令がDrawCharなのかDrawCharFillなのかを記憶する。DrawCharは、輪郭描画処理の実行を指示する命令である。DrawCharFillは、輪郭描画および塗り潰し処理の実行を指示する命令である。輪郭計算モジュール110(輪郭計算手段の一例)は、描画命令により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、グリフの輪郭線が通過する画素を対象画素として特定する計算(輪郭計算処理)を行う。描画位置計算モジュール111(描画位置計算手段の一例)は、2次元座標系における対象画素の座標を描画位置として計算する(描画位置計算処理)。レジスタ112(最大最小記憶手段の一例)は、過去に対象画素として特定された画素の、描画位置としての座標の最大値および最小値を記憶する。また、描画位置計算モジュール111は、計算された描画位置と、記憶されている最大値および最小値とを比較し、比較結果により最大値および最小値を更新する最大最小更新手段としての機能を有する。
輪郭描画モジュール104(輪郭描画手段の一例)は、命令DrawCharまたは命令DrawCharFillが与えられた場合に、輪郭描画処理を行う。輪郭描画処理は、ワークメモリ105のうち、描画位置により特定される記憶領域に、輪郭線が通る画素であることを示すデータを書き込む処理である。塗り潰しモジュール106(塗り潰し手段の一例)は、ワークメモリ105に書き込まれたデータにより特定される輪郭線の内部を塗り潰す塗り潰し処理を行う。塗り潰しモジュール106は、さらに、塗り潰し処理が行われた後で、ワークメモリ105に記憶された複数の画素のデータのうち、記憶されている最大値および最小値で切り取られる領域に含まれる画素のデータを、VRAM50に転送する出力手段としての機能を有する。バスインターフェースモジュール107は、バス80を介してCPU10・ROM20・RAM30等の他の要素との間で信号やデータの入出力を行う。バスインターフェースモジュール107は、CPU10から描画命令が入力される指示入力手段として機能する。メインバス108およびサブバス109は、要素間のデータや信号の伝送に用いられる伝送路である。
輪郭描画モジュール104と塗り潰しモジュール106との間の信号線は、輪郭描画の終了の通知に用いられる。フォント描画コントローラ103と塗り潰しモジュール106との間の信号線は、ワークメモリ105のビット幅、データの範囲などの情報の伝送に用いられる。塗り潰しモジュール106とメインバス108との間の信号線は、背景データの伝送、塗り潰し処理の結果の伝送に用いられる。メインバス108と輪郭計算モジュール110との間の信号線は、グリフデータの伝送に用いられる。フォント描画コントローラ103と描画位置計算モジュール111との間の信号線は、アフィン変換パラメータの伝送に用いられる。輪郭計算モジュール110と描画位置計算モジュール111との間の信号線は、輪郭線を示す情報の伝送に用いられる。フォント描画コントローラ103と描画位置計算モジュール111との間の信号線は、最大値・最小値の伝送に用いられる。描画位置計算モジュール111と輪郭描画モジュール104との間の信号線は、輪郭線が通る画素の座標を示す差分情報の伝送に用いられる。特に説明しないがこれら以外の信号線も、必要なデータや命令の伝送に用いられる。また、2つのワークメモリ105は交互に用いられ、処理の高速化が図られる。
図3は、情報表示装置1の外観を示す図である。情報表示装置1は、筐体の前面に表示体40の表示面、および入力装置70としてのボタン群を有する。
2.動作
続いて、情報表示装置1の動作を説明する。ここではまず、グリフデータの構成について概説し、さらに本実施形態の転送領域計算方法について概説した後で、情報表示装置1の動作を詳細に説明する。
続いて、情報表示装置1の動作を説明する。ここではまず、グリフデータの構成について概説し、さらに本実施形態の転送領域計算方法について概説した後で、情報表示装置1の動作を詳細に説明する。
2−1.グリフデータの構成
図4は、グリフデータを例示する図である。グリフデータは、グリフの輪郭(アウトライン)を描くのに用いられる情報を含んでいる。この例で、グリフデータは、端点を特定する情報として点の座標と、2つの端点を結ぶ直線または曲線を特定する情報として直線または曲線を描画する命令(コマンド)を含む。D1〜D6は輪郭線上の点を表す。命令Moveは、点位置を移動させる命令である。命令Moveは、移動先の点の座標を引数として含む。命令Lineは、直線(線分)を描画させる命令である。命令Lineは、直線の終点の座標を引数として含む。図4の例では用いられていないが命令Curve2は2次のベジェ曲線を描画させる命令である。命令Curve2は、曲線の終点の座標および1つの制御点の座標を引数として含む。命令Curve3は、3次のベジェ曲線を描画させる命令である。命令Curve3は、曲線の終点の座標および2つの制御点の座標を引数として含む。命令EOCは、グリフデータの終端を示す。点D0は所定の基準点である。命令Move(D1)により、点位置がD0からD1に移動する。命令Line(D2)により、D1からD2まで直線が描画される。命令Line(D3)により、D2からD3まで直線が描画される。命令Curve3(D7,D8,D4)により、D3からD4までD7およびD8を制御点として3次のベジェ曲線が描画される。なお点D7およびD8は図示していない。以下同様にして、グリフデータにより図4に示されるような、向きを持った輪郭線が記述される。図4では理解を助けるためにグリフデータを図形的に示したが、グリフデータは実際には命令および点の座標を含むテキストデータまたはバイナリデータである。
図4は、グリフデータを例示する図である。グリフデータは、グリフの輪郭(アウトライン)を描くのに用いられる情報を含んでいる。この例で、グリフデータは、端点を特定する情報として点の座標と、2つの端点を結ぶ直線または曲線を特定する情報として直線または曲線を描画する命令(コマンド)を含む。D1〜D6は輪郭線上の点を表す。命令Moveは、点位置を移動させる命令である。命令Moveは、移動先の点の座標を引数として含む。命令Lineは、直線(線分)を描画させる命令である。命令Lineは、直線の終点の座標を引数として含む。図4の例では用いられていないが命令Curve2は2次のベジェ曲線を描画させる命令である。命令Curve2は、曲線の終点の座標および1つの制御点の座標を引数として含む。命令Curve3は、3次のベジェ曲線を描画させる命令である。命令Curve3は、曲線の終点の座標および2つの制御点の座標を引数として含む。命令EOCは、グリフデータの終端を示す。点D0は所定の基準点である。命令Move(D1)により、点位置がD0からD1に移動する。命令Line(D2)により、D1からD2まで直線が描画される。命令Line(D3)により、D2からD3まで直線が描画される。命令Curve3(D7,D8,D4)により、D3からD4までD7およびD8を制御点として3次のベジェ曲線が描画される。なお点D7およびD8は図示していない。以下同様にして、グリフデータにより図4に示されるような、向きを持った輪郭線が記述される。図4では理解を助けるためにグリフデータを図形的に示したが、グリフデータは実際には命令および点の座標を含むテキストデータまたはバイナリデータである。
2−2.転送領域計算方法の概説
図5は、本実施形態に係る転送領域計算方法を概説する図である。図5(A)−(C)は本実施形態の方法を用いない場合を説明するものである。図5(A)は、通常状態のグリフを示す。このとき、転送領域、すなわちグリフが描画されている領域は、グリフを包含する外接長方形(破線)で囲まれる領域である。図5(B)は、斜体に変形されたグリフを示す。グリフが斜体に変形されると、図5(A)の外接長方形もひし形に変形する。メモリアクセスは長方形の領域に対して行われるので、このときの転送領域はこのひし形を包含する外接長方形で囲まれる領域である。図5(C)は、反時計回りに45°回転されたグリフを示す。グリフが回転されると、図5(A)の外接長方形も回転される。このときの転送領域は回転された外接長方形を包含する外接長方形で囲まれる領域である。
図5は、本実施形態に係る転送領域計算方法を概説する図である。図5(A)−(C)は本実施形態の方法を用いない場合を説明するものである。図5(A)は、通常状態のグリフを示す。このとき、転送領域、すなわちグリフが描画されている領域は、グリフを包含する外接長方形(破線)で囲まれる領域である。図5(B)は、斜体に変形されたグリフを示す。グリフが斜体に変形されると、図5(A)の外接長方形もひし形に変形する。メモリアクセスは長方形の領域に対して行われるので、このときの転送領域はこのひし形を包含する外接長方形で囲まれる領域である。図5(C)は、反時計回りに45°回転されたグリフを示す。グリフが回転されると、図5(A)の外接長方形も回転される。このときの転送領域は回転された外接長方形を包含する外接長方形で囲まれる領域である。
図5(D)−(F)は本実施形態の方法を用いた場合を説明するものである。図5(D)は、通常状態のグリフを示す。このとき、転送領域は、グリフを包含する外接長方形(破線)で囲まれる領域であり、図5(A)の場合と等しい。図5(E)は、斜体に変形されたグリフを、図5(F)は反時計回りに45°回転されたグリフを示す。これらの場合においても、転送領域は変形または回転後のグリフを包含する外接長方形で囲まれる領域である。本実施形態の方法を用いない場合と比較すると、網点で示した部分についての転送を省略することができる。このように、本実施形態によれば、不要なメモリアクセスが削減される。
2−3.情報表示装置1の動作
2−3−1.全体動作
図6は、情報表示装置1の動作を示すフローチャートである。図6に示されるフローは、フォントの描画を開始させるイベント、例えば、表示体40に表示される画像を更新するイベントを契機として開始される。ステップS10において、CPU10は、グリフデータに従って、グリフの描画を指示する描画命令を生成し、生成した描画命令をフォントプロセッサ100に出力する。描画命令が入力されると、フォントプロセッサ100は、輪郭計算処理、描画位置計算処理および輪郭描画処理を行い(ステップS20−S40)、その結果を用いて塗り潰し処理を行う(ステップS50)。ある画素について見ると、処理は、輪郭計算処理、描画位置計算処理、輪郭描画処理の順番で行われる。塗り潰し処理が完了すると、フォントプロセッサ100は、ワークメモリ105に記憶されているデータの少なくとも一部をVRAM50に転送する(ステップS60)。
2−3−1.全体動作
図6は、情報表示装置1の動作を示すフローチャートである。図6に示されるフローは、フォントの描画を開始させるイベント、例えば、表示体40に表示される画像を更新するイベントを契機として開始される。ステップS10において、CPU10は、グリフデータに従って、グリフの描画を指示する描画命令を生成し、生成した描画命令をフォントプロセッサ100に出力する。描画命令が入力されると、フォントプロセッサ100は、輪郭計算処理、描画位置計算処理および輪郭描画処理を行い(ステップS20−S40)、その結果を用いて塗り潰し処理を行う(ステップS50)。ある画素について見ると、処理は、輪郭計算処理、描画位置計算処理、輪郭描画処理の順番で行われる。塗り潰し処理が完了すると、フォントプロセッサ100は、ワークメモリ105に記憶されているデータの少なくとも一部をVRAM50に転送する(ステップS60)。
2−3−2.輪郭計算モジュール110の動作
図7は、輪郭計算処理の前段、すなわち輪郭計算モジュール110の動作を示すフローチャートである。CPU10から描画命令が入力されると、メインコントローラ101は、描画命令により指定されるグリフデータを読み出し、グリフデータに記述されている命令を順番に輪郭計算モジュール110に与える。
図7は、輪郭計算処理の前段、すなわち輪郭計算モジュール110の動作を示すフローチャートである。CPU10から描画命令が入力されると、メインコントローラ101は、描画命令により指定されるグリフデータを読み出し、グリフデータに記述されている命令を順番に輪郭計算モジュール110に与える。
ステップS201において、輪郭計算モジュール110は、描画位置を初期化する。描画位置とは、ワークメモリ105に記憶された複数の画素のデータのうち、処理の対象となる1つの画素すなわち対象画素の座標をいう。複数の画素はマトリクス状に、すなわち2次元配置されており、xy直交座標系を用いて各画素を特定することができる。座標軸の原点はマトリクスの左上端の点であり、右方向および下方向がx軸およびy軸の正方向である。この例で、描画位置は(x,y)=(0,0)に初期化される。
ステップS202において、輪郭計算モジュール110は、与えられている命令がMoveであるか判断する。与えられた命令がMoveであると判断された場合(S202:YES)、輪郭計算モジュール110は、処理をステップS203に移行する。与えられた命令がMoveでないと判断された場合(S202:NO)、輪郭計算モジュール110は、処理をステップS206に移行する。
ステップS203において、輪郭計算モジュール110は、命令Moveの引数から移動先の点の座標を計算し、パラメータP3に代入する。パラメータP3は、直線または曲線の終点を示す。このときの座標は、ワークメモリ105においてマトリクス状に配置された複数の画素の2次元座標ではなく、グリフデータにおいて規格化された座標である。ステップS204において、輪郭計算モジュール110は、パラメータP3に対してアフィン変換を適用する。ステップS205において、輪郭計算モジュール110は、後段に、命令Moveおよび変換後のパラメータP3を出力する。命令およびパラメータを出力すると、輪郭計算モジュール110は、処理をステップS218に移行する。
ステップS206において、輪郭計算モジュール110は、与えられている命令がLineであるか判断する。与えられた命令がLineであると判断された場合(S206:YES)、輪郭計算モジュール110は、処理をステップS207に移行する。与えられた命令がLineでないと判断された場合(S206:NO)、輪郭計算モジュール110は、処理をステップS210に移行する。
ステップS207において、輪郭計算モジュール110は、命令Lineの引数から直線の端点の座標を計算し、パラメータP0およびP3に代入する。パラメータP0は、直線または曲線の始点を示す。ステップS208において、輪郭計算モジュール110は、パラメータP0およびP3に対してアフィン変換を適用する。ステップS209において、輪郭計算モジュール110は、後段に、命令Lineおよび変換後のパラメータP0およびP3を出力する。命令およびパラメータを出力すると、輪郭計算モジュール110は、処理をステップS218に移行する。
ステップS210において、輪郭計算モジュール110は、与えられている命令がCurve2であるか判断する。与えられた命令がCurve2であると判断された場合(S210:YES)、輪郭計算モジュール110は、処理をステップS211に移行する。与えられた命令がCurve2でないと判断された場合(S210:NO)、輪郭計算モジュール110は、処理をステップS214に移行する。
ステップS211において、輪郭計算モジュール110は、命令Curve2の引数からベジェ直線の端点および制御点の座標を計算し、パラメータP0、P1およびP3に代入する。パラメータP1は、2次ベジェ曲線の制御点を示す。ステップS212において、輪郭計算モジュール110は、パラメータP0、P1およびP3に対してアフィン変換を適用する。ステップS213において、輪郭計算モジュール110は、後段に、命令Curve2および変換後のパラメータP0、P1およびP3を出力する。命令およびパラメータを出力すると、輪郭計算モジュール110は、処理をステップS218に移行する。
ステップS214において、輪郭計算モジュール110は、与えられている命令がCurve3であるか判断する。与えられた命令がCurve3であると判断された場合(S214:YES)、輪郭計算モジュール110は、処理をステップS215に移行する。与えられた命令がCurve3でないと判断された場合(S214:NO)、輪郭計算モジュール110は、処理をステップS219に移行する。
ステップS215において、輪郭計算モジュール110は、命令Curve3の引数からベジェ直線の端点および2つの制御点の座標を計算し、パラメータP0、P1、P2およびP3に代入する。パラメータP2は、3次ベジェ曲線の制御点を示す。ステップS216において、輪郭計算モジュール110は、パラメータP0、P1、P2およびP3に対してアフィン変換を適用する。ステップS217において、輪郭計算モジュール110は、後段に、命令Curve3および変換後のパラメータP0、P1、P2およびP3を出力する。命令およびパラメータを出力すると、輪郭計算モジュール110は、処理をステップS218に移行する。
ステップS218において、輪郭計算モジュール110は、パラメータP3により示される座標が新たな描画位置となるように、描画位置を更新する。描画位置を更新すると、輪郭計算モジュール110は、処理をステップS202に移行する。
ステップS219において、輪郭計算モジュール110は、与えられている命令がEOCであるか判断する。与えられた命令がEOCであると判断された場合(S219:YES)、輪郭計算モジュール110は、後段に命令EOCを出力する。命令EOCを出力すると、輪郭計算モジュール110は、図7のフローを終了する。与えられた命令がEOCでないと判断された場合(S219:NO)、輪郭計算モジュール110は、処理をステップS221に移行する。
ステップS221において、輪郭計算モジュール110は、エラーレジスタに「1」を書き込む。エラーレジスタは、エラー発生の有無を示すデータを記憶する。記憶されているデータが「0」のときはエラーが発生していないことを、データが「1」のときはエラーが発生したことを示す。エラーレジスタに「1」が書き込まれると、CPU10はエラーに対処する処理、この例ではシステムのリセットを行う。システムがリセットされると、図7のフローは終了する。
以上で説明したように、図7のフローによれば、輪郭計算モジュール110の後段に、命令Move、Line、Curve2、Curve3、EOCのいずれか、および必要な座標が送られる。
図8は、輪郭計算処理の後段、すなわち輪郭計算モジュール110の動作を示すフローチャートである。ステップS250において、輪郭計算モジュール110は、スタックが空であるか判断する。この例でスタックはLIFO(Last In First Out)であり、ワークメモリ105上にその記憶領域が設けられる。初期状態においてスタックは空である。スタックが空であると判断された場合(S250:YES)、輪郭計算モジュール110は、処理をステップS251に移行する。スタックが空でないと判断された場合(S250:NO)、輪郭計算モジュール110は、処理をステップS263に移行する。
ステップS251において、輪郭計算モジュール110は、前段から命令を取得する。ステップS252において、輪郭計算モジュール110は、与えられた命令がMoveであるか判断する。与えられた命令がMoveであると判断された場合(S252:YES)、輪郭計算モジュール110は、ステップS253において、描画位置計算モジュール111に命令MoveおよびパラメータP3を出力する。与えられた命令がMoveでないと判断された場合(S252:NO)、輪郭計算モジュール110は、処理をステップS254に移行する。
ステップS254において、輪郭計算モジュール110は、与えられた命令がLineであるか判断する。与えられた命令がLineであると判断された場合(S254:YES)、輪郭計算モジュール110は、ステップS255において、命令LineおよびパラメータP0−P3をスタックに積む(プッシュする)。与えられた命令がLineでないと判断された場合(S254:NO)、輪郭計算モジュール110は、処理をステップS256に移行する。
ステップS256において、輪郭計算モジュール110は、与えられた命令がCurve2であるか判断する。与えられた命令がCurve2であると判断された場合(S256:YES)、輪郭計算モジュール110は、ステップS257において、命令Curve2およびパラメータP0−P3をスタックに積む。与えられた命令がCurve2でないと判断された場合(S256:NO)、輪郭計算モジュール110は、処理をステップS258に移行する。
ステップS258において、輪郭計算モジュール110は、与えられた命令がCurve3であるか判断する。与えられた命令がCurve3であると判断された場合(S258:YES)、輪郭計算モジュール110は、ステップS259において、命令Curve3およびパラメータP0−P3をスタックに積む。与えられた命令がCurve3でないと判断された場合(S258:NO)、輪郭計算モジュール110は、処理をステップS260に移行する。
ステップS260において、輪郭計算モジュール110は、与えられた命令がEOCであるか判断する。与えられた命令がEOCであると判断された場合(S260:YES)、輪郭計算モジュール110は、ステップS261において、描画位置計算モジュール111に命令EOCを出力する。命令EOCを出力すると、輪郭計算モジュール110は、図8のフローを終了する。与えられた命令がEOCでないと判断された場合(S260:NO)、輪郭計算モジュール110は、処理をステップS262に移行する。
ステップS262において、輪郭計算モジュール110は、エラーレジスタに「1」を書き込む。エラーレジスタは、エラー発生の有無を示すデータを記憶する。記憶されているデータが「0」のときはエラーが発生していないことを、データが「1」のときはエラーが発生したことを示す。エラーレジスタに「1」が書き込まれると、CPU10はエラーに対処する処理、この例ではシステムのリセットを行う。システムがリセットされると、図8のフローは終了する。
ステップS263において、輪郭計算モジュール110は、スタックからデータを取得する(ポップする)。取得されるデータは、命令およびパラメータP0−P3である。ステップS264において、輪郭計算モジュール110は、データによって表される距離がしきい値、この例では1画素よりも小さいか判断する。「データによって表される距離」の詳細は後述する。距離がしきい値よりも小さいと判断された場合(S264:YES)、輪郭計算モジュール110は、処理をステップS267に移行する。距離がしきい値よりも小さくないと判断された場合(S264:NO)、輪郭計算モジュール110は、処理をステップS265に移行する。
ステップS265において、輪郭計算モジュール110は、データを分割する。ステップS266において、輪郭計算モジュール110は、分割したデータを、後半、前半の順番でスタックに積む。分割したデータをスタックに積むと、輪郭計算モジュール110は、処理をステップS250に移行する。こうして、「データによって表される距離」がしきい値よりも小さくなるまで繰り返しデータの分割が行われる。
図9は、データの分割を説明する図である。図9(A)は、命令Lineの場合を示している。この場合、ステップS264における「データによって表される距離」は、点P0と点P3の間の距離(すなわち線分P0P3の長さ)である。データの分割は次のように行われる。まず、輪郭計算モジュール110は、点P0と点P3の中点Mの座標を計算する。輪郭計算モジュール110は、点Mを用いて、データを前半と後半に分割する。前半は、命令Lineおよび引数P0、Mを含むデータであり、後半は、命令Lineおよび引数M、P3を含むデータである。分割後のデータにおいて点Mは、新たな点P0またはP3として扱われる。
図9(B)は、命令Curve2の場合を示している。この場合、「データによって表される距離」は、線分P0P3、P0P1およびP1P3の長さである。データの分割は次のように行われる。輪郭計算モジュール110は、点P0と点P1の中点M0の座標を計算する。輪郭計算モジュール110は、点P1と点P3の中点M3の座標を計算する。輪郭計算モジュール110は、点M0と点M3の中点Nの座標を計算する。輪郭計算モジュール110は、点Nを用いて、データを前半と後半に分割する。前半は、命令Curve2および引数P0、M0、Nを含むデータであり、後半は、命令Curve2および引数N、M3、P3を含むデータである。分割後のデータにおいて点Nは、新たな点P0またはP3として扱われる。点M0およびM3は、新たな点P1として扱われる。
図9(C)は、命令Curve3の場合を示している。この場合、「データによって表される距離」は、線分P0P3、P0P1、P1P2およびP2P3の長さである。データの分割は次のように行われる。輪郭計算モジュール110は、点P0と点P1の中点M0の座標を計算する。輪郭計算モジュール110は、点P1と点P2の中点M1の座標を計算する。輪郭計算モジュール110は、点P2と点P3の中点M3の座標を計算する。輪郭計算モジュール110は、点M0と点M1の中点N0の座標を計算する。輪郭計算モジュール110は、点M1と点M3の中点N3の座標を計算する。輪郭計算モジュール110は、点N0と点N3の中点Lの座標を計算する。輪郭計算モジュール110は、点Lを用いて、データを前半と後半に分割する。前半は、命令Curve3および引数P0、M0、N0、Lを含むデータであり、後半は、命令Curve2および引数L、N3、M3、P3を含むデータである。分割後のデータにおいて点Lは、新たな点P0またはP3として扱われる。点M0およびN3は、新たな点P1として扱われる。点N0およびM3は、新たな点P2として扱われる。
再び図8を参照する。ステップS267において、輪郭計算モジュール110は、点P0と点P3の差分ベクトルを計算する。ステップS268において、輪郭計算モジュール110は、差分ベクトルがゼロベクトルであるか判断する。差分ベクトルがゼロベクトルであると判断された場合(S268:YES)、輪郭計算モジュール110は、処理をステップS250に移行する。差分ベクトルがゼロベクトルでないと判断された場合(S268:NO)、輪郭計算モジュール110は、ステップS269において、描画位置計算モジュール111に、命令dVectorおよびその引数、あるいは必要に応じて他の命令および引数を出力する。命令dVectorは、次に輪郭線が通る画素すなわち輪郭線として塗りつぶさせる画素を特定する命令であり、差分ベクトルを引数として含む。命令dVectorは、命令Line、Curve2またはCurve3が細分化されたものである。
このように、輪郭計算モジュール110は、グリフデータに記述された命令Line、Curve2およびCurve3を細分化し、細分化したデータを後段のモジュールに出力する。
2−3−3.描画位置計算モジュール111の動作
図10は、描画位置計算モジュール111の構成を示す図である。輪郭計算モジュール110から出力された命令は、入力cmdとして描画位置計算モジュール111に入力される。描画位置計算モジュール111に入力される命令は、Move、dVector、EOCのいずれかである。セレクタ201は、入力された命令がdVectoreであった場合は「1」を出力し、命令がMoveまたはEOCであった場合は「0」を出力する。ラッチ202は、命令をラッチする。ラッチされた命令は、出力cmdとして後段の輪郭描画モジュール104に出力される。
図10は、描画位置計算モジュール111の構成を示す図である。輪郭計算モジュール110から出力された命令は、入力cmdとして描画位置計算モジュール111に入力される。描画位置計算モジュール111に入力される命令は、Move、dVector、EOCのいずれかである。セレクタ201は、入力された命令がdVectoreであった場合は「1」を出力し、命令がMoveまたはEOCであった場合は「0」を出力する。ラッチ202は、命令をラッチする。ラッチされた命令は、出力cmdとして後段の輪郭描画モジュール104に出力される。
輪郭計算モジュール110から出力される命令の引数は、入力dyおよびdxとして描画位置計算モジュール111に入力される。具体的には、入力dyおよびdxは、入力された命令がdVectorのときは差分ベクトルのy成分およびx成分であり、命令がMoveのときは移動先の位置ベクトルのy成分およびx成分である。セレクタ203は、セレクタ201の出力が「0」であるとき(すなわち輪郭計算モジュール110から命令MoveまたはEOCが入力されたとき)は入力dyを出力し、セレクタ201の出力が「1」であるとき(すなわち輪郭計算モジュール110から命令dVectorが入力されたとき)は加算器204からの入力を出力する。加算器204は、入力dyおよびラッチ205からの入力を加算する。ラッチ205は、現在処理対象となっている画素のy座標(y)をラッチする。ラッチ206は、ラッチ205からの入力、すなわち1クロック前のy座標(py)をラッチする。セレクタ207は、入力dyがdy≧0のときはpyを、dy<0のときはyを出力する。
セレクタ208は、セレクタ201の出力が「0」であるときは入力dxを出力し、セレクタ201の出力が「1」であるときは加算器209からの入力を出力する。加算器209は、入力dxおよびラッチ210からの入力を加算する。ラッチ210は、現在処理対象となっている画素のx座標(x)をラッチする。ラッチ211は、ラッチ210からの入力、すなわち1クロック前のx座標(px)をラッチする。セレクタ212は、入力dy(入力dxではない)がdy≧0のときはpxを、dy<0のときはxを出力する。
クリッピングモジュール213は、対象画素の座標を、クリップされる領域(クリップ領域)内に修正する機能を有する。クリップ領域は、プログラムに従って動作するCPU10によって指定される。CPU10は、クリップ領域のx座標およびy座標の最大値および最小値をcl_xmax、cl_xmin、cl_ymaxおよびcl_yminとしてフォントプロセッサ100に出力する。
図11は、クリッピングモジュール213の構成を示す図である。セレクタ207の出力すなわち対象画素のy座標は、入力aとしてクリッピングモジュール213に入力される。CPU10の出力cl_ymaxおよびcl_yminは、それぞれ入力amaxおよびaminとしてクリッピングモジュール213に入力される。減算器301は、aからamaxを減算した結果を出力する。セレクタ302は、a−amax<0の場合すなわちa<amaxの場合、「0」を出力し、a−amax≧0の場合すなわちa≧amaxの場合、「1」を出力する。減算器303は、aからaminを減算した結果を出力する。セレクタ304は、a−amin≧0の場合すなわちa≧aminの場合、「0」を出力し、a−amin<0の場合すなわちa<aminの場合、「1」を出力する。セレクタ302またはセレクタ304の出力が「1」であるということは、対象画素の座標を、クリップ領域内に修正する必要があることを示す。セレクタ305は、セレクタ304の出力が「0」である場合にはaを出力し、セレクタ304の出力が「1」である場合にはaminを出力する。セレクタ306は、セレクタ302の出力が「1」である場合にはamaxを出力raとして出力し、セレクタ302の出力が0である場合にはセレクタ305からの入力を出力raとして出力する。出力raは、クリップ領域内に修正された対象画素の座標を示す。OR回路307は、セレクタ302の出力とセレクタ304の出力の論理和を、出力clippedとして出力する。出力clippedは、「0」のときクリッピングが行われていないことを示し、「1」のときクリッピングが行われたことを示す。
再び図10を参照する。最大最小更新モジュール214は、レジスタ112に記憶されている、y座標の最大値(ymax)および最小値(ymin)を更新する。レジスタ112は、出力ymaxおよびyminを出力する。最大最小更新モジュール214には、クリッピングモジュール213の出力ra、レジスタ112の出力ymaxおよびyminが入力される。
図12は、最大最小更新モジュール214の構成を示す図である。入力aは、クリッピングモジュール213の出力ra、すなわちクリップ領域内に修正された対象画素の座標である。入力amaxおよびaminは、レジスタ112の出力ymaxおよびymin、すなわちy座標の最大値および最小値である。減算器401は、aからamaxを減算した結果を出力する。セレクタ402は、a−amax≧0の場合すなわちa≧amaxの場合、出力ramaxとしてaを出力し、a−amax<0の場合すなわちa<amaxの場合、出力ramaxとしてamaxを出力する。すなわち、最大最小更新モジュール214は、対象画素のy座標がレジスタ112に記憶されている最大値よりも大きければ対象画素のy座標を出力し、対象画素のy座標が最大値よりも小さければ最大値を出力する。減算器403は、aからaminを減算した結果を出力する。セレクタ404は、a−amin<0の場合すなわちa<aminの場合、出力raminとしてaを出力し、a−amin≧0の場合すなわちa≧aminの場合、出力raminとしてaminを出力する。すなわち、最大最小更新モジュール214は、対象画素のy座標がレジスタ112に記憶されている最小値よりも小さければ対象画素のy座標を出力し、対象画素のy座標が最小値よりも大きければ最小値を出力する。
再び図10を参照する。最大最小更新モジュール214の出力ramaxおよびraminは、それぞれrymaxおよびryminとしてレジスタ112に出力される。こうしてレジスタ112は、更新された最大値および最小値を記憶し、それぞれymaxおよびyminとして再び描画位置計算モジュール111に出力する。
クリッピングモジュール215および最大最小更新モジュール216は、クリッピングモジュール213および最大最小更新モジュール214と同一の構成を有しているが、y座標ではなくx座標が入力される点が異なる。したがって、raはrxとして輪郭描画モジュール104に出力される。また、ramaxおよびraminは、rxmaxおよびrxminとしてレジスタ112に出力される。こうしてレジスタ112は、更新された最大値および最小値を記憶し、それぞれxmaxおよびxminとして再び描画位置計算モジュール111に出力する。
OR回路217は、クリッピングモジュール213の出力clippedおよびクリッピングモジュール215の出力clippedの論理和を出力strokeとして出力する。出力strokeは、「1」のときx座標およびy座標のいずれかでクリッピングが行われたことを示し、「0」のときx座標およびy座標のどちらでもクリッピングが行われていないことを示す。セレクタ218は、クリッピングモジュール213の出力clippedが「0」の場合はdyを出力し、出力clippedが「1」の場合は「0」を出力する。描画位置計算モジュール111は、セレクタ218の出力を、出力dwnとして輪郭描画モジュール104に出力する。出力dwnは、輪郭線のy方向における変化量を示す。
以上で説明したように、描画位置計算モジュール111は、cmd、dy、dx、cl_ymax、cl_ymin、ymax、ymin、cl_xmax、cl_xmin、xmaxおよびxminが入力されると、cmd、stroke、ry、rx、dwn、rymax、rymin、rxmin、rxminを出力する。
2−3−4.輪郭描画モジュール104の動作
図13は、輪郭描画モジュール104の動作を示すフローチャートである。ステップS300において、輪郭描画モジュール104は、輪郭計算モジュール110から出力された命令がEOCであるか判断する。与えられた命令がEOCであると判断された場合(S300:YES)、輪郭描画モジュール104は、処理をステップS308に移行する。与えられた命令がEOCでないと判断された場合(S300:NO)、輪郭描画モジュール104は、処理をステップS301に移行する。
図13は、輪郭描画モジュール104の動作を示すフローチャートである。ステップS300において、輪郭描画モジュール104は、輪郭計算モジュール110から出力された命令がEOCであるか判断する。与えられた命令がEOCであると判断された場合(S300:YES)、輪郭描画モジュール104は、処理をステップS308に移行する。与えられた命令がEOCでないと判断された場合(S300:NO)、輪郭描画モジュール104は、処理をステップS301に移行する。
ステップS301において、輪郭描画モジュール104は、与えられた命令がMoveであるか判断する。与えられた命令がMoveであると判断された場合(S301:YES)、ワークメモリ105にアクセスする必要がないので、輪郭描画モジュール104は、その画素については何も処理をしない。与えられた命令がMoveでないと判断された場合(S301:NO)、すなわち、命令dVectorが与えられた場合、輪郭描画モジュール104は、処理をステップS302に移行する。
ステップS302において、輪郭描画モジュール104は、stroke=0かつdwn=0であるか判断する。stroke=0かつdwn=0であると判断された場合(S302:YES)、ワークメモリ105にアクセスする必要がないので、輪郭描画モジュール104は、その画素については何も処理をしない。stroke=0かつdwn=0でないと判断された場合(S302:NO)、輪郭描画モジュール104は、処理をステップS303に移行する。
ステップS303において、輪郭描画モジュール104は、画素の位置(rx,ry)から、その画素のデータを記憶しているワークメモリ105のアドレスを算出する。
ステップS304において、輪郭描画モジュール104は、ワークメモリ105のうちステップS303で算出されたアドレスから、画素のデータを読み出す。この例で画素のデータは、ストロークstroke(ストローク情報)および巻き数変化量dwnを含んでいる。複合グリフの場合はもちろん、単純グリフの場合でも、1つの画素で線が交わる場合など、ある画素に対して処理が複数回行われることがある。したがって、既に処理が行われた画素については、初期値以外のストローク情報および巻き数変化量dwnが記録されている。
ステップS304において、輪郭描画モジュール104は、ワークメモリ105のうちステップS303で算出されたアドレスから、画素のデータを読み出す。この例で画素のデータは、ストロークstroke(ストローク情報)および巻き数変化量dwnを含んでいる。複合グリフの場合はもちろん、単純グリフの場合でも、1つの画素で線が交わる場合など、ある画素に対して処理が複数回行われることがある。したがって、既に処理が行われた画素については、初期値以外のストローク情報および巻き数変化量dwnが記録されている。
ステップS305において、輪郭描画モジュール104は、ストローク情報を上書きする。描画位置計算処理から与えられたストロークがstroke=0である場合、輪郭描画モジュール104は、その画素のストローク情報を変更しない。与えられたストロークがstroke=0である場合、輪郭描画モジュール104は、その画素のストローク情報を、「1」に変更する。ステップS306において、輪郭描画モジュール104は、画素の巻き数変化量にdwnを加算する。例えば、画素の巻き数変化量として「2」が記憶されており与えられた巻き数変化量dwn=+1であった場合、画素の巻き数変化量は「3」となる。ステップS307において、輪郭描画モジュール104は、更新したデータでワークメモリ105上のデータを上書きする。
ステップS308において、輪郭描画モジュール104は、輪郭描画処理が終了したことを塗り潰しモジュール106に通知する。
2−3−5.塗り潰しモジュール106の動作
図14は、フォントプロセッサ100の塗り潰しモジュール106の動作を示すフローチャートである。本実施形態において、塗り潰しモジュール106は、輪郭線の内部を塗りつぶす塗りつぶし処理、グリフの画像と背景を合成する背景合成処理、および生成されたデータをVRAM50に転送する転送処理を実行する機能を有する。図14のフローは、図13のステップS308において輪郭描画モジュール104から塗り潰しモジュール106に輪郭描画処理の終了が通知されたことを契機として開始される。
図14は、フォントプロセッサ100の塗り潰しモジュール106の動作を示すフローチャートである。本実施形態において、塗り潰しモジュール106は、輪郭線の内部を塗りつぶす塗りつぶし処理、グリフの画像と背景を合成する背景合成処理、および生成されたデータをVRAM50に転送する転送処理を実行する機能を有する。図14のフローは、図13のステップS308において輪郭描画モジュール104から塗り潰しモジュール106に輪郭描画処理の終了が通知されたことを契機として開始される。
ステップS400において、塗り潰しモジュール106は、パラメータyを初期化する。パラメータxおよびyは、画素の座標を示す。この例で、塗り潰しモジュール106は、y=yMinとしてパラメータyを初期化する。yMinはフォントを描画する領域のy座標の最小値である。以下、マトリクス状に配置された複数の画素のうちパラメータyで特定される行を「対象行」という。
ステップS401において、塗り潰しモジュール106は、まだ対象行となっていない行があるか、具体的にはパラメータyがy≦yMaxを満たすか判断する。yMaxはフォントを描画する領域のy座標の最大値である。まだ処理されていない行があると判断された場合(S401:YES)、塗り潰しモジュール106は、処理をステップS402に移行する。処理されていない行はないと判断された場合(S401:NO)、塗り潰しモジュール106は、図14の処理を終了する。
ステップS402において、塗り潰しモジュール106は、パラメータwnにゼロを代入する。パラメータwnは巻き数(winding number)を示す。巻き数は、対象行と輪郭線とがある向き(例えば、上向き)で交わるときに増加し、対象行と輪郭線とが別の向き(例えば、下向き)で交わるときに減少する。
ステップS403において、塗り潰しモジュール106は、パラメータxを初期化する。この例で、塗り潰しモジュール106は、x=xMinとしてパラメータxを初期化する。xMinはフォントを描画する領域のx座標の最小値である。塗り潰し処理において対象行のうちパラメータxで特定される画素を「対象画素」という。
ステップS404において、塗り潰しモジュール106は、対象行の中にまだ対象画素となっていない画素があるか、具体的にはパラメータxがx≦xMaxを満たすか判断する。xMaxはフォントを描画する領域のx座標の最大値である。まだ対象画素となっていない画素があると判断された場合(S404:YES)、塗り潰しモジュール106は、処理をステップS406に移行する。対象画素となっていない画素はないと判断された場合(S404:NO)、塗り潰しモジュール106は、処理をステップS405に移行する。
ステップS405において、塗り潰しモジュール106は、パラメータyを更新する。この例で、塗り潰しモジュール106は、y=y+1としてパラメータyを更新する。パラメータyを更新すると、塗り潰しモジュール106は、処理をステップS401に移行する。
ステップS406において、塗り潰しモジュール106は、対象画素の背景データ(背景の階調を示すデータ)を、ワークメモリ105に書き込む。背景データは、例えばRAM30から読み出される。
ステップS407において、塗り潰しモジュール106は、ワークメモリ105に記憶されている輪郭を示すビットマップデータ(輪郭データ)から、巻き数変化量dwnを取得する。詳細には以下のとおりである。塗り潰しモジュール106は、パラメータxおよびyから、対象画素のデータを記憶しているアドレスを算出する。塗り潰しモジュール106は、算出されたアドレスから対象画素のデータを読み出す。塗り潰しモジュール106は、読み出されたデータから巻き数変化量dwnを抽出する。
ステップS408において、塗り潰しモジュール106は、パラメータwnの値をwn=wn+dwnとして更新する。パラメータwnは対象行が更新されるたびにゼロに初期化される(ステップS402)から、パラメータwnは、対象行を基準点(この例では左端点)から1画素ずつ順番に、巻き数変化量dwnを積算した値である。
図15は、巻き数wnの変化を例示する図である。図15(A)は、輪郭が描画されたビットマップデータの一部を示す。この例では、4本の輪郭線が描かれている。マトリクスの上部に記載されている矢印は、輪郭線の向きを示している。図15(B)は、図15(A)のビットマップデータのうち上から2行目の画素の巻き数の変化を示している。処理の始点(左端点)においては巻き数wnの初期値としてゼロが与えられる。1画素ずつ右に向かって処理され、輪郭線が現れるたびにその向きに応じて巻き数が増加または減少する。
再び図14を参照する。ステップS409において、塗り潰しモジュール106は、画素を塗り潰す条件が満たされたか判断する。ここでは、画素を塗り潰す条件として、巻き数wnとストロークstrokeの値が、(wn,stroke)=(0,0)以外であるという条件が用いられる。画素を塗り潰す条件が満たされたと判断された場合(S409:YES)、塗り潰しモジュール106は、処理をステップS410に移行する。画素を塗り潰す条件が満たされていないと判断された場合(S409:NO)、塗り潰しモジュール106は、処理をステップS411に移行する。
ステップS410において、塗り潰しモジュール106は、対象画素を塗り潰す。すなわち、対象画素の階調(カラー表示の場合、各色要素の階調)を指定された値にする。
ステップS411において、塗り潰しモジュール106は、パラメータxをx=x+1として更新する。これにより対象行が更新される。対象行を更新すると、塗り潰しモジュール106は、処理をステップS404に移行する。
以上の処理により、ワークメモリ105に記憶された輪郭線のビットマップデータの内部は塗りつぶされる。塗り潰しモジュール106は、こうして生成されたデータを、バスインターフェースモジュール107およびバス80を介してVRAM50に転送する。塗り潰し処理が完了すると、フォントプロセッサ100は、塗り潰し処理の完了をCPU10に通知する。
2−4.実施形態の効果
以上で説明したように本実施形態によれば、レンダリングメモリにおけるグリフが占める部分、すなわち水平方向および垂直方向の最大値および最小値が、グリフが描画されるたびに逐一、動的に計算される。この計算はハードウェアで、後段への出力と並列で行われるので、計算に必要な時間すなわちこの計算による後段への出力の遅延は実質的にゼロである。
以上で説明したように本実施形態によれば、レンダリングメモリにおけるグリフが占める部分、すなわち水平方向および垂直方向の最大値および最小値が、グリフが描画されるたびに逐一、動的に計算される。この計算はハードウェアで、後段への出力と並列で行われるので、計算に必要な時間すなわちこの計算による後段への出力の遅延は実質的にゼロである。
B.第2実施形態
続いて、本発明の第2実施形態について説明する。第1実施形態では、情報表示装置1の電源制御について特に言及しなかったが、第2実施形態においては最大値および支障地の計算と情報表示装置1の電源制御とを組み合わせた動作について説明する。さらに、第1実施形態では、1つ(1文字)のグリフが描画される例について説明したが、第2実施形態では、複数のグリフが描画される例について説明する。以下において、第1実施形態と共通する事項および要素については説明を省略する。
続いて、本発明の第2実施形態について説明する。第1実施形態では、情報表示装置1の電源制御について特に言及しなかったが、第2実施形態においては最大値および支障地の計算と情報表示装置1の電源制御とを組み合わせた動作について説明する。さらに、第1実施形態では、1つ(1文字)のグリフが描画される例について説明したが、第2実施形態では、複数のグリフが描画される例について説明する。以下において、第1実施形態と共通する事項および要素については説明を省略する。
図16は、第2実施形態に係る情報表示装置2の構成を示す図である。情報表示装置2において、フォントプロセッサ100に代わりフォントプロセッサ500が用いられる。フォントプロセッサ500の詳細は後述する。電源400は、情報表示装置2の構成要素に電力を供給する装置、例えば電池である。電源制御回路200は、CPU10またはフォントプロセッサ500の制御下で、情報表示装置2の構成要素に対する、電源400からの電力の供給を開始または停止させる。以下、ある構成要素に対し電力の供給を開始することを「電源をオンする」といい、電力の供給を停止することを「電源をオフする」という。NVRAM(Non-Volatile Random Access Memory)300は、種々のデータを記憶する、不揮発性の記憶装置である。
図17は、フォントプロセッサ500の構成を示す図である。メモリコントローラ501は、CPU10の制御下でメモリにアクセスする。ここで、「メモリ」とは、ROM20、RAM30、ワークメモリ105、NVRAM300など複数の記憶装置を包括する概念である。これらの記憶装置は物理的には別の装置として構成されているが、単一のメモリ空間を構成する。メモリ空間におけるデータの記憶位置はアドレスにより一意に特定される。ROM20は、各々がグリフの描画の命令を示し、順番に実行される複数の描画命令を記憶する第1の記憶領域として機能する。ワークメモリ105は、2次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶する第2の記憶領域として機能する。この例で、ワークメモリ105は不揮発性の記憶装置である。NVRAM300は、各々が前記2次元座標系における座標の最大値および最小値を含む複数のデータセットを記憶する第3の記憶領域として機能する。
図18は、情報表示装置2のメモリマップを例示する図である。図18には、記憶領域を示すアドレス、そのアドレスで指定される領域に記憶されるデータの内容、および各記憶領域の機能が示されている。説明の便宜上アドレスは10進数で示されている。
アドレス1000番地から1999番地までの記憶領域は、描画命令格納RAMすなわち第1の記憶領域である。アドレス1000番地−1002番地には、命令DrawChar2000、DrawChar2100およびDrawChar2200が記憶されている。これらは、それぞれグリフ「A」、「B」および「C」を描画させる命令である。アドレス1003番地には、命令Finishが記憶されている。これは、グリフの描画を終了させる命令である。
アドレス2000番地から2999番地までの記憶領域は、グリフデータ格納ROMである。「A」、「B」および「C」のグリフデータを含め、その他複数のグリフデータが記憶される。
アドレス3000番地から3999番地までの記憶領域は、最大値・最小値格納NVRAMすなわち第3の記憶領域である。アドレス3000、3001、3002および3003番地には、グリフ「A」のx方向の最小値、x方向の最大値、y方向の最小値およびy方向の最大値が記憶されている。2次元座標系が用いられるので、2つの座標軸の最大値および最小値の計4つの値が、グリフ「A」の最大値および最小値を含むデータセットを構成する。以下、グリフ「B」および「C」についても同様である。
アドレス4000番地以降の記憶領域は、フレームバッファ(レンダリング用NVRAM)すなわち第2の記憶領域である。ここには複数の画素のデータが記憶される。
図19は、レジスタ102の詳細を説明する図である。レジスタ102は、詳細には少なくとも以下の4つのレジスタを有する。レジスタCmdAdrs(第1のレジスタの一例)は、次に実行すべき命令が記憶されているアドレスを記憶する。レジスタCmdRunは、命令の実行開始すなわちフォントプロセッサ500を起動させるフラグを記憶する。レジスタCmdRunの値が「0」である間、フォントプロセッサ500はグリフの描画に関する処理を行わず、レジスタCmdRunに「1」が書き込まれると、フォントプロセッサ500は起動する。レジスタMinMaxMode(第4のレジスタの一例)は、最大値・最小値出力モード、すなわち最大値および最小値の出力を行うかを示すフラグを記憶する。レジスタMinMaxModeに「0」が記憶されている場合は最大値および最小値の出力が行われず、レジスタMinMaxModeに「1」が記憶されている場合は最大値および最小値の出力が行われる。レジスタMinMaxAdrs(第2のレジスタの一例)は、最大値または最小値の出力先のアドレス、すなわち次に最大値または最小値を記憶すべきアドレスを記憶する。
図20は、フォントプロセッサ500が実行可能な命令を示す図である。命令DrawCharは、引数SrcAdrsとともに用いられる。命令DrawCharが与えられると、フォントプロセッサ500は、アドレスSrcAdrsに記憶されている1文字分のグリフデータを読み出し、読み出したグリフデータに従ってグリフを描画する。このとき、レジスタMinMaxModeに「1」が記憶されていれば、フォントプロセッサ500は、そのグリフに関する最大値および最小値を、レジスタMinMaxAdrsに記憶されているアドレスで指定される記憶領域に書き込む。さらにフォントプロセッサ500は、レジスタMinMaxAdrsの値に4を加算し、次に最大値または最小値を記憶すべきアドレスを示すように更新する。命令Finishは、フォントプロセッサ500に命令の実行を終了させる命令である。命令Finishは、さらに、フォントプロセッサ500の電源をオフさせる信号を、電源制御回路200に出力させる命令である。フォントプロセッサ500はこれ以外の命令(例えば第1実施形態で説明したDrawCharFill)も実行可能であるが、ここではその説明を省略する。
図21は、情報表示装置2の動作を示すフローチャートである。図21は、特に、複数のグリフに関する最大値および最小値を取得する際のCPU10の処理を示している。図21のフローは、例えば、入力装置70を介して複数のグリフ(例えば、グリフ「A」、「B」および「C」の3つのグリフ)を描画する指示が入力されたことを契機として開始される。
ステップS500において、CPU10は、メモリ上の所定の記憶領域に、複数のグリフを描画させる命令を書き込む。この例では、図18に示されるように、1000番地から始まる領域に、DrawChar2000、DrawChar2100、DrawChar2200およびFinishの4つの命令が書き込まれる。
ステップS510において、CPU10は、フォントプロセッサ500のレジスタCmdAdrsに、ステップS500で命令を書き込んだアドレスを書き込む。この例では、レジスタCmdAdrsに「1000」が書き込まれる。
ステップS520において、CPU10は、フォントプロセッサ500のレジスタMinMaxModeに「1」を書き込む。
ステップS530において、CPU10は、フォントプロセッサ500のレジスタMinMaxAdrsに最大値・最小値格納NVRAMの先頭アドレスを書き込む。この例では、レジスタMinMaxAdrsに「3000」が書き込まれる。
ステップS540において、CPU10は、フォントプロセッサ500のレジスタCmdRunに「1」を書き込む。レジスタCmdRunに「1」が書き込まれると、フォントプロセッサ500は起動し、後述する処理を実行する。
ステップS510において、CPU10は、フォントプロセッサ500のレジスタCmdAdrsに、ステップS500で命令を書き込んだアドレスを書き込む。この例では、レジスタCmdAdrsに「1000」が書き込まれる。
ステップS520において、CPU10は、フォントプロセッサ500のレジスタMinMaxModeに「1」を書き込む。
ステップS530において、CPU10は、フォントプロセッサ500のレジスタMinMaxAdrsに最大値・最小値格納NVRAMの先頭アドレスを書き込む。この例では、レジスタMinMaxAdrsに「3000」が書き込まれる。
ステップS540において、CPU10は、フォントプロセッサ500のレジスタCmdRunに「1」を書き込む。レジスタCmdRunに「1」が書き込まれると、フォントプロセッサ500は起動し、後述する処理を実行する。
ステップS550において、CPU10は、CPU10の電源をオフさせる命令を示す信号を、電源制御回路200に出力する。この信号を受け取ると、ステップS560において、電源制御回路200は、CPU10への電力の供給を停止する。
ステップS570において、電源再投入イベント、例えばユーザがページ送りボタンを押したというイベントが発生すると、ステップS580において、電源制御回路200は、CPU10への電力の供給を開始する。この例で電源制御回路200は電源再投入イベントの発生を監視しており、電源再投入イベントが発生したことを契機としてCPU10の電源をオンする。
ステップS570において、電源再投入イベント、例えばユーザがページ送りボタンを押したというイベントが発生すると、ステップS580において、電源制御回路200は、CPU10への電力の供給を開始する。この例で電源制御回路200は電源再投入イベントの発生を監視しており、電源再投入イベントが発生したことを契機としてCPU10の電源をオンする。
電源がオンされると、ステップS590において、CPU10は、最大値・最小値格納NVRAMから、ステップS500で命令した文字数分の最大値および最小値を取得する。この例では、CPU10は、最大値・最小値格納NVRAMから3文字分のデータセットを読み出す。読み出されたデータセットは、プログラムで要求される処理、例えば、グリフ部分以外の背景領域の画像処理を行う際のパラメータとして用いられる。
図22は、フォントプロセッサ500の動作を示すフローチャートである。図22のフローは、図21のステップS540においてレジスタCmdRunに「1」が書き込まれたことを契機として開始される。
ステップS601において、フォントプロセッサ500のメインコントローラ101は、レジスタCmdAdrsに記憶されているアドレスにより指定される記憶領域から、1つの命令を読み出す。
ステップS602において、メインコントローラ101は、レジスタCmdAdrsに記憶されているアドレスに1を加算し、更新する。
ステップS603において、メインコントローラ101は読み出した命令に応じて処理を分岐する。命令がFinishであった場合(S603:Finish)、メインコントローラ101は、図22のフローを終了する。図22のフローを終了するとき、メインコントローラ101は、処理の終了をCPU10に通知する。命令がDrawCharであった場合(S603:DrawChar)、メインコントローラ101は、処理をステップS604に移行する。その他の命令が与えられた場合(S603:その他)、メインコントローラ101は、処理をステップS615に移行する。
ステップS602において、メインコントローラ101は、レジスタCmdAdrsに記憶されているアドレスに1を加算し、更新する。
ステップS603において、メインコントローラ101は読み出した命令に応じて処理を分岐する。命令がFinishであった場合(S603:Finish)、メインコントローラ101は、図22のフローを終了する。図22のフローを終了するとき、メインコントローラ101は、処理の終了をCPU10に通知する。命令がDrawCharであった場合(S603:DrawChar)、メインコントローラ101は、処理をステップS604に移行する。その他の命令が与えられた場合(S603:その他)、メインコントローラ101は、処理をステップS615に移行する。
ステップS604において、メインコントローラ101は、命令DrawCharの引数SrcAdrsにより指定される記憶領域から、グリフデータを読み出す。
ステップS605において、メインコントローラ101は、輪郭計算モジュール110・描画位置計算モジュール111・輪郭描画モジュール104を制御し、最大値および最小値を計算させながら、フレームバッファにグリフを描画する。この処理の詳細は、第1実施形態で説明したとおりである。最大値および最小値は、レジスタ112に記憶される。メインコントローラ101は、1つのグリフ(文字)について処理が完了すると、レジスタ112を初期化する。すなわち、レジスタ112は、1つのグリフについて処理が開始されてから終了するまでの最大値および最小値を記憶する。
ステップS605において、メインコントローラ101は、輪郭計算モジュール110・描画位置計算モジュール111・輪郭描画モジュール104を制御し、最大値および最小値を計算させながら、フレームバッファにグリフを描画する。この処理の詳細は、第1実施形態で説明したとおりである。最大値および最小値は、レジスタ112に記憶される。メインコントローラ101は、1つのグリフ(文字)について処理が完了すると、レジスタ112を初期化する。すなわち、レジスタ112は、1つのグリフについて処理が開始されてから終了するまでの最大値および最小値を記憶する。
ステップS606において、メインコントローラ101は、レジスタMinMaxModeの値が「1」であるか、すなわち最大値および最小値の出力を行うように設定されているか判断する。レジスタMinMaxModeの値が「1」である場合(S606:YES)、メインコントローラ101は、処理をステップS607に移行する。レジスタMinMaxModeの値が「1」でない場合(S606:NO)、メインコントローラ101は、処理をステップS601に移行する。
ステップS607において、メインコントローラ101は、レジスタMinMaxAdrsに記憶されているアドレスにより指定される記憶領域に、x方向の最小値を書き込む。ステップS608において、メインコントローラ101は、レジスタMinMaxAdrsに記憶されているアドレスに1を加算し、更新する。ステップS609において、メインコントローラ101は、レジスタMinMaxAdrsに記憶されているアドレスにより指定される記憶領域に、x方向の最大値を書き込む。ステップS610において、メインコントローラ101は、レジスタMinMaxAdrsに記憶されているアドレスに1を加算し、更新する。ステップS611において、メインコントローラ101は、レジスタMinMaxAdrsに記憶されているアドレスにより指定される記憶領域に、y方向の最小値を書き込む。ステップS612において、メインコントローラ101は、レジスタMinMaxAdrsに記憶されているアドレスに1を加算し、更新する。ステップS613において、メインコントローラ101は、レジスタMinMaxAdrsに記憶されているアドレスにより指定される記憶領域に、y方向の最大値を書き込む。ステップS614において、メインコントローラ101は、レジスタMinMaxAdrsに記憶されているアドレスに1を加算し、更新する。ステップS614の処理を終えると、メインコントローラ101は、処理をステップS601に移行する。
ステップS615に応じて、メインコントローラ101は、その命令に応じた処理を行う。例えば、命令DrawCharFillが与えられた場合、メインコントローラ101は、第1実施形態で説明した処理を行う。
以上で説明したように、本実施形態によれば、CPU10およびメモリに対する電力の供給が停止されても、情報表示装置2は、計算された最大値および最小値を保持することができる。また、CPU10がフォントプロセッサ500に、複数のグリフを描画する命令をまとめて与えた場合でも、CPU10は、複数の文字分の最大値および最小値を取得することができる。第1実施形態に説明したように単に最大値および最小値をレジスタに記憶しているだけでは、複数の複数のグリフを描画する命令をまとめて与えた場合にCPU10が取得できるのは、一番最後に描画されたグリフに関する最大値および最小値のみである。
C.他の実施形態
本発明は上述の実施形態に限定されるものではなく種々の変形実施が可能である。以下、変形例をいくつか説明する。変形例の説明において実施形態と共通する要素には共通の参照符号が用いられる。以下で説明する変形例のうち2つ以上のものが組み合わせて用いられてもよい。また、第1実施形態、第2実施形態および変形例に含まれる事項がそれぞれ組み合わせて用いられてもよい。
本発明は上述の実施形態に限定されるものではなく種々の変形実施が可能である。以下、変形例をいくつか説明する。変形例の説明において実施形態と共通する要素には共通の参照符号が用いられる。以下で説明する変形例のうち2つ以上のものが組み合わせて用いられてもよい。また、第1実施形態、第2実施形態および変形例に含まれる事項がそれぞれ組み合わせて用いられてもよい。
1.変形例1
メモリの記憶領域と物理的な記憶装置との対応関係は、第2実施形態で説明したものに限定されない。実施形態で説明した第1−第3の記憶領域を全体として有し、アドレスによって一意に特定可能な記憶領域を有するのであれば、物理的にはどのような記憶装置が用いられてもよい。また、第2実施形態において、レジスタ102が図19に示される4つのレジスタとしての機能を兼ね備えていたが、これら4つのレジスタの機能はそれぞれ別のレジスタにより実装されてもよい。さらに、第1実施形態の情報表示装置2がNVRAM300を有していてもよい。
メモリの記憶領域と物理的な記憶装置との対応関係は、第2実施形態で説明したものに限定されない。実施形態で説明した第1−第3の記憶領域を全体として有し、アドレスによって一意に特定可能な記憶領域を有するのであれば、物理的にはどのような記憶装置が用いられてもよい。また、第2実施形態において、レジスタ102が図19に示される4つのレジスタとしての機能を兼ね備えていたが、これら4つのレジスタの機能はそれぞれ別のレジスタにより実装されてもよい。さらに、第1実施形態の情報表示装置2がNVRAM300を有していてもよい。
2.変形例2
第2実施形態において、フォントプロセッサ500は、メモリコントローラ501を内蔵していなくてもよい。メモリコントローラ501は、第2実施形態において、メモリにアクセスするメモリアクセス手段として機能していた。フォントプロセッサ500がメモリコントローラ501を内蔵しない場合、フォントプロセッサ500の外部にメモリコントローラ501が設けられる。この場合でも、フォントプロセッサ500は、バスインターフェースモジュール107・バス80・メモリコントローラ501を介してメモリにアクセス可能であるので、バスインターフェースモジュール107がメモリアクセス手段としての機能を有している。
第2実施形態において、フォントプロセッサ500は、メモリコントローラ501を内蔵していなくてもよい。メモリコントローラ501は、第2実施形態において、メモリにアクセスするメモリアクセス手段として機能していた。フォントプロセッサ500がメモリコントローラ501を内蔵しない場合、フォントプロセッサ500の外部にメモリコントローラ501が設けられる。この場合でも、フォントプロセッサ500は、バスインターフェースモジュール107・バス80・メモリコントローラ501を介してメモリにアクセス可能であるので、バスインターフェースモジュール107がメモリアクセス手段としての機能を有している。
3.変形例3
第2実施形態において、メインコントローラ101が、最大最小書き込み手段および更新手段としての機能を兼ね備えていた。最大最小更新手段は、1つのグリフについて輪郭描画処理が完了すると、第2のレジスタに記憶されているアドレスで指定される記憶領域に、第3のレジスタに記憶されている最大値または最小値を、メモリアクセス手段を介して書き込む書き込み処理を行う。更新手段は、書き込み処理が終了すると、第2のレジスタに記憶されているアドレスを更新する。これらの機能は、それぞれ別のモジュールにより実行されてもよい。
第2実施形態において、メインコントローラ101が、最大最小書き込み手段および更新手段としての機能を兼ね備えていた。最大最小更新手段は、1つのグリフについて輪郭描画処理が完了すると、第2のレジスタに記憶されているアドレスで指定される記憶領域に、第3のレジスタに記憶されている最大値または最小値を、メモリアクセス手段を介して書き込む書き込み処理を行う。更新手段は、書き込み処理が終了すると、第2のレジスタに記憶されているアドレスを更新する。これらの機能は、それぞれ別のモジュールにより実行されてもよい。
4.変形例4
複数の最大値および最小値をメモリに書き込む処理は、図22に示されるものに限定されない。最終的にx方向およびy方向それぞれの、最大値および最小値をメモリに書き込むものであれば、データを書き込む順番はどのようなものでもよい。
複数の最大値および最小値をメモリに書き込む処理は、図22に示されるものに限定されない。最終的にx方向およびy方向それぞれの、最大値および最小値をメモリに書き込むものであれば、データを書き込む順番はどのようなものでもよい。
5.変形例5
第2実施形態においてフォントプロセッサ500が有するレジスタの内容は、図19に示されるものに限定されない。例えば、フォントプロセッサ500は、レジスタCmdRunを有していなくてもよい。この場合、フォントプロセッサ500は、レジスタCmdRunに「1」が書き込まれたというイベント以外のイベントを契機として起動される。また、フォントプロセッサ500は、レジスタMinMaxModeを有していなくてもよい。この場合、フォントプロセッサ500は、常に最大値および最小値の出力を行う。
第2実施形態においてフォントプロセッサ500が有するレジスタの内容は、図19に示されるものに限定されない。例えば、フォントプロセッサ500は、レジスタCmdRunを有していなくてもよい。この場合、フォントプロセッサ500は、レジスタCmdRunに「1」が書き込まれたというイベント以外のイベントを契機として起動される。また、フォントプロセッサ500は、レジスタMinMaxModeを有していなくてもよい。この場合、フォントプロセッサ500は、常に最大値および最小値の出力を行う。
6.変形例6
グリフデータの形式は、図4で説明したものに限定されない。Move、Line、Curve2、Curve3、EOC以外の命令が用いられてもよい。曲線を記述する関数として、4次以上の高次のベジェ曲線が用いられてもよいし、ベジェ曲線以外の曲線が用いられてもよい。要は、グリフの輪郭および前記輪郭の向きを示すものであれば、どのような形式のデータが用いられてもよい。また、実施形態では、複合グリフが2つのパーツグリフから構成される例を説明したが、複合グリフは3つ以上のパーツグリフを含んでいてもよい。また、パーツグリフが複合グリフであってもよい。
グリフデータの形式は、図4で説明したものに限定されない。Move、Line、Curve2、Curve3、EOC以外の命令が用いられてもよい。曲線を記述する関数として、4次以上の高次のベジェ曲線が用いられてもよいし、ベジェ曲線以外の曲線が用いられてもよい。要は、グリフの輪郭および前記輪郭の向きを示すものであれば、どのような形式のデータが用いられてもよい。また、実施形態では、複合グリフが2つのパーツグリフから構成される例を説明したが、複合グリフは3つ以上のパーツグリフを含んでいてもよい。また、パーツグリフが複合グリフであってもよい。
7.変形例7
輪郭線の向きに応じて増減するパラメータは、実施形態で説明した巻き数wnに限定されない。巻き数wnは輪郭線の向きに応じて1ずつ増減するパラメータであったが、増減の単位は1でなくてもよい。また、実施形態では対象行を決めて、対象行について1画素ずつ横方向に処理を進める例を説明したが、処理の順序はこれに限定されない。対象列を決め、対象列について1画素ずつ縦方向に処理を進める構成としてもよい。この場合、巻き数変化量dwnは、輪郭線が右から左に向いている場合、輪郭線が鉛直方向を向いている場合、輪郭線が左から右に向いている場合で異なる。要は、輪郭線の向きに応じて増減するパラメータは、画素のマトリクスの1つの行または1つの列を対象線とし、対象線に沿って一画素ずつ処理していったときに、対象線と輪郭線とが交わる向きに応じて増減するものであれば、どのようなパラメータが用いられてもよい。さらに、このパラメータを用いて画素を塗り潰すか塗り潰さないかが決定されるのであれば、どのような処理が塗り潰し処理として用いられてもよい。
輪郭線の向きに応じて増減するパラメータは、実施形態で説明した巻き数wnに限定されない。巻き数wnは輪郭線の向きに応じて1ずつ増減するパラメータであったが、増減の単位は1でなくてもよい。また、実施形態では対象行を決めて、対象行について1画素ずつ横方向に処理を進める例を説明したが、処理の順序はこれに限定されない。対象列を決め、対象列について1画素ずつ縦方向に処理を進める構成としてもよい。この場合、巻き数変化量dwnは、輪郭線が右から左に向いている場合、輪郭線が鉛直方向を向いている場合、輪郭線が左から右に向いている場合で異なる。要は、輪郭線の向きに応じて増減するパラメータは、画素のマトリクスの1つの行または1つの列を対象線とし、対象線に沿って一画素ずつ処理していったときに、対象線と輪郭線とが交わる向きに応じて増減するものであれば、どのようなパラメータが用いられてもよい。さらに、このパラメータを用いて画素を塗り潰すか塗り潰さないかが決定されるのであれば、どのような処理が塗り潰し処理として用いられてもよい。
8.変形例8
実施形態において、輪郭計算処理、描画位置計算処理、および輪郭描画処理は、それぞれ異なるモジュールにより実行された。しかし、単一のモジュールまたはプロセッサが、複数の処理を行う機能を有していてもよい。あるいは、複数のモジュールまたはプロセッサの集合が全体として、単一の処理を行う機能を有していてもよい。
また、実施形態において、レジスタ112は、描画位置計算モジュール111の外部に設けられていた。しかし、描画位置計算モジュール111がレジスタ112を内蔵する構成であってもよい。あるいは、最大最小更新モジュール214がレジスタ112を内蔵する構成であってもよい。
さらに、スタックの記憶領域はその機能を発揮できる限りにおいてどの記憶装置上に設けられてもよい。
実施形態において、輪郭計算処理、描画位置計算処理、および輪郭描画処理は、それぞれ異なるモジュールにより実行された。しかし、単一のモジュールまたはプロセッサが、複数の処理を行う機能を有していてもよい。あるいは、複数のモジュールまたはプロセッサの集合が全体として、単一の処理を行う機能を有していてもよい。
また、実施形態において、レジスタ112は、描画位置計算モジュール111の外部に設けられていた。しかし、描画位置計算モジュール111がレジスタ112を内蔵する構成であってもよい。あるいは、最大最小更新モジュール214がレジスタ112を内蔵する構成であってもよい。
さらに、スタックの記憶領域はその機能を発揮できる限りにおいてどの記憶装置上に設けられてもよい。
9.変形例9
第2実施形態において、電源再投入イベントを監視する監視手段としての機能は、電源制御回路200以外のハードウェア要素が有していてもよい。この場合、監視手段として機能するハードウェアは、電源再投入イベントが発生したことを電源制御回路200に通知する。
第2実施形態において、電源再投入イベントを監視する監視手段としての機能は、電源制御回路200以外のハードウェア要素が有していてもよい。この場合、監視手段として機能するハードウェアは、電源再投入イベントが発生したことを電源制御回路200に通知する。
10.変形例10
第1実施形態では、情報表示装置の電源管理機能について説明しなかったが、情報表示装置1が、第2実施形態で説明したような電源管理機能を有していてもよい。また、情報表示装置1は、NVRAM300を有していてもよい。この場合、第1実施形態においてRAM30に記憶されているものとして説明したデータの一部または全部が、NVRAM300に記憶されてもよい。さらに、第2実施形態では、複数のグリフが描画される例について説明したが、単一のグリフが描画されてもよい。すなわち、第1の記憶領域に記憶される描画命令は1つであってもよい。
第1実施形態では、情報表示装置の電源管理機能について説明しなかったが、情報表示装置1が、第2実施形態で説明したような電源管理機能を有していてもよい。また、情報表示装置1は、NVRAM300を有していてもよい。この場合、第1実施形態においてRAM30に記憶されているものとして説明したデータの一部または全部が、NVRAM300に記憶されてもよい。さらに、第2実施形態では、複数のグリフが描画される例について説明したが、単一のグリフが描画されてもよい。すなわち、第1の記憶領域に記憶される描画命令は1つであってもよい。
11.他の変形例
情報表示装置のハードウェア構成は図1および図16に示されるものに限定されない。必要な機能構成を実現できるものであれば、どのようなハードウェア構成を有する装置が用いられてもよい。フォントプロセッサ100についても同様である。また上述の実施形態では情報表示装置1が電子ペーパである例について説明したが、必要な機能を有するものであれば、パーソナルコンピュータ、PDA(Personal Digital Assistant)、携帯電話機、印刷装置など電子ペーパ以外の装置であってもよい。実施形態において情報表示装置1は表示装置(表示体107)を内蔵していたが、表示装置は外付けであってもよい。
情報表示装置のハードウェア構成は図1および図16に示されるものに限定されない。必要な機能構成を実現できるものであれば、どのようなハードウェア構成を有する装置が用いられてもよい。フォントプロセッサ100についても同様である。また上述の実施形態では情報表示装置1が電子ペーパである例について説明したが、必要な機能を有するものであれば、パーソナルコンピュータ、PDA(Personal Digital Assistant)、携帯電話機、印刷装置など電子ペーパ以外の装置であってもよい。実施形態において情報表示装置1は表示装置(表示体107)を内蔵していたが、表示装置は外付けであってもよい。
上述の実施形態においてCPU10によって実行されるプログラムは、磁気記録媒体(磁気テープ、磁気ディスク(HDD(Hard Disk Drive)、FD(Flexible Disk))など)、光記録媒体(光ディスク(CD(Compact Disk)、DVD(Digital Versatile Disk))など)、光磁気記録媒体、半導体メモリ(フラッシュROMなど)などのコンピュータ読取り可能な記録媒体に記憶した状態で提供されてもよい。また、このプログラムは、インターネットのようなネットワーク経由でダウンロードされてもよい。
1…情報表示装置、2…情報表示装置、10…CPU、20…ROM、30…RAM、40…表示体、50…VRAM、60…表示制御装置、70…入力装置、80…バス、90…バスコントローラ、100…フォントプロセッサ、101…メインコントローラ、102…レジスタ、103…フォント描画コントローラ、104…輪郭描画モジュール、105…ワークメモリ、106…塗り潰しモジュール、107…バスインターフェースモジュール、108…メインバス、109…サブバス、110…輪郭計算モジュール、111…描画位置計算モジュール、112…レジスタ、200…電源制御回路、201…セレクタ、202…ラッチ、203…セレクタ、204…加算器、205…ラッチ、206…ラッチ、207…セレクタ、208…セレクタ、209…加算器、210…ラッチ、211…ラッチ、212…セレクタ、213…クリッピングモジュール、214…最大最小更新モジュール、215…クリッピングモジュール、216…最大最小更新モジュール、217…OR回路、218…セレクタ、300…NVRAM、301…減算器、302…セレクタ、303…減算器、304…セレクタ、305…セレクタ、306…セレクタ、307…OR回路、400…電源、401…減算器、402…セレクタ、403…減算器、404…セレクタ、500…フォントプロセッサ、501…メモリコントローラ
Claims (3)
- グリフの描画命令を記憶する第1の記憶領域と、2次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶する第2の記憶領域と、各々が前記2次元座標系における座標の最大値および最小値を含む複数のデータセットを記憶する第3の記憶領域とを有し、少なくとも前記第2の記憶領域および前記第3の記憶領域が不揮発性であるメモリと、
前記メモリにアクセスするメモリアクセス手段と、前記第1の記憶領域のうち描画命令が記憶されているアドレスを記憶する第1のレジスタと、前記第3の記憶領域のうち次に最大値または最小値を記憶すべきアドレスを記憶する第2のレジスタと、前記複数の描画命令のうち前記第1のレジスタに記憶されているアドレスで指定される前記メモリ上の領域に記憶されている描画命令により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、前記2次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、1つのグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する第3のレジスタと、前記描画位置計算手段により計算された描画位置としての座標と前記第3のレジスタに記憶されている最大値および最小値とを比較し、比較結果により前記第3のレジスタに記憶された最大値または最小値を更新する最大最小更新手段と、前記第2の記憶領域のうち前記描画位置により特定される画素のデータを記憶する領域に、前記輪郭線が通る画素であることを示すデータを書き込む輪郭描画処理を行う輪郭描画手段と、1つのグリフについて前記輪郭描画処理が完了すると、前記第2のレジスタに記憶されているアドレスで指定される記憶領域に、前記第3のレジスタに記憶されている最大値または最小値を、前記メモリアクセス手段を介して書き込む書き込み処理を行う最大最小書き込み手段と、前記書き込み処理が終了すると、前記第2のレジスタに記憶されているアドレスを更新する更新手段とを有するフォント描画装置と、
前記フォント描画装置を制御する制御装置と、
前記フォント描画装置に電力を供給する電源制御回路と、
を有し、
前記制御装置は、前記メモリの前記第1の記憶領域に、前記複数の描画命令を書き込み、前記第1のレジスタに、前記複数の描画命令の先頭位置を示すアドレスを書き込み、前記第2のレジスタに、前記第3の記憶領域の先頭位置を示すアドレスを書き込み、
前記制御装置は、前記メモリ、前記第1のレジスタおよび前記第2のレジスタに対して書き込みを行った後で、前記フォント描画装置を起動し、
前記電源制御回路は、前記フォント描画装置が起動されると、前記制御装置および前記メモリへの電力の供給を停止させる
ことを特徴とする情報処理装置。 - 前記フォント描画装置は、前記第1の記憶領域に記憶された命令の実行が終了すると、前記フォント描画装置への電力の供給を停止させる信号を前記電源制御回路に出力する
ことを特徴とする請求項1に記載の情報処理装置。 - グリフの描画命令を記憶する第1の記憶領域と、2次元座標系を用いて各画素の位置が特定される複数の画素のデータを記憶する第2の記憶領域と、各々が前記2次元座標系における座標の最大値および最小値を含む複数のデータセットを記憶する第3の記憶領域とを有し、少なくとも前記第2の記憶領域および前記第3の記憶領域が不揮発性であるメモリと、
前記メモリにアクセスするメモリアクセス手段と、前記第1の記憶領域のうち描画命令が記憶されているアドレスを記憶する第1のレジスタと、前記第3の記憶領域のうち次に最大値または最小値を記憶すべきアドレスを記憶する第2のレジスタと、前記複数の描画命令のうち前記第1のレジスタに記憶されているアドレスで指定される前記メモリ上の領域に記憶されている描画命令により描画が指示されたグリフの輪郭線を示すグリフデータを用いて、前記グリフの輪郭線が通過する画素を対象画素として特定する輪郭計算手段と、前記2次元座標系における前記対象画素の座標を描画位置として計算する描画位置計算手段と、1つのグリフについて処理を開始してから終了するまでの間に前記対象画素として特定された画素の、前記描画位置としての座標の最大値および最小値を記憶する第3のレジスタと、前記描画位置計算手段により計算された描画位置としての座標と前記第3のレジスタに記憶されている最大値および最小値とを比較し、比較結果により前記第3のレジスタに記憶された最大値または最小値を更新する最大最小更新手段と、前記第2の記憶領域のうち前記描画位置により特定される画素のデータを記憶する領域に、前記輪郭線が通る画素であることを示すデータを書き込む輪郭描画処理を行う輪郭描画手段と、1つのグリフについて前記輪郭描画処理が完了すると、前記第2のレジスタに記憶されているアドレスで指定される記憶領域に、前記第3のレジスタに記憶されている最大値または最小値を、前記メモリアクセス手段を介して書き込む書き込み処理を行う最大最小書き込み手段と、前記書き込み処理が終了すると、前記第2のレジスタに記憶されているアドレスを更新する更新手段とを有するフォント描画装置と、
前記フォント描画装置を制御する制御装置と、
前記フォント描画装置に電源を供給する電源制御回路と、
を有する情報処理装置の制御方法であって、
前記制御装置が、前記メモリの前記第1の記憶領域に、前記複数の描画命令を書き込むステップと、
前記制御装置が、前記第1のレジスタに、前記複数の描画命令の先頭位置を示すアドレスを書き込むステップと、
前記制御装置が、前記第2のレジスタに、前記第3の記憶領域の先頭位置を示すアドレスを書き込むステップと、
前記制御装置が、前記メモリ、前記第1のレジスタおよび前記第2のレジスタに対して書き込みを行った後で、前記フォント描画装置を起動するステップと、
前記電源制御回路が、前記フォント描画装置が起動されると、前記制御装置および前記メモリへの電力の供給を停止させるステップと
を有する制御方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008115856A JP2009265414A (ja) | 2008-04-25 | 2008-04-25 | 情報処理装置および制御方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008115856A JP2009265414A (ja) | 2008-04-25 | 2008-04-25 | 情報処理装置および制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009265414A true JP2009265414A (ja) | 2009-11-12 |
Family
ID=41391331
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008115856A Pending JP2009265414A (ja) | 2008-04-25 | 2008-04-25 | 情報処理装置および制御方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009265414A (ja) |
-
2008
- 2008-04-25 JP JP2008115856A patent/JP2009265414A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3286331B2 (ja) | ブロックテクスチャコンプレックスクリップマスクプロセッサ | |
JPH07141202A (ja) | コンテキストを管理するシステム及び方法 | |
JPH09245179A (ja) | コンピュータグラフィックス装置 | |
JPS6141185A (ja) | 表示窓制御方法 | |
JPH0345076A (ja) | 画像データの処理方式 | |
US7898549B1 (en) | Faster clears for three-dimensional modeling applications | |
JP3791259B2 (ja) | アウトラインスムージング処理方法 | |
KR100281949B1 (ko) | 영상 드로잉 장치 | |
JP2009092759A (ja) | 描画装置、画像出力装置及びプログラム | |
US6172686B1 (en) | Graphic processor and method for displaying a plurality of figures in motion with three dimensional overlay | |
US20100238178A1 (en) | Information processing apparatus, control device, and program | |
CA1200025A (en) | Graphic and textual image generator for a raster scan display | |
JPS59172064A (ja) | ビデオ・システムにおける並列処理方式 | |
JP2009265329A (ja) | フォント描画装置および情報処理装置 | |
JP2009265414A (ja) | 情報処理装置および制御方法 | |
JP2009265413A (ja) | フォント描画装置および情報処理装置 | |
JP2009271347A (ja) | フォント描画装置および情報処理装置 | |
JPH07225849A (ja) | グラフィックスコンピュータと直線描画装置 | |
JP2001283242A (ja) | 画像処理装置および画像処理方法 | |
JP4152383B2 (ja) | ナビゲーションシステム | |
JP3337385B2 (ja) | 表示制御回路 | |
JP2011107378A (ja) | 情報処理装置および情報処理方法 | |
JP4482996B2 (ja) | データ記憶装置とその方法および画像処理装置 | |
JPS6315617B2 (ja) | ||
JP2009258381A (ja) | フォント描画装置および情報処理装置 |