本発明は、グラフィクス描画におけるアンチエイリアシングに関する。
従来から、高解像度でラスタライズされた画像を低解像度の画像に解像度変換する際に、フィルタリング処理を行うことによりアンチエイリアシングを行いベクタグラフィックスの画質を向上させる描画装置が提案されている。
この類の描画装置として、例えば、特許文献1に記載されているような描画装置が提案されている。特許文献1に記載の描画装置では、まず、図29(a)に示すように、ベクターデータから生成されステンシルデータ記憶部に記憶されている2次元形状SH1を含む第1の画像G1を表すステンシルデータと、当該2次元形状SH1のエッジ近傍に位置する画素のアルファ値を示すカバレッジデータとから、図29(b)に示すように、第1の画像G1よりも高解像度の2次元形状SH2を含む第2の画像G2を表すラスタデータを生成してラスタデータ記憶部に記憶する。次に、ラスタデータ記憶部に記憶された複数の2次元形状SH1,SH2に対応するラスタデータ同士を合成した後に、図29(c)に示すように、合成して得られたデータを第2の画像G2よりも低解像度の2次元形状SH1,SH2を含む第3の画像G3を表すデータに変換してからディスプレイ等の提示部で提示する。
ところが、特許文献1に記載された構成の描画装置では、ラスタデータ記憶部に高解像度の2次元形状SH1,SH2を含む第2の画像G2を表すラスタデータを記憶しておく必要があるため、ラスタデータ記憶部を構成するメモリの記憶容量が大きくなったり、或いは、カバレッジデータを記憶するためのカバレッジデータ記憶部を別途に設ける必要もあることから、メモリの記憶容量の増加およびメモリの数の増加を抑制することが困難であった。
これに対して、第1の画像G1に対応するステンシルデータを記憶するステンシルバッファと、第2の画像G2に対応するラスタデータ(フレームデータ)を記憶するフレームバッファと、第3の画像G3を提示するディスプレイと、適宜のプログラムを実行することによりステンシルデータやフレームデータの生成を行う機能等を実現する処理装置とを備え、図30に示すように、第2の画像G2の解像度を第3の画像G3の解像度と同じに設定し、第1の画像G1の解像度を第2の画像G2の解像度よりも高く設定した描画装置が提供されている。
この描画装置では、第2の画像G2上に2次元形状SH1を描画する際、アンチエイリアスパターンに基づいて、2次元形状SH1のエッジ部分の画素の色をぼかす形で色値を設定して、ベクターグラフィクスの画質を向上させている。例えば、アンチエイリアスパターンが第1の画像G1における縦4画素×横4画素に設定されているとすれば、第1の画像G1における縦4画素×横4画素分のステンシルデータから第2の画像G2における1画素分のフレームデータが生成される。
ところで、この描画装置では、処理装置が内部に設けられたプロセッサおよび主記憶装置を含んで構成されており、ステンシルデータやフレームデータを生成する際に、処理装置とステンシルバッファまたはフレームバッファとの間でデータ転送を行うが、処理速度の向上を図るため、処理装置とステンシルバッファまたはフレームバッファとの間のデータ転送を、1度のアクセス要求に対して所定のデータ量(以下、「メモリバンド幅」と称す。)の転送を行うバースト転送等により行っている。例えば、図31(a)に示す例では、処理装置が、ステンシルバッファに対する1度のアクセス要求で、ステンシルバッファから第1の画像Aにおける縦4画素×横4画素分のステンシルデータにアクセスして読み込む。
しかしながら、図31(a)に示す例のように、第1のアクセスパターンおよびアンチエイリアスパターンが共に第1の画像G1における縦4画素×横4画素に設定され、処理装置が、ステンシルバッファに4回アクセス要求する毎に、フレームバッファに第2の画像G2における縦4画素×横4画素(以下、「第2のアクセスパターン」と称す。)分のフレームデータを書き込むように設定されているとすると、第2の画像G2における縦1画素×横4画素分のフレームデータしか生成されていないにもかかわらず、第2の画像G2における16画素分のフレームデータを格納する記憶領域にアクセスすることになる。従って、第2のアクセスパターンに含まれる残りの縦3画素×横4画素分のフレームバッファへのアクセスが無駄となってしまう。
また、図31(b)に示す例のように、アンチエイリアスパターンだけを縦2画素×横4画素に変更した場合、処理装置が、ステンシルバッファに4回アクセス要求する毎に、フレームバッファに第2の画像G2における縦4画素×横4画素(以下、「第2のアクセスパターン」と称す。)分のフレームデータを書き込むように設定されているとすると、第2の画像G2における縦2画素×横4画素分のフレームデータしか生成されていないにも関わらず、第2の画像G2における16画素分のフレームデータを格納する記憶領域にアクセスすることになる。従って、第2のアクセスパターンに含まれる残りの縦2画素×横4画素分のフレームバッファへのアクセスが無駄となってしまう。
本発明は、上記事由に鑑みてなされたものであり、フレームバッファへのアクセス効率の向上を図ることを目的とする。
上記課題を解決するために、本構成に係るグラフィクス描画装置は、第1の画像を構成する各画素の第1の画素情報よりなるステンシルデータを記憶できるステンシルバッファと、第1の画像よりも解像度の低い第2の画像を構成する各画素の第2の画素情報よりなるフレームデータを記憶できるフレームバッファと、前記フレームデータをディスプレイに描画する描画部とを備えるグラフィクス描画装置であって、ステンシルバッファに対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、1回以上アクセスを行って前記ステンシルデータの一部を読み出すステンシルデータ読み出し部と、第1のアクセスパターンと第2の画素情報の生成に使用されるアンチエイリアスパターンとに従って、ステンシルデータの一部から所定の画素数に対応する第2の画素情報よりなるフレームデータの一部を生成するフレームデータ生成部と、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する第2のアクセスパターンを設定するアクセスパターン設定部と、フレームデータ生成部が、第2のアクセスパターンに相当する複数の第2の画素情報を生成すると、フレームバッファに対して、第2のアクセスパターンに従って、フレームデータのうち複数の第2の画素情報に相当するデータを書き込むフレームデータ書き込み部とを備えることを特徴とする。
本構成によれば、アクセスパターン設定部が、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、第2のアクセスパターンを適宜設定することにより、フレームバッファへの無駄なアクセスを抑制することができるので、フレームバッファへのアクセス効率の低下を抑制することができる。
また、本構成に係るグラフィクス描画装置は、第1のアクセスパターンが、縦方向の画素数をA個(ただし、Aは2以上の整数)、横方向の画素数をB個(ただし、Bは2以上の整数)としたことを特徴とするものであってもよい。
また、本構成に係るグラフィクス描画装置は、Aが、2N×P(ただし、NおよびPは1以上の整数)であり、且つBが、2K×Q(ただし、KおよびQは1以上の整数)であり、アンチエイリアスパターンが、縦方向の画素数を2M、横方向の画素数を2J(ただし、MおよびJは1以上の整数であり、MまたはJのいずれか一方が2以上であり、N≧M、且つ、K≧J)としてなり、第2のアクセスパターンが、縦方向の画素数を2N-MのP×R倍(ただし、Rは1以上の整数)、横方向の画素数を2K-JのQ×S倍(ただし、Sは1以上の整数)に設定されてなるとしてもよい。
本構成によれば、第1のアクセスパターン、アンチエイリアスパターンから、フレームバッファへのアクセス効率向上の点から最適な第2のアクセスパターンを決めることができる。
また、本構成に係るグラフィクス描画装置は、PおよびQが、1であり、Rが、1であり、且つ、Sが、2J+Mでもよい。
本構成によれば、ステンシルデータ読み出し部が、第1の画像に対して横方向に第1のアクセスパターンを移動させていく形でステンシルバッファにアクセスし、フレームデータ書き込み部が、第2の画像に対して横方向に第2のアクセスパターンを移動させていく形でステンシルバッファにアクセスする場合において、1回にアクセスするステンシルデータの一部の大きさに対する1回にアクセスするフレームデータの大きさの関係を固定としながらもアクセス効率の向上が図れるので、ステンシルバッファへの1回のアクセスで転送するデータ量に応じてフレームバッファへの1回のアクセスで転送するデータ量を変更するような制御が不要となるので、制御の簡素化を図ることができる。
また、本構成に係るグラフィクス描画装置は、PおよびQが、1であり、Rが、2M+Jであり、且つ、Sが、1としてもよい。
本構成によれば、ステンシルデータ読み出し部が、第1の画像に対して縦方向に第1のアクセスパターンを移動させていく形でステンシルバッファにアクセスし、フレームデータ書き込み部が、第2の画像に対して縦方向に第2のアクセスパターンを移動させていく形でステンシルバッファにアクセスする場合において、ステンシルバッファへの1回のアクセスで読みだすデータの大きさに対するフレームバッファへの1回のアクセスで書き込むデータの大きさの関係を固定としながらもアクセス効率の向上が図れるので、ステンシルバッファへの1回のアクセスで転送するデータ量に応じてフレームバッファに対して一度のアクセスするデータ量とを変更するような制御が不要となるので、制御の簡素化を図ることができる。
また、本構成に係るグラフィクス描画装置は、P、Q、RおよびSを、1としてもよい。
本構成によれば、フレームデータ書き込み部が、一度にアクセスするフレームデータの大きさを縮小することができるので、処理速度の向上を図ることができる。
また、本構成に係るグラフィクス描画装置は、アクセスパターン設定部が、第1のアクセスパターンとアンチエイリアスパターンと第2のアクセスパターンとに基づいて、フレームバッファへの1回分のアクセスに対するステンシルバッファへのアクセス回数を設定するものであってもよい。
本構成によれば、アクセスパターン設定部が、第1のアクセスパターンとアンチエイリアスパターンと第2のアクセスパターンとに基づいて、フレームバッファへの1回分のアクセスに対するステンシルバッファへのアクセス回数を設定することにより、フレームバッファへのアクセス効率を向上させることができる。
また、本構成に係るグラフィクス描画装置は、アンチエイリアスパターンを記憶するパターン記憶手段を備えることを特徴とするものであってもよい。
本構成によれば、アンチエイリアスパターンを予めパターン記憶手段に記憶しておくだけで、アンチエイリアスパターンの変更に対応することができるので、アンチエイリアスパターンの変更に伴うアクセス効率の低下を抑制することができる。
また、本構成は、コンピュータにより実現させるグラフィクス描画方法であって、第1の画像を構成する各画素の第1の画素情報よりなるステンシルデータをステンシルバッファに記憶するステンシルデータ記憶ステップと、第1の画像よりも解像度の低い第2の画像を構成する各画素の第2の画素情報よりなるフレームデータをフレームバッファに記憶するフレームデータ記憶ステップと、ステンシルバッファに対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、1回以上アクセスを行ってステンシルデータの一部を読み出すステンシルデータ読み出しステップと、第1のアクセスパターンと第2の画素情報の生成に使用されるアンチエイリアスパターンとに従って、ステンシルデータの一部から所定の画素数に対応する第2の画素情報よりなるフレームデータの一部を生成するフレームデータ生成ステップと、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する第2のアクセスパターンを設定するアクセスパターン設定ステップと、フレームデータ生成ステップにより、第2のアクセスパターンに相当する複数の第2の画素情報が生成されると、フレームバッファに対して、第2のアクセスパターンに従って、フレームデータのうち複数の第2の画素情報に相当するデータを書き込むフレームデータ書き込みステップと、フレームデータをディスプレイに描画する描画ステップとを含むグラフィクス描画方法であってもよい。
また、本構成は、グラフィクス描画処理をコンピュータにより実現させるグラフィクス描画プログラムであって、グラフィクス描画処理が、第1の画像を構成する各画素の第1の画素情報よりなるステンシルデータをステンシルバッファに記憶するステンシルデータ記憶ステップと、第1の画像よりも解像度の低い第2の画像を構成する各画素の第2の画素情報よりなるフレームデータをフレームバッファに記憶するフレームデータ記憶ステップと、ステンシルバッファに対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、1回以上アクセスを行ってステンシルデータの一部を読み出すステンシルデータ読み出しステップと、第1のアクセスパターンと第2の画素情報の生成に使用されるアンチエイリアスパターンとに従って、ステンシルデータの一部から所定の画素数に対応する第2の画素情報よりなるフレームデータの一部を生成するフレームデータ生成ステップと、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する第2のアクセスパターンを設定するアクセスパターン設定ステップと、フレームデータ生成ステップにより、第2のアクセスパターンに相当する複数の第2の画素情報が生成されると、フレームバッファに対して、第2のアクセスパターンに従って、フレームデータのうち複数の第2の画素情報に相当するデータを書き込むフレームデータ書き込みステップと、フレームデータをディスプレイに描画する描画ステップとを含むグラフィクス描画プログラムであってもよい。
また、本構成は、グラフィクス描画処理をコンピュータにより実現させるグラフィクス描画プログラムを記録した記録媒体であって、グラフィクス描画処理が、第1の画像を構成する各画素の第1の画素情報よりなるステンシルデータをステンシルバッファに記憶するステンシルデータ記憶ステップと、第1の画像よりも解像度の低い第2の画像を構成する各画素の第2の画素情報よりなるフレームデータをフレームバッファに記憶するフレームデータ記憶ステップと、ステンシルバッファに対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、1回以上アクセスを行ってステンシルデータの一部を読み出すステンシルデータ読み出しステップと、第1のアクセスパターンと第2の画素情報の生成に使用されるアンチエイリアスパターンとに従って、ステンシルデータの一部から所定の画素数に対応する第2の画素情報よりなるフレームデータの一部を生成するフレームデータ生成ステップと、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する第2のアクセスパターンを設定するアクセスパターン設定ステップと、フレームデータ生成ステップにより、第2のアクセスパターンに相当する複数の第2の画素情報が生成されると、フレームバッファに対して、第2のアクセスパターンに従って、フレームデータのうち複数の第2の画素情報に相当するデータを書き込むフレームデータ書き込みステップと、フレームデータをディスプレイに描画する描画ステップとを含むグラフィクス描画プログラムを記録した記録媒体であってもよい。
また、本構成は、第1の画像を構成する各画素の第1の画素情報よりなるステンシルデータを記憶できるステンシルバッファと、第1の画像よりも解像度の低い第2の画像を構成する各画素の第2の画素情報よりなるフレームデータを記憶できるフレームバッファと、フレームデータをディスプレイに描画する描画部とを備えるグラフィクス描画用集積回路であって、ステンシルバッファに対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、1回以上アクセスを行ってステンシルデータの一部を読み出すステンシルデータ読み出し部と、第1のアクセスパターンと第2の画素情報の生成に使用されるアンチエイリアスパターンとに従って、ステンシルデータの一部から所定の画素数に対応する第2の画素情報よりなるフレームデータの一部を生成するフレームデータ生成部と、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する第2のアクセスパターンを設定するアクセスパターン設定部と、フレームデータ生成部が、第2のアクセスパターンに相当する複数の第2の画素情報を生成すると、フレームバッファに対して、第2のアクセスパターンに従って、フレームデータのうち複数の第2の画素情報に相当するデータを書き込むフレームデータ書き込み部とを備えるグラフィクス描画用集積回路であってもよい。
本構成によれば、小型化を図ることができる。
実施の形態1のグラフィクス描画装置の動作の概要を説明する図である。
実施の形態1のグラフィクス描画装置の構成を示すブロック図である。
実施の形態1で用いられるベクターデータの説明図である。
実施の形態1におけるエッジ処理および塗り潰し処理の説明図である。
実施の形態1における塗り潰し処理の説明図である。
実施の形態1におけるステンシルバッファおよびフレームバッファへのアクセス方法を説明する図である。
実施の形態1のエッジ処理部の動作の説明図である。
実施の形態1の塗り潰し処理部の動作の説明図である。
実施の形態1におけるカバレッジ値の算出に関する説明図である。
実施の形態1のステンシルバッファおよびフレームバッファへのアクセス動作の説明図である。
実施の形態1のパターン入力部(ユーザインターフェース)の一部を構成する表示部の正面図である。
実施の形態1のアクセスパターン設定部の動作説明図である。
実施の形態1のアクセスパターン設定部の動作の一例の説明図である。
実施の形態1のアクセスパターン設定部の動作説明図である。
実施の形態1のアクセスパターン設定部の動作説明図である。
実施の形態1のグラフィクス描画装置の動作を示すフローチャートである。
実施の形態1における第2のアクセスパターンを設定する動作を示すフローチャートである。
実施の形態1におけるフレームデータの生成およびフレームデータ書き込み処理を示すフローチャートである。
実施の形態2のステンシルバッファおよびフレームバッファへのアクセス動作の説明図である。
実施の形態2のアクセスパターン設定部の動作説明図である。
実施の形態3のアクセスパターン設定部の動作説明図である。
実施の形態3のアクセスパターン設定部の動作の一例の説明図である。
実施の形態3におけるステンシルバッファまたはフレームバッファへのアクセス方法を説明する図である。
実施の形態3のアクセスパターン設定部の動作説明図である。
実施の形態3における第2のアクセスパターンを設定する動作を示すフローチャートである。
実施の形態3におけるフレームデータの生成およびフレームデータ書き込み処理を示すフローチャートである。
変形例で使用されるパターン管理テーブルを示す概念図である。
変形例のパターン入力部(タッチパネル)の正面図である。
従来例の動作説明図である。
他の従来例の動作説明図である。
他の従来例の動作説明図である。
<実施の形態1>
<1>概要
本実施の形態に係るグラフィクス描画装置1000は、例えば、図1(a)に示すように、ベクター画像G20の輪郭線上の複数の点の座標データから構成されるベクターデータから図1(b)に示すような高解像度のラスタ画像G1を生成し、当該ラスタ画像G21を解像度変換することにより、図1(c)に示すようなラスタ画像G1よりも低解像度のラスタ画像G22を生成する。以下、ベクター画像を表すベクターデータから生成される高解像度のラスタ画像を第1の画像とし、第1の画像から解像度変換を施して生成されるより低解像度のラスタ画像を第2の画像として説明する。
<2>構成
本実施の形態に係るグラフィクス描画装置1000の構成を図2に示す。
グラフィクス描画装置1000は、ステンシルバッファ1007と、フレームバッファ1008と、入力データバッファ1006と、プロセッサ(図示せず)と主記憶装置(図示せず)とを含んで構成される処理装置1020と、パターン記憶部1009と、パターン入力部1012とを備える。
処理装置1020は、適宜のプログラムを実行することにより、ベクターデータ入力部1001と、曲線分割部1002と、エッジ処理部1003と、ステンシルデータ読み出し部である塗り潰し処理部1004と、フレームデータ生成部1013と、フレームデータ書き込み部1014と、アクセスパターン設定部1005と、描画部1010とを実現している。
<2−1>バッファ
入力データバッファ1006は、2次元形状等を表すベクターデータを記憶している。ここで、ベクターデータは、図3(a),(b)に示すように、直線や曲線から構成されるベクター画像を示す。また、入力データバッファ1006には、第1の画像に対する第2の画像の解像度の比の分だけ、あらかじめ拡大したベクター画像を表すベクターデータが記憶されている。
ステンシルバッファ1007は、DRAM(Dynamic Random Access Memory)により構成され、第1の画像を構成する複数の第1の画素情報が格納されている。ここで、第1の画素情報は、1画素当たり数ビットの大きさを有し、0または0以外の所定の値(本実施の形態では、“1”または“−1”をとる。以下、ステンシル値と称す。)を示す数値データにより構成されている。また、第1の画像は、例えば、文字1文字を表し、実際のディスプレイ1015に描画される画像よりも高解像度に設定されている。
フレームバッファ1008は、DRAMにより構成され、第2の画像を構成する各画素の第2の画素情報が格納されている。ここで、第2の画素情報は、1画素当たり数ビットの大きさを有し、各画素に対応する色値データにより構成されている。第2の画像は、実際のディスプレイ1015に描画される画像と同じ解像度に設定されている。
この第2の画素情報は、当該第2の画素情報に対応する複数の第1の画素情報に対して平均化処理等のフィルタ処理を行うことにより算出される。従って、第2の画素情報に対応して複数の第1の画素情報をどのように選択するかが、アンチエイリアシングの効果に影響を及ぼしうることになる。
ここで、平均化処理等のフィルタ処理を行う対象となる複数の画素により構成されるパターンを一般にアンチエイリアスパターンと呼ぶ。従って、アンチエイリアスパターンを構成する複数の画素の第1の画素情報から1画素分の第2の画素情報が生成される。第2の画素情報が、第1の画像における縦p画素×横q画素分に相当する複数の第1の画素情報を使用して生成される場合、アンチエイリアスパターンは、第1の画像における縦p画素×横q画素からなる領域と一致することになる。
<2−2>処理装置
<2−2−1>ベクターデータ入力部
ベクターデータ入力部1001は、入力データバッファ1006に記憶されているベクター画像を表すベクターデータを読み込む。ここで、ベクターデータは、図3(a)に示すように、線分を構成する第1の画像を表すものである場合、当該線分の両端2点の座標データ(例えば、点Aと点Bの座標データ、点Cと点Dの座標データ)から構成される。
また、ベクターデータが、図3(b)に示すように、ベジエ曲線Pを構成する第1の画像を表す場合、当該ベジエ曲線P上の3点の座標データ(例えば、点A、点Bおよび点Dの座標データ)から構成される。この3点の座標データは、当該3点のうちの2点を通るベジエ曲線Pが内接する三角形を構成する3つの頂点の座標データを表す。
なお、ベジエ曲線Pとは、曲線上の座標P(XP,YP)が、以下の式(1)(2)で表される曲線を意味する。
式(1)
式(2)
図3(b)で示す例では、N=3、n=2に固定されており、式(1)のB
i(i=0,1,2)は、図3(b)における点A、点B、点Dを示す。
ベクターデータ入力部1001は、例えば、データ形式の浮動小数点形式や固定小数点形式等から整数形式への変換、第1の画像上における座標系(相対座標系)から第2の画像上における座標系(絶対座標系)への変換、直線や曲線等により構成される第1の画像の平行移動、拡大、縮小、変形等を行うことができる。
<2−2−2>曲線分割部
曲線分割部1002は、ベクターデータが表す曲線を複数の線分に分割する処理を行う。具体的には、曲線分割部1002は、曲線や楕円上にある複数の点のうち互いに隣接する2点同士を結ぶ線分の集合を表す線分データを生成する処理を行う。
ベクターデータが、例えば、図3(b)に示すように、点Aと点Dとを結ぶベジエ曲線Pを表すものであれば、曲線分割部1002は、図3(c)に示すように、当該ベジエ曲線P上における点Eおよび点Fの座標データを前述の式(1)および式(2)に基づいて算出し、点Aと点Eとを結ぶ線分、点Eと点Fとを結ぶ線分および点Fと点Dとを結ぶ線分からなる3つの線分(図3(c)参照)を表す線分データを生成する。この線分データは、各線分の始点および終点それぞれの座標データと、当該線分の傾き(Y座標が+1だけ変化したときのX座標の変化量)を示すデータとから構成される。
<2−2−3>エッジ処理部
エッジ処理部1003は、図形等を構成する第1の画像のうち輪郭線部分を作成する処理を行う。この輪郭線部分を作成する処理では、まず、ステンシルバッファ1007に記憶されている全ての第1の画素情報(ステンシル値)を“0”に設定する。
次に、プレゼンハムの線分描画アルゴリズムを用いて、図4(a)に示すように、4角形を構成する第1の画像の輪郭線部分に相当する4つの線分l1,l2,l3,l4と重なる位置にある複数の画素の位置を特定するとともに、4角形の各辺を構成する各線分l1,l2,l3,l4と重なる画素毎に、各画素を通る線分l1,l2,l3,l4の始点のY座標と終点のY座標とを比較し、当該比較の結果に応じて各画素のステンシル値を設定する。
各画素を通る線分の始点のY座標に比べて当該線分の終点のY座標が大きい場合、当該画素に予め設定されているステンシル値“0”に“1”を加算することで、ステンシル値を“1”に設定する。例えば、図4(a)の画素px1について見ると、画素px1は線分l1と重なり、線分l1の始点のY座標は、線分l1の終点のY座標に比べて大きい。従って、画素px1のステンシル値は“1”に設定される。
各画素を通る線分l1,l2,l3,l4の始点のY座標に比べて当該線分l1,l2,l3,l4の終点のY座標が小さい場合、当該画素のステンシル値“0”に“−1”を加算してステンシル値を“−1”に設定する。例えば、図4(a)の画素px2について見ると、画素px2は線分l3と重なり、線分l3の始点のY座標は、線分l3の終点のY座標に比べて小さい。従って、画素px2のステンシル値は“−1”に設定される。
また、図4(a)の画素px3について見ると、画素px3は線分l2と重なり、線分l2の始点のY座標は、線分l2の終点のY座標に比べて、1画素分以下の差異しかない。この場合、線分l2の始点および終点のY座標は同じと判断され、ステンシル値の加算は行われず、画素px3のステンシル値は“0”のまま維持される。
<2−2−4>塗り潰し処理部
塗り潰し処理部1004は、図4(b)に示すように、第1の画像を構成する多角形(図4(b)の場合は4角形)の輪郭線の内側に位置する各画素のステンシル値を全て0以外の値(図4(b)に示した例では、“1”)に設定する、いわゆる塗り潰す処理を行う。
塗り潰し処理は、第1の画像G1の一部を構成し且つ横方向に並列する複数の画素からなるライン毎に行われる。
例えば、図5(a)に示すように、第1の画像G1を構成する複数のラインのうち上から6番目のラインL6を塗り潰す場合、当該ラインの左端に位置する画素Px61のステンシル値“0”と、ラインL6の左端から2番目に位置する画素px62のステンシル値“+1”とを加算して得られた値“+1”で、画素px62のステンシル値“0”を“+1”に書き換える(図5(b)参照)。
次に、図5(b)の状態において、図5(c)に示すように、当該ラインの左端から2番目に位置する画素のステンシル値“+1”と、ラインL6の左端から3番目に位置する画素px63のステンシル値“0”とを加算して得られた値“+1”で、画素px63のステンシル値“0”を“+1”に書き換える(図5(d)参照)。
以降、当該ラインの左端からn番目に位置する画素のステンシル値と、当該ラインの左端からn+1番目に位置する画素のステンシル値とを加算して得られた値で、左端からn+1番目に位置する画素のステンシル値を書き換えることを繰り返していく。
そして、第1の画像G1上におけるラインL6全部についてステンシル値の書き換えが終わると、当該ラインL6と縦方向で隣接するライン(例えば、図5(a)乃至(d)に示すラインL7)について同様の処理を繰り返す。
こうして、図4(b)に示すように、第1の画像G1全てに対して、塗り潰し処理が完了すると、4角形の輪郭線の内側にある各画素のステンシル値が“1”に書き換わることになる。
塗り潰し処理では、ステンシルバッファ1007に対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、アクセスして第1の画素情報の書き換えを行う。
塗り潰し処理部1004は、ステンシルバッファ1007に対して、塗り潰し処理を行うと同時に、ステンシルデータを読み出して、フレームデータ生成部1013に対して出力する。つまり、塗り潰し処理部1004は、ステンシルバッファ1007に対して、第1のアクセスパターンに従って、ステンシルデータの一部を読み出すステンシルデータ読み出し部として機能する。
塗り潰し処理では、処理速度を向上させるために、ステンシルバッファ1007と処理装置1020との間でステンシルデータのバースト転送が行われている。つまり、図6(a)に示すように、処理装置1020とステンシルバッファ1007との間で1画素分に対応するステンシルデータにアクセスする毎に、処理装置1020からステンシルバッファ1007に対してアクセス要求を繰り返すのではなく、図6(b)に示すように、複数画素分に対応するステンシルデータにアクセスする毎に、処理装置1020からステンシルバッファ1007に対してアクセス要求を行う。以下、処理装置1020からステンシルバッファ1007への1回のアクセス要求で処理装置1020がアクセスするデータ量をメモリバンド幅と称す。エッジ処理においても、塗り潰し処理と同様に、ステンシルバッファ1007と処理装置1020との間でステンシルデータのバースト転送が行われている。
また、本実施の形態では、第1のアクセスパターンを、縦方向の画素数が4個、横方向の画素数が4個のブロック形状となるように設定している。このように、第1のアクセスパターンをブロック形状に設定している理由を以下に説明する。
仮に、図7(a)のように、第1のアクセスパターンp11,p12,p13,p14が、縦1画素×横16画素の直線状に設定されていると、第1の画像に描かれた2次元図形のエッジを描く方向D1と第1のアクセスパターンp11,p12,p13,p14に対応する複数の画素の並び方向D2とが一致しない。従って、エッジ処理において、書き換える必要がある第1の画素情報の全てにアクセスするためには、書き換える必要のない第1の画素情報を含めて全ての第1の画素情報にアクセスしなければならない。これに対して、図7(b)のように、第1のアクセスパターンp21,p22,p23,p24が、縦4画素×横4画素のブロック形状に設定されていると、線分データの始点および終点の座標データから、アクセスすべき第1の画素情報をパターンp21,p24で示す箇所に限定することができるので(図7(b)に示すところの書き換えの必要のないパターンp22,p23に対応する第1の画素情報にアクセスしないように限定する。)、無駄なアクセスを抑制することができる。
塗り潰し処理では、前述のように、第1の画像を構成する複数の画素からなるライン毎に、ラインの左端の画素から順番に第1の画素情報を書き換えていく。ここで、図8(a)に示すように、第1のアクセスパターンが、縦1画素×横16画素の直線状に設定されていると、1回のアクセスで、各ラインL11,L12,L13,L14を構成する複数の画素全てについての第1の画素情報の書き換えが可能となる。つまり、4回のアクセスすれば、各ラインL11,L12,L13,L14を構成する複数の画素全てについての第1の画素情報の書き換えが完了する。
一方、図8(b)に示すように、第1のアクセスパターンが、縦4画素×横4画素のブロック形状に設定されていると、左端から4画素分まで第1の画素情報を書き換えたところで、左端から4画素のところに位置する画素の第1の画素情報を主記憶装置等の所定の記憶領域に記憶させて、当該ラインに縦方向で隣接するラインの第1の画素情報の書き換え処理に移る。図8(b)のブロックb1の処理では、ラインL11の書き換え処理が終わってから、ラインL11の右端の画素の第1の画素情報を一時的に所定の記憶領域に退避させてから、ラインL12の書き換え処理に移る。従って、ブロックb1を構成する画素の第1の画素情報全てについて書き換えを完了するまでに第1の画素情報を所定の記憶領域に一時的に退避させる処理を4回行う必要がある。
そして、ブロックb1を構成する複数の画素の第1の画素情報の書き換え処理を完了して、ブロックb1の右側に隣接するブロックb2を構成する画素の第1の画素情報を書き換える際には、各ラインL11,L12,L13,L14を処理する毎に、ブロックb1の書き換えの際に所定の記憶領域に退避させておいた第1の画素情報を、再び読み出して書き換え処理を行う必要がある。従って、ブロックb2を構成する画素の第1の画素情報全てについて書き換えを完了するまでに第1の画素情報を読み出す処理を4回行う必要がある。
つまり、図8(b)に示すように、第1のアクセスパターンがブロック形状に設定されていると、図8(a)に示すように、第1のアクセスパターンが直線状に設定されている場合に比べて、書き換えた第1の画素情報を一時的に所定の記憶領域に退避させる処理と退避させた第1の画素情報を読み出す処理とを行う必要がある分、書き換え処理の効率が低下してしまう。
これに対して、本実施の形態では、塗り潰し処理において、ブロック形状(例えば、縦4画素×横4画素)の第1のアクセスパターンを使用するとともに、処理装置1020が、第1のアクセスパターンでアクセスする各ブロックb1,b2,b3,b4について、図8(c)の矢印で示すように、縦方向に並列した4本のラインL11,L12,L13,L14を構成する第1の画素情報について同時に書き換えを行う。
つまり、ブロックb1に対して書き換え処理を完了した後、ブロックb1の右端に位置する縦4画素分の第1の画素情報全てを所定の記憶領域に一度に退避させる処理を1回だけ行い、次に、当該ブロックb1の右側に隣接するブロックb2の第1の画素情報を書き換える処理を行う際に、所定の記憶領域からブロックb1の右端に位置する縦4画素分のステンシル値全てを読み出す読み出し処理を1回だけ行うだけでよい。よって、図8(b)に示した例に比べて、第1の画素情報を所定の記憶領域に一時的に退避させる処理と所定の記憶領域から第1の画素情報を読み出す処理とを行う回数を低減することができるので、図8(b)に示した例に比べて、書き換え効率の低下を抑制することができる。
また、塗り潰し処理部1004は、ステンシルバッファ1007への累積アクセス回数をカウントしてフレームデータ生成部1013に出力する機能も有する。
<2−2−5>フレームデータ生成部
フレームデータ生成部1013は、塗り潰し処理部1004から入力されるステンシルデータの一部から、第2の画素情報を生成する。
ここで、第2の画素情報は、各画素の不透明度(アルファ値)を反映する値(以下、カバレッジ値と称す)を示す。例えば、カバレッジ値が、1であれば不透明度が最も高く、カバレッジ値が1よりも小さくなるにつれて、不透明度が低下していく。第2の画像のエッジ部分について、不透明度が適宜設定されることにより、第2の画像のエッジ部分に生じるエイリアシングが抑制される。
カバレッジ値は、第2の画像を構成する画素1個分の第2の画素情報の生成に使用される第1の画素情報のうちステンシル値“1”を示す第1の画素情報の個数を反映している。
例えば、塗り潰し処理部1004は、アンチエイリアスパターンが縦4画素×横4画素に設定されている場合、当該アンチエイリアスパターンの中にステンシル値が“+1“である画素の数を計算する。例えば、縦4画素×横4画素のアンチエイリアスパターンの中にステンシル値が“+1“の画素が5つ含まれていれば、カバレッジ値は5/16になる。
第1の画像の各画素のステンシル値が、図9(a)に示すように設定されているとし、アンチエイリアスパターンが縦4画素×横4画素とすると、対応する第2の画像の一部の領域における各画素のカバレッジ値は、それぞれ図9(b)に示すようになる。
フレームデータ生成部1013は、塗り潰し処理部1004は、第1のアクセスパターンを使用して、図10に示すように、第1の画像に対して横方向にずらしていく形で、ステンシルデータにアクセスしてステンシルデータの一部を読み出すと、図10に示すように、第1の画像における第1のアクセスパターンの位置に対応する第2の画像上における位置のフレームデータの一部を順番に生成していく。
フレームデータ生成部1013は、予めステンシルバッファ1007に格納されているステンシルデータの大きさに関する情報を保持する機能を有し、当該ステンシルデータの大きさに関する情報と、塗り潰し処理部1004から入力されるステンシルバッファ1007の累積アクセス回数と、パターン記憶部1009から取得した第1のアクセスパターンに基づいて、ステンシルデータの全部に対応するフレームデータの一部の全てをフレームデータ書き込み部1014に出力したか否かを判断する機能を有する。
<2−2−6>アクセスパターン設定部
アクセスパターン設定部1005は、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファ1008に対して、1回にアクセスする複数の第2の画素情報に対応する画素の配置パターンを示す第2のアクセスパターンを設定する。
図11のように、第1のアクセスパターンが、縦方向の画素数を2N、横方向の画素数を2K(ブロック形状又は直線形状)に設定され、アンチエイリアスパターンが、縦方向の画素数を2M、横方向の画素数を2Jに設定されている場合、アクセスパターン設定部1005は、第2のアクセスパターンを縦方向の画素数を2N-M、横方向の画素数を2K-Jの2J+M倍(ブロック形状又は直線形状)に設定する。ここで、N≧M、且つ、K≧Jの条件が成立している。つまり、第1のアクセスパターンに含まれる画素数と、第2のアクセスパターンに含まれる画素数とがいずれも2N+K個に設定されていることになる。
第1のアクセスパターン(縦2N画素×横2K画素)の中に、アンチエイリアスパターン(縦2M画素×横2J画素)が、縦方向に2N-M組、横方向に2K-J組だけ入ることになるので、ステンシルバッファ1007へのアクセス効率を向上させることができる。
例えば、図12のように、エッジ処理部1003および塗り潰し処理部1004が、縦方向の画素数が23、横方向の画素数が23の第1のアクセスパターンを使用し、フレームデータ生成部1013が、縦方向の画素数が22、横方向の画素数が22のアンチエイリアスパターンを使用する場合、アクセスパターン設定部1005が、第2のアクセスパターンを縦方向の画素数を21、横方向の画素数を21の24倍である25に設定する。
アクセスパターン設定部1005は、第2のアクセスパターンを設定するとともに、フレームデータ書き込み部1014がフレームバッファ1008にアクセスする回数、も設定する。なお、アクセスパターン設定部1005は、第1のアクセスパターンおよび算出された第2のアクセスパターンからステンシルバッファ1007およびフレームバッファ1008それぞれへのアクセス回数(アクセス頻度)を算出して設定する。
第1のアクセスパターンが、縦方向の画素数を2N、横方向の画素数を2K(ブロック形状又は直線形状)に設定され、第2のアクセスパターンが、縦方向の画素数を2N-M、横方向の画素数を2K-Jの2J+M倍(ブロック形状又は直線形状)に設定され、ステンシルバッファ1007およびフレームバッファ1008へのアクセスの際のメモリバンド幅が同じであるとすると、アクセスパターン設定部1005は、メモリバンド幅が2N+K画素分、ステンシルバッファ1007への1回のアクセスで生成できるフレームデータの一部が縦2N-M画素×横2K-J画素分なので、ステンシルバッファ1007へ2J+M回アクセスするとフレームバッファ1008へ1回アクセスするように設定する。
図13に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横4画素に設定されているとすると、第2のアクセスパターンを縦1画素×横16画素に設定するとともに、フレームバッファ1008へのアクセス回数を、ステンシルバッファ1007へ16回アクセスする毎にフレームバッファ1008へ1回アクセスするように設定する。そうすると、エッジ処理部1003によるエッジ処理および塗り潰し処理部1004による塗り潰し処理それぞれにおいて、処理装置1020が、ステンシルバッファに16回アクセスすることにより、高解像度の第1の画像上における縦4画素×横64画素の領域に相当するステンシルデータの一部が読み出される。次に、フレームデータ生成部1013によるフレームデータの生成処理において、当該ステンシルデータの一部から第1の画像よりも低解像度の第2の画像上における縦1画素×横16画素の領域に相当するフレームデータの一部を生成すると、フレームデータ書き込み部1014によるフレームデータ書き込み処理において、処理装置1020が、フレームバッファ1008に1回アクセスすることにより、第2の画像上における縦1画素×横16画素の領域に相当するフレームデータの一部がフレームバッファ1008に書き込まれる。
図14(a)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横4画素に設定されているとすると、第2のアクセスパターンを縦1画素×横16画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでに、ステンシルバッファ1007へアクセスする回数(アクセス回数)を16回に設定する。
図14(b)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横4画素に設定されているとすると、第2のアクセスパターンを縦2画素×横8画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでに、ステンシルバッファ1007へアクセスする回数(アクセス回数)を8回に設定する。
図14(c)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横2画素に設定されているとすると、第2のアクセスパターンを縦1画素×横16画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を8回に設定する。
図14(d)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横2画素に設定されているとすると、第2のアクセスパターンを縦2画素×横8画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を4回に設定する。
図14(e)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦1画素×横1画素、つまり、アンチエイリアシングを行わないように設定されているとすると、第2のアクセスパターンを縦4画素×横4画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を1回に設定する。
フレームデータ書き込み部1014は、アクセスパターン設定部1005により設定された第2のアクセスパターンに従って、図10(b)に示すように、第2の画像上で第2のアクセスパターンを横方向にずらしていく形で、フレームバッファ1008における対応する記憶領域にアクセスしていくことにより、第2の画素情報をフレームバッファ1008に順次書き込む。
<2−2−7>フレームデータ書き込み部および描画部
フレームデータ書き込み部1014は、フレームデータ生成部1013から入力される複数の第2の画素情報を少なくとも第2のアクセスパターンに相当する分だけ一時的に保持しておくことができる第2の画素情報保持手段(図示せず)を有する。なお、第2の画素情報保持手段は、例えば、主記憶装置上の一部の記憶領域やレジスタ等で実現されている。
描画部1010は、フレームバッファ1008に格納されたフレームデータをディスプレイ1015に描画する。
<2−3>その他
パターン記憶部1009は、レジスタの集合からなり、第1のアクセスパターンに関する情報と、アンチエイリアスパターンに関する情報とをレジスタ毎に保持している。例えば、第1のアクセスパターンに関する情報として、第1の画像における縦4画素×横4画素のブロック形状の内側にある複数の画素に対応するステンシルデータの一部にアクセスすることを示す情報を保持する。
パターン入力部1012は、例えば、図15に示すように、ユーザが画面上から数値入力可能なユーザインターフェースからなり、ユーザがパターン記憶部1009に第1のアクセスパターンやアンチエイリアスパターンに関する情報を格納する際に使用される。図11に示すユーザインターフェースでは、入力欄1012a1,1012a2それぞれに、乗数(例えば、入力欄1012a1に2、入力欄1012a2に2)を入力すると、第1のアクセスパターンを22画素×22画素(=4画素×4画素)に設定することができる。また、入力欄1012b1,1012b2それぞれに、乗数(例えば、入力欄1012b1に2、入力欄1012b2に2)を入力すると、アンチエイリアスパターンを22画素×22画素(=4画素×4画素)に設定することができる。
結局、本実施の形態では、第2のアクセスパターンおよびフレームバッファ1008へのアクセス頻度を適宜設定することにより、アクセス効率を向上させることができるので、フレームバッファ1008への1回のアクセスで転送するデータ量(メモリバンド幅)を変更するような制御が不要となる。
<3>動作
以下、本実施の形態の動作について説明する。
<3−1>全体動作
本実施の形態に係るグラフィクス描画装置の全体動作について図16に基づいて説明する。
まず、ベクターデータ入力部1001が、入力データバッファ1006に記憶されているベクターデータを読み込み(ステップS1)、曲線分割部1002に出力すると、曲線分割部1002が、ベクターデータ入力部1001から入力されるベクターデータに基づいて線分データを生成し(ステップS2)、当該線分データをエッジ処理部1003に出力する。
次に、エッジ処理部1003が、曲線分割部1002から入力される複数の線分データに基づいて、第1のアクセスパターンでステンシルバッファ1007にアクセスして、エッジ処理を行う(ステップS3)。このとき、アクセスパターン設定部1005は、パターン記憶部1009から取得した第1のアクセスパターンとアンチエイリアスパターンとに基づいて第2のアクセスパターンおよびステンシルバッファ1007およびフレームバッファ1008それぞれへのアクセス回数を設定するサブルーチンを呼び出す(ステップS4)。
その後、塗り潰し処理部1004が読み出したステンシルデータからフレームデータ生成部1013がフレームデータの一部を生成し、当該フレームデータの一部をフレームデータ書き込み部1014がフレームバッファ1008に書き込むサブルーチンを呼び出す(ステップS5)。以下、フレームデータの一部の生成およびフレームデータの一部の書き込みをフレームデータ処理として説明を進める。
次に、フレームデータ生成部1013が、ステンシルデータの大きさと、塗り潰し処理部1004から出力される塗り潰し処理部1004のステンシルバッファ1007への累積アクセス回数と、パターン記憶部1009から読み出した第1のアクセスパターンとに基づいて、ステンシルデータの全部に対応するフレームデータの一部が全てフレームバッファ1008に出力されたか否かを判断することにより、当該フレームデータの一部が全てフレームバッファ1008に書き込まれたか否かを判断する(ステップS6)。
ステップS6において、まだ、ステンシルデータの全部に対応するフレームデータの一部が全てフレームバッファ1008に書き込まれていないと判断すると(ステップS6:No)、再び、ステップS5へ移行する。
一方、ステップS6において、ステンシルデータの全部に対応するフレームデータの一部が全てフレームバッファ1008へ書き込まれたと判断すると(ステップS6:Yes)、描画部1010が、フレームバッファ1008からフレームデータを取得して、当該フレームデータをディスプレイ1015に描画する(ステップS7)。
<3−2>第2のアクセスパターンの設定動作
次に、本実施の形態に係るグラフィクス描画装置1000の第2のアクセスパターンの設定を行うサブルーチンを図17に基づいて説明する。
まず、パターン記憶部1009から第1のアクセスパターンを取得する(ステップS41)と、第1のアクセスパターンの画素数2N+Kから、フレームバッファ1008へアクセスする際のメモリバンド幅を第2の画素情報2N+K画素分の大きさに設定する(ステップS42)。
次に、パターン記憶部1009からアンチエイリアスパターンを取得して(ステップS43)、第1のアクセスパターンにおける縦方向の画素数2Nをアンチエイリアスパターンの縦方向の画素数2Mで除する演算を行い、算出された画素数2N-Mを第2のアクセスパターンにおける縦方向の画素数に設定する(ステップS44)。
その後、フレームバッファ1008にアクセスする際のメモリバンド幅に相当する画素数2N+Kを第2のアクセスパターンにおける横方向の画素数2N-Mで除する演算を行い、算出された画素数2K+Mを第2のアクセスパターンにおける横方向の画素数に設定する(ステップS45)。
次に、第1のアクセスパターンにおける横方向の画素数2Kをアンチエイリアスパターンにおける横方向の画素数2Jで除する演算を行い、算出された画素数2K-Jに第2のアクセスパターンにおける縦方向の画素数2N-Mを積算することにより、ステンシルバッファ1007への1回のアクセスでフレームデータ生成部1013が生成するフレームデータの一部の画素数2N-M+K-Jを算出し(ステップS46)、メモリバンド幅2N+Kを当該画素数2N-M+K-Jで除する演算を行い、算出された値を、フレームバッファ1008に1回アクセスするまでにステンシルバッファ1007にアクセスする回数(アクセス回数)に設定する(ステップS47)。
最後に、第2のアクセスパターンおよびアクセス回数をフレームデータ書き込み部1014に対して出力する(ステップS48)。
<3−3>フレームデータ処理における動作
本実施の形態に係るグラフィクス描画装置1000のフレームデータの一部の生成およびフレームデータの書き込み処理(フレームデータ処理)を行うサブルーチンを図18に基づいて説明する。
まず、塗り潰し処理部1004が、塗り潰し処理を行うとともに、パターン記憶部1009から取得した第1のアクセスパターンに従って、ステンシルバッファ1007に格納されたステンシルデータの一部を読み出し、フレームデータ生成部1013に出力する(ステップS51)。
次に、フレームデータ生成部1013が、塗り潰し処理部1004から出力されるステンシルデータの一部から第2の画素情報を生成し、フレームデータ書き込み部1014に出力する(ステップS52)。このとき、フレームデータ書き込み部1014は、フレームデータ生成部1013から入力される第2の画素情報を第2の画素情報保持手段に格納していく(ステップS53)。
そして、フレームデータ書き込み部1014が、第2の画素情報保持手段に第2のアクセスパターンに相当する分の複数の第2の画素情報が格納されたか否かを判断する(ステップS54)。ここにおいて、フレームデータ書き込み部1014は、アクセスパターン設定部1005から出力されたアクセス回数(フレームデータ書き込み部1014がフレームバッファ1008に1回アクセスするまでに、塗り潰し処理部1004が、ステンシルバッファ1007にアクセスする回数)に基づいて判断する。
ステップS54において、フレームデータ書き込み部1014が、第2の画素情報保持手段に、まだ、第2のアクセスパターンに相当する分の複数の第2の画素情報が格納されていないと判断すると(ステップS54:No)、再度、第1のアクセスパターンに従って、ステンシルバッファ1007に1回アクセスしてステンシルデータの一部を読み出す(ステップS51)。
一方、ステップS54において、フレームデータ書き込み部1014が、第2の画素情報保持手段に、第2のアクセスパターンに相当する分の複数の第2の画素情報が格納されたと判断すると(ステップS54:Yes)、フレームデータ書き込み部1014は、第2のアクセスパターンに従って、フレームバッファ1008に1回だけアクセスして、第2の画素情報保持手段に格納された複数の第2の画素情報よりなるフレームデータの一部をフレームバッファ1008に書き込む(ステップS55)。ここで、フレームデータ書き込み部1014は、フレームデータの一部の書き込みが完了すると、第2の画素情報保持手段の内容を消去する。
<実施の形態2>
以下、本実施の形態について説明する。なお、動作は実施の形態1と同様なので説明を省略する。
<1>構成
本実施の形態のグラフィクス描画装置1000は、実施の形態1の構成と略同様であって、エッジ処理部1003、塗り潰し処理部1004、フレームデータ生成部1013、アクセスパターン設定部1005およびフレームデータ書き込み部1014の機能のみが相違する。
本実施の形態では、塗り潰し処理部1004が、図19に示すように、第1のアクセスパターンを使用して、第1の画像に対して縦方向にずらしていく形で、ステンシルデータにアクセスしてステンシルデータの一部を読み出し、フレームデータ生成部1013が、図19に示すように、第1の画像における第1のアクセスパターンの位置に対応する第2の画像上の位置の第2の画素情報を順番に生成していく。
アクセスパターン設定部1005は、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、前記フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する画素の配置パターンを示す第2のアクセスパターンを設定する第2のアクセスパターンを設定する。
ここで、エッジ処理部1003および塗り潰し処理部1004が、縦方向の画素数が2N、横方向の画素数が2K(ブロック形状又は直線形状)の第1のアクセスパターンを使用し、フレームデータ生成部1013が、縦方向の画素数が2M、横方向の画素数が2Jのアンチエイリアスパターンを使用する場合、アクセスパターン設定部1005が、第2のアクセスパターンを縦方向の画素数を2N-Mの2M+J倍、横方向の画素数を2K-J(ブロック形状又は直線形状)に設定する。ここで、N≧M、且つ、K≧Jの条件が成立している。つまり、第1のアクセスパターンに含まれる画素数と、第2のアクセスパターンに含まれる画素数とがいずれも2N+K個に設定されていることになる。
また、アクセスパターン設定部1005は、第2のアクセスパターンを設定するとともに、フレームデータ書き込み部1014がフレームバッファ1008にアクセスする回数、も設定する。
図20(a)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横4画素に設定されているとすると、第2のアクセスパターンを縦16画素×横1画素に設定するとともに、フレームバッファ1008への1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を16回に設定する。
図20(b)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横2画素に設定されているとすると、第2のアクセスパターンを縦8画素×横2画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を8回に設定する。
図20(c)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横4画素に設定されているとすると、第2のアクセスパターンを縦16画素×横1画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を8回に設定する。
図20(d)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横2画素に設定されているとすると、第2のアクセスパターンを縦8画素×横2画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を4回に設定する。
図20(e)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦1画素×横1画素、つまり、アンチエイリアシングを行わないように設定されているとすると、第2のアクセスパターンを縦4画素×横4画素に設定するとともに、フレームバッファ1008に1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を1回に設定する。
フレームデータ書き込み部1014は、アクセスパターン設定部1005により設定された第2のアクセスパターンに従って、図19に示すように、第2の画像上で第2のアクセスパターンを縦方向にずらしていく形で、フレームバッファ1008における対応する記憶領域にアクセスしていくことにより、第2の画素情報をフレームバッファ1008に順次書き込む。
結局、本実施の形態では、第2のアクセスパターンおよびフレームバッファ1008へのアクセス頻度を適宜設定することにより、アクセス効率を向上させることができるので、フレームバッファ1008への1回のアクセスで転送するデータ量(メモリバンド幅)を変更するような制御が不要となる。
<実施の形態3>
以下、本実施の形態について説明する。
<1>構成
本実施の形態のグラフィクス描画装置1000は、実施の形態1の構成と略同様であって、アクセスパターン設定部1005の機能およびフレームバッファ1008が相違する。なお、アクセスパターン設定部1005は、実施の形態1と同様に、処理装置1020が適宜のプログラムを実行することにより実現されている。
アクセスパターン設定部1005は、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、複数の第2の画素情報に対応する第2のアクセスパターンを設定する。
フレームバッファ1008は、処理装置1020からの要求に応じてバースト長を変更することができる可変バースト長機能を有するDRAMにより構成されている。
ここで、図21に示すように、第1のアクセスパターンが、縦方向の画素数を2N、横方向の画素数を2K(ブロック形状又は直線形状)に設定され、アンチエイリアスパターンが、縦方向の画素数を2M、横方向の画素数を2Jに設定されている場合、アクセスパターン設定部1005が、第2のアクセスパターンを縦方向の画素数を2N-M、横方向の画素数を2K-J(ブロック形状又は直線形状)に設定する。ここで、N≧M、且つ、K≧Jの条件が成立している。
図22に示すように、第1のアクセスパターンが、縦方向の画素数を23、横方向の画素数を23に設定され、アンチエイリアスパターンが、縦方向の画素数を22、横方向の画素数を22に設定されている場合、アクセスパターン設定部1005が、第2のアクセスパターンを縦方向の画素数を21、横方向の画素数を21に設定する。
アクセスパターン設定部1005は、第2のアクセスパターンに基づいてフレームバッファ1008にアクセスする際のメモリバンド幅を変更する。例えば、第1のアクセスパターンが16画素(縦4画素×横4画素)に設定されていると、エッジ処理および塗り潰し処理において、処理装置1020は、ステンシルバッファ1007からメモリバンド幅16画素分(図23(a)のデータData1乃至データData16)の設定でステンシルデータの一部がバースト転送される。ここで、アンチエイリアスパターンが、縦2画素×横2画素に設定されているとすれば、フレームデータ書き込み処理において、処理装置1020は、フレームバッファ1008に対して、メモリバンド幅4画素分(図23(b)のデータData21乃至データData24)の設定でフレームデータの一部をバースト転送する。
次に、アクセスパターン設定部1005の機能について説明する。
図24(a)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横4画素に設定されているとすると、第2のアクセスパターンを縦1画素×横16画素に設定するとともに、フレームバッファ1008にアクセスする際のメモリバンド幅を1画素分に設定する。
図24(b)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横4画素に設定されているとすると、第2のアクセスパターンを縦2画素×横8画素に設定するとともに、フレームバッファ1008へアクセスする際のメモリバンド幅を2画素分に設定する
図24(c)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横2画素に設定されているとすると、第2のアクセスパターンを縦1画素×横16画素に設定するとともに、フレームバッファ1008へアクセスする際のメモリバンド幅を2画素分に設定する。
図24(d)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横2画素に設定されているとすると、第2のアクセスパターンを縦2画素×横8画素に設定するとともに、フレームバッファ1008へアクセスする際のメモリバンド幅を4画素分に設定する。
図24(e)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦1画素×横1画素、つまり、アンチエイリアシングを行わないように設定されているとすると、第2のアクセスパターンを縦4画素×横4画素に設定するとともに、フレームバッファ1008へアクセスする際のメモリバンド幅を16画素分に設定する。ここで、メモリバンド幅は変更しない。
フレームデータ書き込み部1014は、フレームバッファ1008に対して、アクセスパターン設定部1005により設定された第2のアクセスパターンに対応するフレームデータの一部が格納される記憶領域毎にアクセスすることによりフレームデータ生成部1013により生成されたフレームデータをフレームバッファ1008に書き込むフレームデータ書き込み処理を行う。また、フレームデータ書き込み部1014によるフレームデータ書き込み処理では、前述のエッジ処理および塗り潰し処理と同様に、フレームバッファ1008と処理装置1020との間でのデータ転送をバースト転送により行っている。
描画部1010は、フレームバッファ1008にアクセスしてフレームデータを取得してディスプレイ1015に描画する。
結局、本実施の形態では、フレームデータ書き込み処理において、フレームデータ生成部1013がステンシルバッファ1007への1回のアクセスで読み出したステンシルデータの一部からフレームデータ生成部1013が生成した複数の第2の画素情報に相当する大きさに合わせて、フレームデータ書き込み部1014が、フレームバッファ1008に対する1回のアクセスでフレームバッファ1008に書き込む際のメモリバンド幅を変更することができるので、実施の形態1および2のようにフレームデータ書き込み部1014に第2の画素情報保持手段(図示せず)を設ける必要がなくなる。
<3>動作
本実施の形態のグラフィクス描画装置1000は、実施の形態1と略同様であり、第2のアクセスパターンを設定するサブルーチンおよびフレームデータの一部の生成およびフレームデータの書き込みを行うフレームデータ処理のサブルーチンが実施の形態1と相違する。以下、第2のアクセスパターンの設定を行うサブルーディンおよびフレームデータの一部の生成およびフレームデータの書き込みを行うフレームデータ処理のサブルーディンについて説明する。
<3−1>第2のアクセスパターンの設定動作
次に、本実施の形態に係るグラフィクス描画装置1000の第2のアクセスパターンの設定を行うサブルーチンを図25に基づいて説明する。
まず、パターン記憶部1009から第1のアクセスパターンを取得するとともに(ステップS412)、アンチエイリアスパターンを取得する(ステップS422)。
次に、第1のアクセスパターンにおける縦方向の画素数2Nをアンチエイリアスパターンの縦方向の画素数2Mで除する演算を行い、算出された画素数2N-Mを第2のアクセスパターンにおける縦方向の画素数に設定するとともに(ステップS432)、第1のアクセスパターンにおける縦方向の画素数2Nをアンチエイリアスパターンの縦方向の画素数2Mで除する演算を行い、算出された画素数2N-Mを第2のアクセスパターンにおける縦方向の画素数に設定する(ステップS442)。
最後に、第2のアクセスパターンをフレームデータ書き込み部1014に対して出力する(ステップS452)。
<3−2>フレームデータ処理における動作
次に、本実施の形態に係るグラフィクス描画装置1000のフレームデータの一部の生成およびフレームデータの書き込み処理を行うフレームデータ処理のサブルーチンを図26に基づいて説明する。
塗り潰し処理部1004が、塗り潰し処理を行うとともに、パターン記憶部1009から取得した第1のアクセスパターンに従って、ステンシルバッファ1007に格納されたステンシルデータの一部を読み出し、フレームデータ生成部1013に出力する(ステップS512)。
次に、フレームデータ生成部1013が、塗り潰し処理部1004から出力されるステンシルデータの一部から複数の第2の画素情報を生成し、フレームデータ書き込み部1014に出力する(ステップS522)。
その後、処理装置1020からフレームバッファ1008に対してバースト長可変要求を行い、メモリバンド幅(バースト長)をフレームデータ生成部1013により生成され、フレームデータ書き込み部1014に入力された第2の画素情報に相当する大きさに設定する(ステップS532)。具体的には、フレームデータ生成部1013が、塗り潰し処理部1004がステンシルバッファ1007に1回のアクセスで読み出してフレームデータ生成部1013に出力したステンシルデータの一部から生成した画素数2N-M+K-J分の第2の画素情報に相当する大きさに設定する。
最後に、フレームデータ書き込み部1014が、第2のアクセスパターンに従って、フレームバッファ1008に1回だけアクセスして、第2の画素情報保持手段に格納された複数の第2の画素情報よりなるフレームデータの一部をフレームバッファ1008に書き込む(ステップS542)。
<変形例>
(1)前述の実施の形態1乃至3では、入力データバッファ1006、ステンシルバッファ1007、フレームバッファ1008は、物理的に異なるメモリで構成されている例について説明したが、これらは物理的に同一のメモリで構成されていて、異なる記憶領域に配置されてなるものであってもよい。
また、本変形例において、ある程度の大きさのデータを一時的に蓄えることができるキャッシュメモリ(図示せず)を設けてもよい。
これによれば、処理装置1020のメモリへのアクセスが競合することによって生じるレイテンシの増加を抑制することができる。
(2)前述の実施の形態1乃至3では、ステンシルバッファ1007とフレームバッファ1008とが、物理的に別個のDRAMから構成される例について説明したが、これに限定されるものではなく、例えば、可変バースト長機能を有する1つのDRAMを用い、当該DRAMの中にステンシルバッファ1007として用いる記憶領域と、フレームバッファ1008として用いる記憶領域を設けてなる構成とし、処理装置1020がステンシルバッファ1007として用いる記憶領域にアクセスする際のバースト長と、フレームバッファ1008として用いる記憶領域にアクセスする際のバースト長を変更する構成としてもよい。
本変形例によれば、1つのDRAMでステンシルバッファ1007とフレームバッファ1008とを構成することができるので、グラフィクス描画装置内におけるDRAM等のメモリを配設するスペースを小さくすることができる。
(3)前述の実施の形態1乃至3では、曲線分割部1002が、ベクターデータから、点と点を結ぶ線分を生成する例について説明したが、これに限定されるものではなく、例えば、ベクター画像を表すベクターデータを、第1の画像の解像度レベルで互いに隣接した点の集合から構成される点データに変換する機能を有するものであっても良い。
この変形例によれば、直線の傾きデータ等が不要になるので、直線の傾き等を算出する処理が不要とすることができ、また、直線を表すデータと曲線を表すデータとを同じデータ形式で統一することができる。
(4)前述の実施の形態1乃至3におけるエッジ処理では、エッジを構成する線分の描画方向とステンシル値に加算する値との関係を、第1の画像に対してY軸の正の方向に線分を描画する場合、ステンシル値に+1(または、+1より大きい正の整数)を加算するように設定した例について説明したが、これに限定されるものではなく、例えば、第1の画像に対してY軸の正の方向に線分を描画する場合、ステンシル値に−1(または、−1より小さい負の整数)を加算するように設定したものであってもよい。
また、本変形例では、線分の始点から終点への向きとは無関係に、常に線分を第1の画像に対してY軸の正の方向(または、Y軸の負の方向)に線分を描画し、ステンシル値に加算する値の符号だけを、線分の始点から終点への向きに応じて変化させるようにしても良い。
(5)前述の実施の形態1乃至3における塗り潰し処理では、処理装置1020が、ステンシルバッファ1007に対する一度のアクセス要求で、第1の画像の一部を構成する縦8画素×横8画素に対応するステンシルデータが格納された記憶領域にアクセスし、当該複数の画素に対応するステンシルデータの書き換えを行うと同時に、その都度、ステンシル値をフレームデータに出力する例について説明したが、これに限定されるものではなく、塗り潰し処理において、ステンシルデータの書き換えを実際には行わず、フレームデータ生成部1013にステンシル値を出力するだけであってもよい。
本変形例によれば、ステンシルデータの書き換えを行わないので、塗り潰し処理における処理量を低減することができる。
(6)前述の実施の形態1および2では、入力データバッファ1006には、第1の画像の解像度に対する第2の画像の解像度の比の分だけ、あらかじめ拡大したベクター画像を表すベクターデータが記憶されている例について説明したが、これに限定されるものではなく、例えば、ベクターデータ入力部1001にベクターデータが入力されると、ベクターデータ入力部1001が、第1の画像の解像度に対する第2の画像の解像度の比の分だけ拡大したベクター画像を表すベクターデータを生成する構成であってもよい。
本変形例によれば、ユーザが第1の画像の解像度を意識する必要がないので、使い勝手を向上させることができる。
(7)前述の実施の形態1乃至3では、第2の画像よりも解像度が高い第1の画像を生成するために、入力データバッファ1006には、あるベクター画像を第1の画像に対する第2の画像の解像度の比の分だけ、あらかじめ拡大したベクター画像を表すベクターデータが記憶されている例について説明したが、これに限定されるものではなく、例えば、エッジ処理部1003や塗り潰し処理部1004が、解像度の比の分だけ拡大したベクター画像を表すベクターデータを生成するとともに、当該ベクターデータに基づいてステンシルデータを生成してステンシルバッファ1007に記憶させるように構成されてなるものであってもよい。
(8)前述の実施の形態1乃至3では、第1のアクセスパターンが、縦方向の画素数をC1×2N、横方向の画素数をC2×2K(C1、C2は正の整数)に設定されてなるものであってもよい。この場合、アンチエイリアスパターンが、縦方向の画素数を2M、横方向の画素数を2Jに設定される場合、第1のアクセスパターン(縦C1・2N画素×横C2・2K画素)の中に、アンチエイリアスパターン(縦2M画素×横2J画素)が、縦方向にC1・2N-M組、横方向にC2・2K-J組だけ入ることになるので、ステンシルバッファ1007へのアクセス効率を向上させることができる。
(9)前述の実施の形態1乃至3では、ユーザがパターン入力部1012により1つのアンチエイリアスパターンをパターン記憶部1009に記憶する例について説明したが、これに限定されるものではなく、パターン記憶部1009に予め、図27に示すような、パターン管理テーブルTが記憶されてなるものであってもよい。ここで、アクセスパターン設定部1005は、パターン管理テーブルTを参照して、フレームデータ書き込み部1014の第2のアクセスパターンを変更するようにしてもよい。例えば、第1のアクセスパターンが「縦8画素×横8画素のブロック形状」であり、アンチエイリアスパターンが「縦4画素×横4画素」である場合には、アクセスパターン設定部1005は、パターン管理テーブルTの対応する識別IDを参照して、第2のアクセスパターンを「縦2画素×横2画素のブロック形状」に設定する。また、第1のアクセスパターンが「縦8画素×横8画素のブロック形状」であり、アンチエイリアスパターンが「縦4画素×横4画素」である場合には、アクセスパターン設定部1005は、パターン管理テーブルを参照して、第2のアクセスパターンを「縦2画素×横2画素のブロック形状」に設定する。
また、本変形例では、ユーザがパターン管理テーブルの識別IDを自由に選択できるように、パターン入力部1012が、図28に示すようなタッチパネルにより構成されるものであってもよい。ここで、図28に示すタッチパネル上に表示されたメモリバンド幅を選択する選択釦1012aと、アンチエイリアスパターンを選択する選択釦1012bとの組み合わせそれぞれが、パターン管理テーブルTの各識別IDに対応づけがなされており、ユーザが指定した組み合わせに対応した識別IDが選択されるようになっている。
よって、ユーザがタッチパネルの簡単な操作で容易に描画設定を行うことができるので、グラフィクス描画装置1000の使い勝手を向上させることができる。
また、前述の実施の形態1乃至3のグラフィクス描画装置では、第2の画像の解像度を高くすればエイリアシングの抑制効果が高くなるが、フレームデータの大きさが増加するので、フレームバッファ1008へのフレームデータの書き込み処理に時間を要してしまい、グラフィクス描画装置全体の処理速度が低下してしまう。一方、第2の画像の解像度を低くすればフレームデータの大きさが小さくなるので、フレームバッファ1008へのフレームデータの書き込み処理に要する時間が短縮され、グラフィクス描画装置全体の処理速度は向上するが、第2の画像の解像度が低下するのでエイリアシングの抑制効果が低下してしまう。即ち、エイリアシングの抑制効果とグラフィクス描画装置全体の処理速度の向上とはトレードオフの関係にある。
これに対して、本変形例では、ユーザーがアンチエイリアスパターンを自由に設定できるので、グラフィクス描画装置の使用目的に応じて、エイリアシングの抑制効果を向上させた画質重視の設定、若しくはグラフィクス描画装置全体の処理速度を向上させた処理速度重視の設定のいずれかを自由に選択できるようになる。
<補足>
本実施の形態のグラフィクス描画装置は、典型的には半導体集積回路であるLSIとして実現される。これらは個別に1チップ化されてもよいし、一部またはすべてを含むように1チップ化されても良い。ここではLSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
また、集積回路化の手法はLSIに限るものではなく、専用回路または汎用プロセッサで実現しても良い。LSI製造後に、プログラムすることが可能なFPGA(Field
Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
さらには、半導体技術の進歩または派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行っても良い。バイオ技術の適応などが可能性として有り得る。
さらに加えて、本実施の形態のグラフィクス描画装置を集積化した半導体チップと、画像を描画するためのディスプレイとを組み合せて、様々な用途に応じた描画機器を構成することができる。特に、ベクターグラフィックスは文字(アウトラインフォント)を描画する手段としての利用価値が高いため、携帯電話やテレビ、デジタルビデオレコーダ、デジタルビデオカメラ、カーナビゲーション等における情報描画手段として、本発明を利用することが可能である。ディスプレイとしては、ブラウン管(CRT)の他、液晶やPDP(プラズマディスプレイパネル)、有機ELなどのフラットディスプレイ、プロジェクターを代表とする投射型ディスプレイなどと組み合わせることが可能である。
本発明のグラフィクス描画装置は、例えば、ベクター図形、特に文字(アウトラインフォント)を美しく、かつ省電力で高速に描画するための手段として、様々な用途に利用可能である。例えば、携帯電話や携帯音楽プレーヤー、デジタルカメラ、デジタルビデオカメラ等の電池駆動の携帯表示端末や、テレビ、デジタルビデオレコーダー、カーナビゲーション等の高解像度の情報表示機器におけるメニュー表示やWebブラウザ、エディタ、EPG、地図表示等における情報表示手段として利用価値が高い。
1000 グラフィクス描画装置
1001 ベクターデータ入力部
1002 曲線分割部
1003 エッジ処理部
1004 塗り潰し処理部(ステンシルデータ読み出し部)
1005 アクセスパターン設定部
1006 入力データバッファ
1007 ステンシルバッファ
1008 フレームバッファ
1009 パターン記憶部
1010 描画部
1012 パターン設定部
1013 フレームデータ生成部
1014 フレームデータ書き込み部
1015 ディスプレイ
T パターン管理テーブル
本発明は、グラフィクス描画におけるアンチエイリアシングに関する。
従来から、高解像度でラスタライズされた画像を低解像度の画像に解像度変換する際に、フィルタリング処理を行うことによりアンチエイリアシングを行いベクタグラフィックスの画質を向上させる描画装置が提案されている。
この類の描画装置として、例えば、特許文献1に記載されているような描画装置が提案されている。特許文献1に記載の描画装置では、まず、図29(a)に示すように、ベクターデータから生成されステンシルデータ記憶部に記憶されている2次元形状SH1を含む第1の画像G1を表すステンシルデータと、当該2次元形状SH1のエッジ近傍に位置する画素のアルファ値を示すカバレッジデータとから、図29(b)に示すように、第1の画像G1よりも高解像度の2次元形状SH2を含む第2の画像G2を表すラスタデータを生成してラスタデータ記憶部に記憶する。次に、ラスタデータ記憶部に記憶された複数の2次元形状SH1,SH2に対応するラスタデータ同士を合成した後に、図29(c)に示すように、合成して得られたデータを第2の画像G2よりも低解像度の2次元形状SH1,SH2を含む第3の画像G3を表すデータに変換してからディスプレイ等の提示部で提示する。
ところが、特許文献1に記載された構成の描画装置では、ラスタデータ記憶部に高解像度の2次元形状SH1,SH2を含む第2の画像G2を表すラスタデータを記憶しておく必要があるため、ラスタデータ記憶部を構成するメモリの記憶容量が大きくなったり、或いは、カバレッジデータを記憶するためのカバレッジデータ記憶部を別途に設ける必要もあることから、メモリの記憶容量の増加およびメモリの数の増加を抑制することが困難であった。
これに対して、第1の画像G1に対応するステンシルデータを記憶するステンシルバッファと、第2の画像G2に対応するラスタデータ(フレームデータ)を記憶するフレームバッファと、第3の画像G3を提示するディスプレイと、適宜のプログラムを実行することによりステンシルデータやフレームデータの生成を行う機能等を実現する処理装置とを備え、図30に示すように、第2の画像G2の解像度を第3の画像G3の解像度と同じに設定し、第1の画像G1の解像度を第2の画像G2の解像度よりも高く設定した描画装置が提供されている。
この描画装置では、第2の画像G2上に2次元形状SH1を描画する際、アンチエイリアスパターンに基づいて、2次元形状SH1のエッジ部分の画素の色をぼかす形で色値を設定して、ベクターグラフィクスの画質を向上させている。例えば、アンチエイリアスパターンが第1の画像G1における縦4画素×横4画素に設定されているとすれば、第1の画像G1における縦4画素×横4画素分のステンシルデータから第2の画像G2における1画素分のフレームデータが生成される。
ところで、この描画装置では、処理装置が内部に設けられたプロセッサおよび主記憶装置を含んで構成されており、ステンシルデータやフレームデータを生成する際に、処理装置とステンシルバッファまたはフレームバッファとの間でデータ転送を行うが、処理速度の向上を図るため、処理装置とステンシルバッファまたはフレームバッファとの間のデータ転送を、1度のアクセス要求に対して所定のデータ量(以下、「メモリバンド幅」と称す。)の転送を行うバースト転送等により行っている。例えば、図31(a)に示す例では、処理装置が、ステンシルバッファに対する1度のアクセス要求で、ステンシルバッファから第1の画像Aにおける縦4画素×横4画素分のステンシルデータにアクセスして読み込む。
しかしながら、図31(a)に示す例のように、第1のアクセスパターンおよびアンチエイリアスパターンが共に第1の画像G1における縦4画素×横4画素に設定され、処理装置が、ステンシルバッファに4回アクセス要求する毎に、フレームバッファに第2の画像G2における縦4画素×横4画素(以下、「第2のアクセスパターン」と称す。)分のフレームデータを書き込むように設定されているとすると、第2の画像G2における縦1画素×横4画素分のフレームデータしか生成されていないにもかかわらず、第2の画像G2における16画素分のフレームデータを格納する記憶領域にアクセスすることになる。従って、第2のアクセスパターンに含まれる残りの縦3画素×横4画素分のフレームバッファへのアクセスが無駄となってしまう。
また、図31(b)に示す例のように、アンチエイリアスパターンだけを縦2画素×横4画素に変更した場合、処理装置が、ステンシルバッファに4回アクセス要求する毎に、フレームバッファに第2の画像G2における縦4画素×横4画素(以下、「第2のアクセスパターン」と称す。)分のフレームデータを書き込むように設定されているとすると、第2の画像G2における縦2画素×横4画素分のフレームデータしか生成されていないにも関わらず、第2の画像G2における16画素分のフレームデータを格納する記憶領域にアクセスすることになる。従って、第2のアクセスパターンに含まれる残りの縦2画素×横4画素分のフレームバッファへのアクセスが無駄となってしまう。
本発明は、上記事由に鑑みてなされたものであり、フレームバッファへのアクセス効率の向上を図ることを目的とする。
上記課題を解決するために、本構成に係るグラフィクス描画装置は、第1の画像を構成する各画素の第1の画素情報よりなるステンシルデータを記憶できるステンシルバッファと、第1の画像よりも解像度の低い第2の画像を構成する各画素の第2の画素情報よりなるフレームデータを記憶できるフレームバッファと、前記フレームデータをディスプレイに描画する描画部とを備えるグラフィクス描画装置であって、ステンシルバッファに対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、1回以上アクセスを行って前記ステンシルデータの一部を読み出すステンシルデータ読み出し部と、第1のアクセスパターンと第2の画素情報の生成に使用されるアンチエイリアスパターンとに従って、ステンシルデータの一部から所定の画素数に対応する第2の画素情報よりなるフレームデータの一部を生成するフレームデータ生成部と、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する第2のアクセスパターンを設定するアクセスパターン設定部と、フレームデータ生成部が、第2のアクセスパターンに相当する複数の第2の画素情報を生成すると、フレームバッファに対して、第2のアクセスパターンに従って、フレームデータのうち複数の第2の画素情報に相当するデータを書き込むフレームデータ書き込み部とを備えることを特徴とする。
本構成によれば、アクセスパターン設定部が、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、第2のアクセスパターンを適宜設定することにより、フレームバッファへの無駄なアクセスを抑制することができるので、フレームバッファへのアクセス効率の低下を抑制することができる。
また、本構成に係るグラフィクス描画装置は、第1のアクセスパターンが、縦方向の画素数をA個(ただし、Aは2以上の整数)、横方向の画素数をB個(ただし、Bは2以上の整数)としたことを特徴とするものであってもよい。
また、本構成に係るグラフィクス描画装置は、Aが、2N×P(ただし、NおよびPは1以上の整数)であり、且つBが、2K×Q(ただし、KおよびQは1以上の整数)であり、アンチエイリアスパターンが、縦方向の画素数を2M、横方向の画素数を2J(ただし、MおよびJは1以上の整数であり、MまたはJのいずれか一方が2以上であり、N≧M、且つ、K≧J)としてなり、第2のアクセスパターンが、縦方向の画素数を2N−MのP×R倍(ただし、Rは1以上の整数)、横方向の画素数を2K−JのQ×S倍(ただし、Sは1以上の整数)に設定されてなるとしてもよい。
本構成によれば、第1のアクセスパターン、アンチエイリアスパターンから、フレームバッファへのアクセス効率向上の点から最適な第2のアクセスパターンを決めることができる。
また、本構成に係るグラフィクス描画装置は、PおよびQが、1であり、Rが、1であり、且つ、Sが、2J+Mでもよい。
本構成によれば、ステンシルデータ読み出し部が、第1の画像に対して横方向に第1のアクセスパターンを移動させていく形でステンシルバッファにアクセスし、フレームデータ書き込み部が、第2の画像に対して横方向に第2のアクセスパターンを移動させていく形でステンシルバッファにアクセスする場合において、1回にアクセスするステンシルデータの一部の大きさに対する1回にアクセスするフレームデータの大きさの関係を固定としながらもアクセス効率の向上が図れるので、ステンシルバッファへの1回のアクセスで転送するデータ量に応じてフレームバッファへの1回のアクセスで転送するデータ量を変更するような制御が不要となるので、制御の簡素化を図ることができる。
また、本構成に係るグラフィクス描画装置は、PおよびQが、1であり、Rが、2M+Jであり、且つ、Sが、1としてもよい。
本構成によれば、ステンシルデータ読み出し部が、第1の画像に対して縦方向に第1のアクセスパターンを移動させていく形でステンシルバッファにアクセスし、フレームデータ書き込み部が、第2の画像に対して縦方向に第2のアクセスパターンを移動させていく形でステンシルバッファにアクセスする場合において、ステンシルバッファへの1回のアクセスで読みだすデータの大きさに対するフレームバッファへの1回のアクセスで書き込むデータの大きさの関係を固定としながらもアクセス効率の向上が図れるので、ステンシルバッファへの1回のアクセスで転送するデータ量に応じてフレームバッファに対して一度のアクセスするデータ量とを変更するような制御が不要となるので、制御の簡素化を図ることができる。
また、本構成に係るグラフィクス描画装置は、P、Q、RおよびSを、1としてもよい。
本構成によれば、フレームデータ書き込み部が、一度にアクセスするフレームデータの大きさを縮小することができるので、処理速度の向上を図ることができる。
また、本構成に係るグラフィクス描画装置は、アクセスパターン設定部が、第1のアクセスパターンとアンチエイリアスパターンと第2のアクセスパターンとに基づいて、フレームバッファへの1回分のアクセスに対するステンシルバッファへのアクセス回数を設定するものであってもよい。
本構成によれば、アクセスパターン設定部が、第1のアクセスパターンとアンチエイリアスパターンと第2のアクセスパターンとに基づいて、フレームバッファへの1回分のアクセスに対するステンシルバッファへのアクセス回数を設定することにより、フレームバッファへのアクセス効率を向上させることができる。
また、本構成に係るグラフィクス描画装置は、アンチエイリアスパターンを記憶するパターン記憶手段を備えることを特徴とするものであってもよい。
本構成によれば、アンチエイリアスパターンを予めパターン記憶手段に記憶しておくだけで、アンチエイリアスパターンの変更に対応することができるので、アンチエイリアスパターンの変更に伴うアクセス効率の低下を抑制することができる。
また、本構成は、コンピュータにより実現させるグラフィクス描画方法であって、第1の画像を構成する各画素の第1の画素情報よりなるステンシルデータをステンシルバッファに記憶するステンシルデータ記憶ステップと、第1の画像よりも解像度の低い第2の画像を構成する各画素の第2の画素情報よりなるフレームデータをフレームバッファに記憶するフレームデータ記憶ステップと、ステンシルバッファに対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、1回以上アクセスを行ってステンシルデータの一部を読み出すステンシルデータ読み出しステップと、第1のアクセスパターンと第2の画素情報の生成に使用されるアンチエイリアスパターンとに従って、ステンシルデータの一部から所定の画素数に対応する第2の画素情報よりなるフレームデータの一部を生成するフレームデータ生成ステップと、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する第2のアクセスパターンを設定するアクセスパターン設定ステップと、フレームデータ生成ステップにより、第2のアクセスパターンに相当する複数の第2の画素情報が生成されると、フレームバッファに対して、第2のアクセスパターンに従って、フレームデータのうち複数の第2の画素情報に相当するデータを書き込むフレームデータ書き込みステップと、フレームデータをディスプレイに描画する描画ステップとを含むグラフィクス描画方法であってもよい。
また、本構成は、グラフィクス描画処理をコンピュータにより実現させるグラフィクス描画プログラムであって、グラフィクス描画処理が、第1の画像を構成する各画素の第1の画素情報よりなるステンシルデータをステンシルバッファに記憶するステンシルデータ記憶ステップと、第1の画像よりも解像度の低い第2の画像を構成する各画素の第2の画素情報よりなるフレームデータをフレームバッファに記憶するフレームデータ記憶ステップと、ステンシルバッファに対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、1回以上アクセスを行ってステンシルデータの一部を読み出すステンシルデータ読み出しステップと、第1のアクセスパターンと第2の画素情報の生成に使用されるアンチエイリアスパターンとに従って、ステンシルデータの一部から所定の画素数に対応する第2の画素情報よりなるフレームデータの一部を生成するフレームデータ生成ステップと、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する第2のアクセスパターンを設定するアクセスパターン設定ステップと、フレームデータ生成ステップにより、第2のアクセスパターンに相当する複数の第2の画素情報が生成されると、フレームバッファに対して、第2のアクセスパターンに従って、フレームデータのうち複数の第2の画素情報に相当するデータを書き込むフレームデータ書き込みステップと、フレームデータをディスプレイに描画する描画ステップとを含むグラフィクス描画プログラムであってもよい。
また、本構成は、グラフィクス描画処理をコンピュータにより実現させるグラフィクス描画プログラムを記録した記録媒体であって、グラフィクス描画処理が、第1の画像を構成する各画素の第1の画素情報よりなるステンシルデータをステンシルバッファに記憶するステンシルデータ記憶ステップと、第1の画像よりも解像度の低い第2の画像を構成する各画素の第2の画素情報よりなるフレームデータをフレームバッファに記憶するフレームデータ記憶ステップと、ステンシルバッファに対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、1回以上アクセスを行ってステンシルデータの一部を読み出すステンシルデータ読み出しステップと、第1のアクセスパターンと第2の画素情報の生成に使用されるアンチエイリアスパターンとに従って、ステンシルデータの一部から所定の画素数に対応する第2の画素情報よりなるフレームデータの一部を生成するフレームデータ生成ステップと、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する第2のアクセスパターンを設定するアクセスパターン設定ステップと、フレームデータ生成ステップにより、第2のアクセスパターンに相当する複数の第2の画素情報が生成されると、フレームバッファに対して、第2のアクセスパターンに従って、フレームデータのうち複数の第2の画素情報に相当するデータを書き込むフレームデータ書き込みステップと、フレームデータをディスプレイに描画する描画ステップとを含むグラフィクス描画プログラムを記録した記録媒体であってもよい。
また、本構成は、第1の画像を構成する各画素の第1の画素情報よりなるステンシルデータを記憶できるステンシルバッファと、第1の画像よりも解像度の低い第2の画像を構成する各画素の第2の画素情報よりなるフレームデータを記憶できるフレームバッファと、フレームデータをディスプレイに描画する描画部とを備えるグラフィクス描画用集積回路であって、ステンシルバッファに対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、1回以上アクセスを行ってステンシルデータの一部を読み出すステンシルデータ読み出し部と、第1のアクセスパターンと第2の画素情報の生成に使用されるアンチエイリアスパターンとに従って、ステンシルデータの一部から所定の画素数に対応する第2の画素情報よりなるフレームデータの一部を生成するフレームデータ生成部と、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する第2のアクセスパターンを設定するアクセスパターン設定部と、フレームデータ生成部が、第2のアクセスパターンに相当する複数の第2の画素情報を生成すると、フレームバッファに対して、第2のアクセスパターンに従って、フレームデータのうち複数の第2の画素情報に相当するデータを書き込むフレームデータ書き込み部とを備えるグラフィクス描画用集積回路であってもよい。
本構成によれば、小型化を図ることができる。
実施の形態1のグラフィクス描画装置の動作の概要を説明する図である。
実施の形態1のグラフィクス描画装置の構成を示すブロック図である。
実施の形態1で用いられるベクターデータの説明図である。
実施の形態1におけるエッジ処理および塗り潰し処理の説明図である。
実施の形態1における塗り潰し処理の説明図である。
実施の形態1におけるステンシルバッファおよびフレームバッファへのアクセス方法を説明する図である。
実施の形態1のエッジ処理部の動作の説明図である。
実施の形態1の塗り潰し処理部の動作の説明図である。
実施の形態1におけるカバレッジ値の算出に関する説明図である。
実施の形態1のステンシルバッファおよびフレームバッファへのアクセス動作の説明図である。
実施の形態1のパターン入力部(ユーザインターフェース)の一部を構成する表示部の正面図である。
実施の形態1のアクセスパターン設定部の動作説明図である。
実施の形態1のアクセスパターン設定部の動作の一例の説明図である。
実施の形態1のアクセスパターン設定部の動作説明図である。
実施の形態1のアクセスパターン設定部の動作説明図である。
実施の形態1のグラフィクス描画装置の動作を示すフローチャートである。
実施の形態1における第2のアクセスパターンを設定する動作を示すフローチャートである。
実施の形態1におけるフレームデータの生成およびフレームデータ書き込み処理を示すフローチャートである。
実施の形態2のステンシルバッファおよびフレームバッファへのアクセス動作の説明図である。
実施の形態2のアクセスパターン設定部の動作説明図である。
実施の形態3のアクセスパターン設定部の動作説明図である。
実施の形態3のアクセスパターン設定部の動作の一例の説明図である。
実施の形態3におけるステンシルバッファまたはフレームバッファへのアクセス方法を説明する図である。
実施の形態3のアクセスパターン設定部の動作説明図である。
実施の形態3における第2のアクセスパターンを設定する動作を示すフローチャートである。
実施の形態3におけるフレームデータの生成およびフレームデータ書き込み処理を示すフローチャートである。
変形例で使用されるパターン管理テーブルを示す概念図である。
変形例のパターン入力部(タッチパネル)の正面図である。
従来例の動作説明図である。
他の従来例の動作説明図である。
他の従来例の動作説明図である。
<実施の形態1>
・ 概要
本実施の形態に係るグラフィクス描画装置1000は、例えば、図1(a)に示すように、ベクター画像G20の輪郭線上の複数の点の座標データから構成されるベクターデータから図1(b)に示すような高解像度のラスタ画像G1を生成し、当該ラスタ画像G21を解像度変換することにより、図1(c)に示すようなラスタ画像G1よりも低解像度のラスタ画像G22を生成する。以下、ベクター画像を表すベクターデータから生成される高解像度のラスタ画像を第1の画像とし、第1の画像から解像度変換を施して生成されるより低解像度のラスタ画像を第2の画像として説明する。
<2>構成
本実施の形態に係るグラフィクス描画装置1000の構成を図2に示す。
グラフィクス描画装置1000は、ステンシルバッファ1007と、フレームバッファ1008と、入力データバッファ1006と、プロセッサ(図示せず)と主記憶装置(図示せず)とを含んで構成される処理装置1020と、パターン記憶部1009と、パターン入力部1012とを備える。
処理装置1020は、適宜のプログラムを実行することにより、ベクターデータ入力部1001と、曲線分割部1002と、エッジ処理部1003と、ステンシルデータ読み出し部である塗り潰し処理部1004と、フレームデータ生成部1013と、フレームデータ書き込み部1014と、アクセスパターン設定部1005と、描画部1010とを実現している。
<2−1>バッファ
入力データバッファ1006は、2次元形状等を表すベクターデータを記憶している。ここで、ベクターデータは、図3(a),(b)に示すように、直線や曲線から構成されるベクター画像を示す。また、入力データバッファ1006には、第1の画像に対する第2の画像の解像度の比の分だけ、あらかじめ拡大したベクター画像を表すベクターデータが記憶されている。
ステンシルバッファ1007は、DRAM(Dynamic Random Access Memory)により構成され、第1の画像を構成する複数の第1の画素情報が格納されている。ここで、第1の画素情報は、1画素当たり数ビットの大きさを有し、0または0以外の所定の値(本実施の形態では、“1”または“−1”をとる。以下、ステンシル値と称す。)を示す数値データにより構成されている。また、第1の画像は、例えば、文字1文字を表し、実際のディスプレイ1015に描画される画像よりも高解像度に設定されている。
フレームバッファ1008は、DRAMにより構成され、第2の画像を構成する各画素の第2の画素情報が格納されている。ここで、第2の画素情報は、1画素当たり数ビットの大きさを有し、各画素に対応する色値データにより構成されている。第2の画像は、実際のディスプレイ1015に描画される画像と同じ解像度に設定されている。
この第2の画素情報は、当該第2の画素情報に対応する複数の第1の画素情報に対して平均化処理等のフィルタ処理を行うことにより算出される。従って、第2の画素情報に対応して複数の第1の画素情報をどのように選択するかが、アンチエイリアシングの効果に影響を及ぼしうることになる。
ここで、平均化処理等のフィルタ処理を行う対象となる複数の画素により構成されるパターンを一般にアンチエイリアスパターンと呼ぶ。従って、アンチエイリアスパターンを構成する複数の画素の第1の画素情報から1画素分の第2の画素情報が生成される。第2の画素情報が、第1の画像における縦p画素×横q画素分に相当する複数の第1の画素情報を使用して生成される場合、アンチエイリアスパターンは、第1の画像における縦p画素×横q画素からなる領域と一致することになる。
<2−2>処理装置
<2−2−1>ベクターデータ入力部
ベクターデータ入力部1001は、入力データバッファ1006に記憶されているベクター画像を表すベクターデータを読み込む。ここで、ベクターデータは、図3(a)に示すように、線分を構成する第1の画像を表すものである場合、当該線分の両端2点の座標データ(例えば、点Aと点Bの座標データ、点Cと点Dの座標データ)から構成される。
また、ベクターデータが、図3(b)に示すように、ベジエ曲線Pを構成する第1の画像を表す場合、当該ベジエ曲線P上の3点の座標データ(例えば、点A、点Bおよび点Dの座標データ)から構成される。この3点の座標データは、当該3点のうちの2点を通るベジエ曲線Pが内接する三角形を構成する3つの頂点の座標データを表す。
なお、ベジエ曲線Pとは、曲線上の座標P(X
P,Y
P)が、以下の式(1)(2)で表される曲線を意味する。
式(1)
図3(b)で示す例では、N=3、n=2に固定されており、式(1)のBi(i=0,1,2)は、図3(b)における点A、点B、点Dを示す。
ベクターデータ入力部1001は、例えば、データ形式の浮動小数点形式や固定小数点形式等から整数形式への変換、第1の画像上における座標系(相対座標系)から第2の画像上における座標系(絶対座標系)への変換、直線や曲線等により構成される第1の画像の平行移動、拡大、縮小、変形等を行うことができる。
<2−2−2>曲線分割部
曲線分割部1002は、ベクターデータが表す曲線を複数の線分に分割する処理を行う。具体的には、曲線分割部1002は、曲線や楕円上にある複数の点のうち互いに隣接する2点同士を結ぶ線分の集合を表す線分データを生成する処理を行う。
ベクターデータが、例えば、図3(b)に示すように、点Aと点Dとを結ぶベジエ曲線Pを表すものであれば、曲線分割部1002は、図3(c)に示すように、当該ベジエ曲線P上における点Eおよび点Fの座標データを前述の式(1)および式(2)に基づいて算出し、点Aと点Eとを結ぶ線分、点Eと点Fとを結ぶ線分および点Fと点Dとを結ぶ線分からなる3つの線分(図3(c)参照)を表す線分データを生成する。この線分データは、各線分の始点および終点それぞれの座標データと、当該線分の傾き(Y座標が+1だけ変化したときのX座標の変化量)を示すデータとから構成される。
<2−2−3>エッジ処理部
エッジ処理部1003は、図形等を構成する第1の画像のうち輪郭線部分を作成する処理を行う。この輪郭線部分を作成する処理では、まず、ステンシルバッファ1007に記憶されている全ての第1の画素情報(ステンシル値)を“0”に設定する。
次に、プレゼンハムの線分描画アルゴリズムを用いて、図4(a)に示すように、4角形を構成する第1の画像の輪郭線部分に相当する4つの線分l1,l2,l3,l4と重なる位置にある複数の画素の位置を特定するとともに、4角形の各辺を構成する各線分l1,l2,l3,l4と重なる画素毎に、各画素を通る線分l1,l2,l3,l4の始点のY座標と終点のY座標とを比較し、当該比較の結果に応じて各画素のステンシル値を設定する。
各画素を通る線分の始点のY座標に比べて当該線分の終点のY座標が大きい場合、当該画素に予め設定されているステンシル値“0”に“1”を加算することで、ステンシル値を“1”に設定する。例えば、図4(a)の画素px1について見ると、画素px1は線分l1と重なり、線分l1の始点のY座標は、線分l1の終点のY座標に比べて大きい。従って、画素px1のステンシル値は“1”に設定される。
各画素を通る線分l1,l2,l3,l4の始点のY座標に比べて当該線分l1,l2,l3,l4の終点のY座標が小さい場合、当該画素のステンシル値“0”に“−1”を加算してステンシル値を“−1”に設定する。例えば、図4(a)の画素px2について見ると、画素px2は線分l3と重なり、線分l3の始点のY座標は、線分l3の終点のY座標に比べて小さい。従って、画素px2のステンシル値は“−1”に設定される。
また、図4(a)の画素px3について見ると、画素px3は線分l2と重なり、線分l2の始点のY座標は、線分l2の終点のY座標に比べて、1画素分以下の差異しかない。この場合、線分l2の始点および終点のY座標は同じと判断され、ステンシル値の加算は行われず、画素px3のステンシル値は“0”のまま維持される。
<2−2−4>塗り潰し処理部
塗り潰し処理部1004は、図4(b)に示すように、第1の画像を構成する多角形(図4(b)の場合は4角形)の輪郭線の内側に位置する各画素のステンシル値を全て0以外の値(図4(b)に示した例では、“1”)に設定する、いわゆる塗り潰す処理を行う。
塗り潰し処理は、第1の画像G1の一部を構成し且つ横方向に並列する複数の画素からなるライン毎に行われる。
例えば、図5(a)に示すように、第1の画像G1を構成する複数のラインのうち上から6番目のラインL6を塗り潰す場合、当該ラインの左端に位置する画素Px61のステンシル値“0”と、ラインL6の左端から2番目に位置する画素px62のステンシル値“+1”とを加算して得られた値“+1”で、画素px62のステンシル値“0”を“+1”に書き換える(図5(b)参照)。
次に、図5(b)の状態において、図5(c)に示すように、当該ラインの左端から2番目に位置する画素のステンシル値“+1”と、ラインL6の左端から3番目に位置する画素px63のステンシル値“0”とを加算して得られた値“+1”で、画素px63のステンシル値“0”を“+1”に書き換える(図5(d)参照)。
以降、当該ラインの左端からn番目に位置する画素のステンシル値と、当該ラインの左端からn+1番目に位置する画素のステンシル値とを加算して得られた値で、左端からn+1番目に位置する画素のステンシル値を書き換えることを繰り返していく。
そして、第1の画像G1上におけるラインL6全部についてステンシル値の書き換えが終わると、当該ラインL6と縦方向で隣接するライン(例えば、図5(a)乃至(d)に示すラインL7)について同様の処理を繰り返す。
こうして、図4(b)に示すように、第1の画像G1全てに対して、塗り潰し処理が完了すると、4角形の輪郭線の内側にある各画素のステンシル値が“1”に書き換わることになる。
塗り潰し処理では、ステンシルバッファ1007に対して、1回にアクセスする複数の第1の画素情報に対応する第1のアクセスパターンに従って、アクセスして第1の画素情報の書き換えを行う。
塗り潰し処理部1004は、ステンシルバッファ1007に対して、塗り潰し処理を行うと同時に、ステンシルデータを読み出して、フレームデータ生成部1013に対して出力する。つまり、塗り潰し処理部1004は、ステンシルバッファ1007に対して、第1のアクセスパターンに従って、ステンシルデータの一部を読み出すステンシルデータ読み出し部として機能する。
塗り潰し処理では、処理速度を向上させるために、ステンシルバッファ1007と処理装置1020との間でステンシルデータのバースト転送が行われている。つまり、図6(a)に示すように、処理装置1020とステンシルバッファ1007との間で1画素分に対応するステンシルデータにアクセスする毎に、処理装置1020からステンシルバッファ1007に対してアクセス要求を繰り返すのではなく、図6(b)に示すように、複数画素分に対応するステンシルデータにアクセスする毎に、処理装置1020からステンシルバッファ1007に対してアクセス要求を行う。以下、処理装置1020からステンシルバッファ1007への1回のアクセス要求で処理装置1020がアクセスするデータ量をメモリバンド幅と称す。エッジ処理においても、塗り潰し処理と同様に、ステンシルバッファ1007と処理装置1020との間でステンシルデータのバースト転送が行われている。
また、本実施の形態では、第1のアクセスパターンを、縦方向の画素数が4個、横方向の画素数が4個のブロック形状となるように設定している。このように、第1のアクセスパターンをブロック形状に設定している理由を以下に説明する。
仮に、図7(a)のように、第1のアクセスパターンp11,p12,p13,p14が、縦1画素×横16画素の直線状に設定されていると、第1の画像に描かれた2次元図形のエッジを描く方向D1と第1のアクセスパターンp11,p12,p13,p14に対応する複数の画素の並び方向D2とが一致しない。従って、エッジ処理において、書き換える必要がある第1の画素情報の全てにアクセスするためには、書き換える必要のない第1の画素情報を含めて全ての第1の画素情報にアクセスしなければならない。これに対して、図7(b)のように、第1のアクセスパターンp21,p22,p23,p24が、縦4画素×横4画素のブロック形状に設定されていると、線分データの始点および終点の座標データから、アクセスすべき第1の画素情報をパターンp21,p24で示す箇所に限定することができるので(図7(b)に示すところの書き換えの必要のないパターンp22,p23に対応する第1の画素情報にアクセスしないように限定する。)、無駄なアクセスを抑制することができる。
塗り潰し処理では、前述のように、第1の画像を構成する複数の画素からなるライン毎に、ラインの左端の画素から順番に第1の画素情報を書き換えていく。ここで、図8(a)に示すように、第1のアクセスパターンが、縦1画素×横16画素の直線状に設定されていると、1回のアクセスで、各ラインL11,L12,L13,L14を構成する複数の画素全てについての第1の画素情報の書き換えが可能となる。つまり、4回のアクセスすれば、各ラインL11,L12,L13,L14を構成する複数の画素全てについての第1の画素情報の書き換えが完了する。
一方、図8(b)に示すように、第1のアクセスパターンが、縦4画素×横4画素のブロック形状に設定されていると、左端から4画素分まで第1の画素情報を書き換えたところで、左端から4画素のところに位置する画素の第1の画素情報を主記憶装置等の所定の記憶領域に記憶させて、当該ラインに縦方向で隣接するラインの第1の画素情報の書き換え処理に移る。図8(b)のブロックb1の処理では、ラインL11の書き換え処理が終わってから、ラインL11の右端の画素の第1の画素情報を一時的に所定の記憶領域に退避させてから、ラインL12の書き換え処理に移る。従って、ブロックb1を構成する画素の第1の画素情報全てについて書き換えを完了するまでに第1の画素情報を所定の記憶領域に一時的に退避させる処理を4回行う必要がある。
そして、ブロックb1を構成する複数の画素の第1の画素情報の書き換え処理を完了して、ブロックb1の右側に隣接するブロックb2を構成する画素の第1の画素情報を書き換える際には、各ラインL11,L12,L13,L14を処理する毎に、ブロックb1の書き換えの際に所定の記憶領域に退避させておいた第1の画素情報を、再び読み出して書き換え処理を行う必要がある。従って、ブロックb2を構成する画素の第1の画素情報全てについて書き換えを完了するまでに第1の画素情報を読み出す処理を4回行う必要がある。
つまり、図8(b)に示すように、第1のアクセスパターンがブロック形状に設定されていると、図8(a)に示すように、第1のアクセスパターンが直線状に設定されている場合に比べて、書き換えた第1の画素情報を一時的に所定の記憶領域に退避させる処理と退避させた第1の画素情報を読み出す処理とを行う必要がある分、書き換え処理の効率が低下してしまう。
これに対して、本実施の形態では、塗り潰し処理において、ブロック形状(例えば、縦4画素×横4画素)の第1のアクセスパターンを使用するとともに、処理装置1020が、第1のアクセスパターンでアクセスする各ブロックb1,b2,b3,b4について、図8(c)の矢印で示すように、縦方向に並列した4本のラインL11,L12,L13,L14を構成する第1の画素情報について同時に書き換えを行う。
つまり、ブロックb1に対して書き換え処理を完了した後、ブロックb1の右端に位置する縦4画素分の第1の画素情報全てを所定の記憶領域に一度に退避させる処理を1回だけ行い、次に、当該ブロックb1の右側に隣接するブロックb2の第1の画素情報を書き換える処理を行う際に、所定の記憶領域からブロックb1の右端に位置する縦4画素分のステンシル値全てを読み出す読み出し処理を1回だけ行うだけでよい。よって、図8(b)に示した例に比べて、第1の画素情報を所定の記憶領域に一時的に退避させる処理と所定の記憶領域から第1の画素情報を読み出す処理とを行う回数を低減することができるので、図8(b)に示した例に比べて、書き換え効率の低下を抑制することができる。
また、塗り潰し処理部1004は、ステンシルバッファ1007への累積アクセス回数をカウントしてフレームデータ生成部1013に出力する機能も有する。
<2−2−5>フレームデータ生成部
フレームデータ生成部1013は、塗り潰し処理部1004から入力されるステンシルデータの一部から、第2の画素情報を生成する。
ここで、第2の画素情報は、各画素の不透明度(アルファ値)を反映する値(以下、カバレッジ値と称す)を示す。例えば、カバレッジ値が、1であれば不透明度が最も高く、カバレッジ値が1よりも小さくなるにつれて、不透明度が低下していく。第2の画像のエッジ部分について、不透明度が適宜設定されることにより、第2の画像のエッジ部分に生じるエイリアシングが抑制される。
カバレッジ値は、第2の画像を構成する画素1個分の第2の画素情報の生成に使用される第1の画素情報のうちステンシル値“1”を示す第1の画素情報の個数を反映している。
例えば、塗り潰し処理部1004は、アンチエイリアスパターンが縦4画素×横4画素に設定されている場合、当該アンチエイリアスパターンの中にステンシル値が“+1“である画素の数を計算する。例えば、縦4画素×横4画素のアンチエイリアスパターンの中にステンシル値が“+1“の画素が5つ含まれていれば、カバレッジ値は5/16になる。
第1の画像の各画素のステンシル値が、図9(a)に示すように設定されているとし、アンチエイリアスパターンが縦4画素×横4画素とすると、対応する第2の画像の一部の領域における各画素のカバレッジ値は、それぞれ図9(b)に示すようになる。
フレームデータ生成部1013は、塗り潰し処理部1004は、第1のアクセスパターンを使用して、図10に示すように、第1の画像に対して横方向にずらしていく形で、ステンシルデータにアクセスしてステンシルデータの一部を読み出すと、図10に示すように、第1の画像における第1のアクセスパターンの位置に対応する第2の画像上における位置のフレームデータの一部を順番に生成していく。
フレームデータ生成部1013は、予めステンシルバッファ1007に格納されているステンシルデータの大きさに関する情報を保持する機能を有し、当該ステンシルデータの大きさに関する情報と、塗り潰し処理部1004から入力されるステンシルバッファ1007の累積アクセス回数と、パターン記憶部1009から取得した第1のアクセスパターンに基づいて、ステンシルデータの全部に対応するフレームデータの一部の全てをフレームデータ書き込み部1014に出力したか否かを判断する機能を有する。
<2−2−6>アクセスパターン設定部
アクセスパターン設定部1005は、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、フレームバッファ1008に対して、1回にアクセスする複数の第2の画素情報に対応する画素の配置パターンを示す第2のアクセスパターンを設定する。
図11のように、第1のアクセスパターンが、縦方向の画素数を2N、横方向の画素数を2K(ブロック形状又は直線形状)に設定され、アンチエイリアスパターンが、縦方向の画素数を2M、横方向の画素数を2Jに設定されている場合、アクセスパターン設定部1005は、第2のアクセスパターンを縦方向の画素数を2N−M、横方向の画素数を2K−Jの2J+M倍(ブロック形状又は直線形状)に設定する。ここで、N≧M、且つ、K≧Jの条件が成立している。つまり、第1のアクセスパターンに含まれる画素数と、第2のアクセスパターンに含まれる画素数とがいずれも2N+K個に設定されていることになる。
第1のアクセスパターン(縦2N画素×横2K画素)の中に、アンチエイリアスパターン(縦2M画素×横2J画素)が、縦方向に2N−M組、横方向に2K−J組だけ入ることになるので、ステンシルバッファ1007へのアクセス効率を向上させることができる。
例えば、図12のように、エッジ処理部1003および塗り潰し処理部1004が、縦方向の画素数が23、横方向の画素数が23の第1のアクセスパターンを使用し、フレームデータ生成部1013が、縦方向の画素数が22、横方向の画素数が22のアンチエイリアスパターンを使用する場合、アクセスパターン設定部1005が、第2のアクセスパターンを縦方向の画素数を21、横方向の画素数を21の24倍である25に設定する。
アクセスパターン設定部1005は、第2のアクセスパターンを設定するとともに、フレームデータ書き込み部1014がフレームバッファ1008にアクセスする回数、も設定する。なお、アクセスパターン設定部1005は、第1のアクセスパターンおよび算出された第2のアクセスパターンからステンシルバッファ1007およびフレームバッファ1008それぞれへのアクセス回数(アクセス頻度)を算出して設定する。
第1のアクセスパターンが、縦方向の画素数を2N、横方向の画素数を2K(ブロック形状又は直線形状)に設定され、第2のアクセスパターンが、縦方向の画素数を2N−M、横方向の画素数を2K−Jの2J+M倍(ブロック形状又は直線形状)に設定され、ステンシルバッファ1007およびフレームバッファ1008へのアクセスの際のメモリバンド幅が同じであるとすると、アクセスパターン設定部1005は、メモリバンド幅が2N+K画素分、ステンシルバッファ1007への1回のアクセスで生成できるフレームデータの一部が縦2N−M画素×横2K−J画素分なので、ステンシルバッファ1007へ2J+M回アクセスするとフレームバッファ1008へ1回アクセスするように設定する。
図13に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横4画素に設定されているとすると、第2のアクセスパターンを縦1画素×横16画素に設定するとともに、フレームバッファ1008へのアクセス回数を、ステンシルバッファ1007へ16回アクセスする毎にフレームバッファ1008へ1回アクセスするように設定する。そうすると、エッジ処理部1003によるエッジ処理および塗り潰し処理部1004による塗り潰し処理それぞれにおいて、処理装置1020が、ステンシルバッファに16回アクセスすることにより、高解像度の第1の画像上における縦4画素×横64画素の領域に相当するステンシルデータの一部が読み出される。次に、フレームデータ生成部1013によるフレームデータの生成処理において、当該ステンシルデータの一部から第1の画像よりも低解像度の第2の画像上における縦1画素×横16画素の領域に相当するフレームデータの一部を生成すると、フレームデータ書き込み部1014によるフレームデータ書き込み処理において、処理装置1020が、フレームバッファ1008に1回アクセスすることにより、第2の画像上における縦1画素×横16画素の領域に相当するフレームデータの一部がフレームバッファ1008に書き込まれる。
図14(a)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横4画素に設定されているとすると、第2のアクセスパターンを縦1画素×横16画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでに、ステンシルバッファ1007へアクセスする回数(アクセス回数)を16回に設定する。
図14(b)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横4画素に設定されているとすると、第2のアクセスパターンを縦2画素×横8画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでに、ステンシルバッファ1007へアクセスする回数(アクセス回数)を8回に設定する。
図14(c)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横2画素に設定されているとすると、第2のアクセスパターンを縦1画素×横16画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を8回に設定する。
図14(d)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横2画素に設定されているとすると、第2のアクセスパターンを縦2画素×横8画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を4回に設定する。
図14(e)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦1画素×横1画素、つまり、アンチエイリアシングを行わないように設定されているとすると、第2のアクセスパターンを縦4画素×横4画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を1回に設定する。
フレームデータ書き込み部1014は、アクセスパターン設定部1005により設定された第2のアクセスパターンに従って、図10(b)に示すように、第2の画像上で第2のアクセスパターンを横方向にずらしていく形で、フレームバッファ1008における対応する記憶領域にアクセスしていくことにより、第2の画素情報をフレームバッファ1008に順次書き込む。
<2−2−7>フレームデータ書き込み部および描画部
フレームデータ書き込み部1014は、フレームデータ生成部1013から入力される複数の第2の画素情報を少なくとも第2のアクセスパターンに相当する分だけ一時的に保持しておくことができる第2の画素情報保持手段(図示せず)を有する。なお、第2の画素情報保持手段は、例えば、主記憶装置上の一部の記憶領域やレジスタ等で実現されている。
描画部1010は、フレームバッファ1008に格納されたフレームデータをディスプレイ1015に描画する。
<2−3>その他
パターン記憶部1009は、レジスタの集合からなり、第1のアクセスパターンに関する情報と、アンチエイリアスパターンに関する情報とをレジスタ毎に保持している。例えば、第1のアクセスパターンに関する情報として、第1の画像における縦4画素×横4画素のブロック形状の内側にある複数の画素に対応するステンシルデータの一部にアクセスすることを示す情報を保持する。
パターン入力部1012は、例えば、図15に示すように、ユーザが画面上から数値入力可能なユーザインターフェースからなり、ユーザがパターン記憶部1009に第1のアクセスパターンやアンチエイリアスパターンに関する情報を格納する際に使用される。図11に示すユーザインターフェースでは、入力欄1012a1,1012a2それぞれに、乗数(例えば、入力欄1012a1に2、入力欄1012a2に2)を入力すると、第1のアクセスパターンを22画素×22画素(=4画素×4画素)に設定することができる。また、入力欄1012b1,1012b2それぞれに、乗数(例えば、入力欄1012b1に2、入力欄1012b2に2)を入力すると、アンチエイリアスパターンを22画素×22画素(=4画素×4画素)に設定することができる。
結局、本実施の形態では、第2のアクセスパターンおよびフレームバッファ1008へのアクセス頻度を適宜設定することにより、アクセス効率を向上させることができるので、フレームバッファ1008への1回のアクセスで転送するデータ量(メモリバンド幅)を変更するような制御が不要となる。
<3>動作
以下、本実施の形態の動作について説明する。
<3−1>全体動作
本実施の形態に係るグラフィクス描画装置の全体動作について図16に基づいて説明する。
まず、ベクターデータ入力部1001が、入力データバッファ1006に記憶されているベクターデータを読み込み(ステップS1)、曲線分割部1002に出力すると、曲線分割部1002が、ベクターデータ入力部1001から入力されるベクターデータに基づいて線分データを生成し(ステップS2)、当該線分データをエッジ処理部1003に出力する。
次に、エッジ処理部1003が、曲線分割部1002から入力される複数の線分データに基づいて、第1のアクセスパターンでステンシルバッファ1007にアクセスして、エッジ処理を行う(ステップS3)。このとき、アクセスパターン設定部1005は、パターン記憶部1009から取得した第1のアクセスパターンとアンチエイリアスパターンとに基づいて第2のアクセスパターンおよびステンシルバッファ1007およびフレームバッファ1008それぞれへのアクセス回数を設定するサブルーチンを呼び出す(ステップS4)。
その後、塗り潰し処理部1004が読み出したステンシルデータからフレームデータ生成部1013がフレームデータの一部を生成し、当該フレームデータの一部をフレームデータ書き込み部1014がフレームバッファ1008に書き込むサブルーチンを呼び出す(ステップS5)。以下、フレームデータの一部の生成およびフレームデータの一部の書き込みをフレームデータ処理として説明を進める。
次に、フレームデータ生成部1013が、ステンシルデータの大きさと、塗り潰し処理部1004から出力される塗り潰し処理部1004のステンシルバッファ1007への累積アクセス回数と、パターン記憶部1009から読み出した第1のアクセスパターンとに基づいて、ステンシルデータの全部に対応するフレームデータの一部が全てフレームバッファ1008に出力されたか否かを判断することにより、当該フレームデータの一部が全てフレームバッファ1008に書き込まれたか否かを判断する(ステップS6)。
ステップS6において、まだ、ステンシルデータの全部に対応するフレームデータの一部が全てフレームバッファ1008に書き込まれていないと判断すると(ステップS6:No)、再び、ステップS5へ移行する。
一方、ステップS6において、ステンシルデータの全部に対応するフレームデータの一部が全てフレームバッファ1008へ書き込まれたと判断すると(ステップS6:Yes)、描画部1010が、フレームバッファ1008からフレームデータを取得して、当該フレームデータをディスプレイ1015に描画する(ステップS7)。
<3−2>第2のアクセスパターンの設定動作
次に、本実施の形態に係るグラフィクス描画装置1000の第2のアクセスパターンの設定を行うサブルーチンを図17に基づいて説明する。
まず、パターン記憶部1009から第1のアクセスパターンを取得する(ステップS41)と、第1のアクセスパターンの画素数2N+Kから、フレームバッファ1008へアクセスする際のメモリバンド幅を第2の画素情報2N+K画素分の大きさに設定する(ステップS42)。
次に、パターン記憶部1009からアンチエイリアスパターンを取得して(ステップS43)、第1のアクセスパターンにおける縦方向の画素数2Nをアンチエイリアスパターンの縦方向の画素数2Mで除する演算を行い、算出された画素数2N−Mを第2のアクセスパターンにおける縦方向の画素数に設定する(ステップS44)。
その後、フレームバッファ1008にアクセスする際のメモリバンド幅に相当する画素数2N+Kを第2のアクセスパターンにおける横方向の画素数2N−Mで除する演算を行い、算出された画素数2K+Mを第2のアクセスパターンにおける横方向の画素数に設定する(ステップS45)。
次に、第1のアクセスパターンにおける横方向の画素数2Kをアンチエイリアスパターンにおける横方向の画素数2Jで除する演算を行い、算出された画素数2K−Jに第2のアクセスパターンにおける縦方向の画素数2N−Mを積算することにより、ステンシルバッファ1007への1回のアクセスでフレームデータ生成部1013が生成するフレームデータの一部の画素数2N−M+K−Jを算出し(ステップS46)、メモリバンド幅2N+Kを当該画素数2N−M+K−Jで除する演算を行い、算出された値を、フレームバッファ1008に1回アクセスするまでにステンシルバッファ1007にアクセスする回数(アクセス回数)に設定する(ステップS47)。
最後に、第2のアクセスパターンおよびアクセス回数をフレームデータ書き込み部1014に対して出力する(ステップS48)。
<3−3>フレームデータ処理における動作
本実施の形態に係るグラフィクス描画装置1000のフレームデータの一部の生成およびフレームデータの書き込み処理(フレームデータ処理)を行うサブルーチンを図18に基づいて説明する。
まず、塗り潰し処理部1004が、塗り潰し処理を行うとともに、パターン記憶部1009から取得した第1のアクセスパターンに従って、ステンシルバッファ1007に格納されたステンシルデータの一部を読み出し、フレームデータ生成部1013に出力する(ステップS51)。
次に、フレームデータ生成部1013が、塗り潰し処理部1004から出力されるステンシルデータの一部から第2の画素情報を生成し、フレームデータ書き込み部1014に出力する(ステップS52)。このとき、フレームデータ書き込み部1014は、フレームデータ生成部1013から入力される第2の画素情報を第2の画素情報保持手段に格納していく(ステップS53)。
そして、フレームデータ書き込み部1014が、第2の画素情報保持手段に第2のアクセスパターンに相当する分の複数の第2の画素情報が格納されたか否かを判断する(ステップS54)。ここにおいて、フレームデータ書き込み部1014は、アクセスパターン設定部1005から出力されたアクセス回数(フレームデータ書き込み部1014がフレームバッファ1008に1回アクセスするまでに、塗り潰し処理部1004が、ステンシルバッファ1007にアクセスする回数)に基づいて判断する。
ステップS54において、フレームデータ書き込み部1014が、第2の画素情報保持手段に、まだ、第2のアクセスパターンに相当する分の複数の第2の画素情報が格納されていないと判断すると(ステップS54:No)、再度、第1のアクセスパターンに従って、ステンシルバッファ1007に1回アクセスしてステンシルデータの一部を読み出す(ステップS51)。
一方、ステップS54において、フレームデータ書き込み部1014が、第2の画素情報保持手段に、第2のアクセスパターンに相当する分の複数の第2の画素情報が格納されたと判断すると(ステップS54:Yes)、フレームデータ書き込み部1014は、第2のアクセスパターンに従って、フレームバッファ1008に1回だけアクセスして、第2の画素情報保持手段に格納された複数の第2の画素情報よりなるフレームデータの一部をフレームバッファ1008に書き込む(ステップS55)。ここで、フレームデータ書き込み部1014は、フレームデータの一部の書き込みが完了すると、第2の画素情報保持手段の内容を消去する。
<実施の形態2>
以下、本実施の形態について説明する。なお、動作は実施の形態1と同様なので説明を省略する。
・ 構成
本実施の形態のグラフィクス描画装置1000は、実施の形態1の構成と略同様であって、エッジ処理部1003、塗り潰し処理部1004、フレームデータ生成部1013、アクセスパターン設定部1005およびフレームデータ書き込み部1014の機能のみが相違する。
本実施の形態では、塗り潰し処理部1004が、図19に示すように、第1のアクセスパターンを使用して、第1の画像に対して縦方向にずらしていく形で、ステンシルデータにアクセスしてステンシルデータの一部を読み出し、フレームデータ生成部1013が、図19に示すように、第1の画像における第1のアクセスパターンの位置に対応する第2の画像上の位置の第2の画素情報を順番に生成していく。
アクセスパターン設定部1005は、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、前記フレームバッファに対して、1回にアクセスする複数の第2の画素情報に対応する画素の配置パターンを示す第2のアクセスパターンを設定する第2のアクセスパターンを設定する。
ここで、エッジ処理部1003および塗り潰し処理部1004が、縦方向の画素数が2N、横方向の画素数が2K(ブロック形状又は直線形状)の第1のアクセスパターンを使用し、フレームデータ生成部1013が、縦方向の画素数が2M、横方向の画素数が2Jのアンチエイリアスパターンを使用する場合、アクセスパターン設定部1005が、第2のアクセスパターンを縦方向の画素数を2N−Mの2M+J倍、横方向の画素数を2K−J(ブロック形状又は直線形状)に設定する。ここで、N≧M、且つ、K≧Jの条件が成立している。つまり、第1のアクセスパターンに含まれる画素数と、第2のアクセスパターンに含まれる画素数とがいずれも2N+K個に設定されていることになる。
また、アクセスパターン設定部1005は、第2のアクセスパターンを設定するとともに、フレームデータ書き込み部1014がフレームバッファ1008にアクセスする回数、も設定する。
図20(a)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横4画素に設定されているとすると、第2のアクセスパターンを縦16画素×横1画素に設定するとともに、フレームバッファ1008への1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を16回に設定する。
図20(b)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横2画素に設定されているとすると、第2のアクセスパターンを縦8画素×横2画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を8回に設定する。
図20(c)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横4画素に設定されているとすると、第2のアクセスパターンを縦16画素×横1画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を8回に設定する。
図20(d)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横2画素に設定されているとすると、第2のアクセスパターンを縦8画素×横2画素に設定するとともに、フレームバッファ1008へ1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を4回に設定する。
図20(e)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦1画素×横1画素、つまり、アンチエイリアシングを行わないように設定されているとすると、第2のアクセスパターンを縦4画素×横4画素に設定するとともに、フレームバッファ1008に1回アクセスするまでにステンシルバッファ1007へアクセスする回数(アクセス回数)を1回に設定する。
フレームデータ書き込み部1014は、アクセスパターン設定部1005により設定された第2のアクセスパターンに従って、図19に示すように、第2の画像上で第2のアクセスパターンを縦方向にずらしていく形で、フレームバッファ1008における対応する記憶領域にアクセスしていくことにより、第2の画素情報をフレームバッファ1008に順次書き込む。
結局、本実施の形態では、第2のアクセスパターンおよびフレームバッファ1008へのアクセス頻度を適宜設定することにより、アクセス効率を向上させることができるので、フレームバッファ1008への1回のアクセスで転送するデータ量(メモリバンド幅)を変更するような制御が不要となる。
<実施の形態3>
以下、本実施の形態について説明する。
<1>構成
本実施の形態のグラフィクス描画装置1000は、実施の形態1の構成と略同様であって、アクセスパターン設定部1005の機能およびフレームバッファ1008が相違する。なお、アクセスパターン設定部1005は、実施の形態1と同様に、処理装置1020が適宜のプログラムを実行することにより実現されている。
アクセスパターン設定部1005は、第1のアクセスパターンとアンチエイリアスパターンとに基づいて、複数の第2の画素情報に対応する第2のアクセスパターンを設定する。
フレームバッファ1008は、処理装置1020からの要求に応じてバースト長を変更することができる可変バースト長機能を有するDRAMにより構成されている。
ここで、図21に示すように、第1のアクセスパターンが、縦方向の画素数を2N、横方向の画素数を2K(ブロック形状又は直線形状)に設定され、アンチエイリアスパターンが、縦方向の画素数を2M、横方向の画素数を2Jに設定されている場合、アクセスパターン設定部1005が、第2のアクセスパターンを縦方向の画素数を2N−M、横方向の画素数を2K−J(ブロック形状又は直線形状)に設定する。ここで、N≧M、且つ、K≧Jの条件が成立している。
図22に示すように、第1のアクセスパターンが、縦方向の画素数を23、横方向の画素数を23に設定され、アンチエイリアスパターンが、縦方向の画素数を22、横方向の画素数を22に設定されている場合、アクセスパターン設定部1005が、第2のアクセスパターンを縦方向の画素数を21、横方向の画素数を21に設定する。
アクセスパターン設定部1005は、第2のアクセスパターンに基づいてフレームバッファ1008にアクセスする際のメモリバンド幅を変更する。例えば、第1のアクセスパターンが16画素(縦4画素×横4画素)に設定されていると、エッジ処理および塗り潰し処理において、処理装置1020は、ステンシルバッファ1007からメモリバンド幅16画素分(図23(a)のデータData1乃至データData16)の設定でステンシルデータの一部がバースト転送される。ここで、アンチエイリアスパターンが、縦2画素×横2画素に設定されているとすれば、フレームデータ書き込み処理において、処理装置1020は、フレームバッファ1008に対して、メモリバンド幅4画素分(図23(b)のデータData21乃至データData24)の設定でフレームデータの一部をバースト転送する。
次に、アクセスパターン設定部1005の機能について説明する。
図24(a)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横4画素に設定されているとすると、第2のアクセスパターンを縦1画素×横16画素に設定するとともに、フレームバッファ1008にアクセスする際のメモリバンド幅を1画素分に設定する。
図24(b)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横4画素に設定されているとすると、第2のアクセスパターンを縦2画素×横8画素に設定するとともに、フレームバッファ1008へアクセスする際のメモリバンド幅を2画素分に設定する
図24(c)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦4画素×横2画素に設定されているとすると、第2のアクセスパターンを縦1画素×横16画素に設定するとともに、フレームバッファ1008へアクセスする際のメモリバンド幅を2画素分に設定する。
図24(d)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦2画素×横2画素に設定されているとすると、第2のアクセスパターンを縦2画素×横8画素に設定するとともに、フレームバッファ1008へアクセスする際のメモリバンド幅を4画素分に設定する。
図24(e)に示すように、第1のアクセスパターンが縦4画素×横4画素、アンチエイリアスパターンが縦1画素×横1画素、つまり、アンチエイリアシングを行わないように設定されているとすると、第2のアクセスパターンを縦4画素×横4画素に設定するとともに、フレームバッファ1008へアクセスする際のメモリバンド幅を16画素分に設定する。ここで、メモリバンド幅は変更しない。
フレームデータ書き込み部1014は、フレームバッファ1008に対して、アクセスパターン設定部1005により設定された第2のアクセスパターンに対応するフレームデータの一部が格納される記憶領域毎にアクセスすることによりフレームデータ生成部1013により生成されたフレームデータをフレームバッファ1008に書き込むフレームデータ書き込み処理を行う。また、フレームデータ書き込み部1014によるフレームデータ書き込み処理では、前述のエッジ処理および塗り潰し処理と同様に、フレームバッファ1008と処理装置1020との間でのデータ転送をバースト転送により行っている。
描画部1010は、フレームバッファ1008にアクセスしてフレームデータを取得してディスプレイ1015に描画する。
結局、本実施の形態では、フレームデータ書き込み処理において、フレームデータ生成部1013がステンシルバッファ1007への1回のアクセスで読み出したステンシルデータの一部からフレームデータ生成部1013が生成した複数の第2の画素情報に相当する大きさに合わせて、フレームデータ書き込み部1014が、フレームバッファ1008に対する1回のアクセスでフレームバッファ1008に書き込む際のメモリバンド幅を変更することができるので、実施の形態1および2のようにフレームデータ書き込み部1014に第2の画素情報保持手段(図示せず)を設ける必要がなくなる。
<3>動作
本実施の形態のグラフィクス描画装置1000は、実施の形態1と略同様であり、第2のアクセスパターンを設定するサブルーチンおよびフレームデータの一部の生成およびフレームデータの書き込みを行うフレームデータ処理のサブルーチンが実施の形態1と相違する。以下、第2のアクセスパターンの設定を行うサブルーディンおよびフレームデータの一部の生成およびフレームデータの書き込みを行うフレームデータ処理のサブルーディンについて説明する。
<3−1>第2のアクセスパターンの設定動作
次に、本実施の形態に係るグラフィクス描画装置1000の第2のアクセスパターンの設定を行うサブルーチンを図25に基づいて説明する。
まず、パターン記憶部1009から第1のアクセスパターンを取得するとともに(ステップS412)、アンチエイリアスパターンを取得する(ステップS422)。
次に、第1のアクセスパターンにおける縦方向の画素数2Nをアンチエイリアスパターンの縦方向の画素数2Mで除する演算を行い、算出された画素数2N−Mを第2のアクセスパターンにおける縦方向の画素数に設定するとともに(ステップS432)、第1のアクセスパターンにおける縦方向の画素数2Nをアンチエイリアスパターンの縦方向の画素数2Mで除する演算を行い、算出された画素数2N−Mを第2のアクセスパターンにおける縦方向の画素数に設定する(ステップS442)。
最後に、第2のアクセスパターンをフレームデータ書き込み部1014に対して出力する(ステップS452)。
<3−2>フレームデータ処理における動作
次に、本実施の形態に係るグラフィクス描画装置1000のフレームデータの一部の生成およびフレームデータの書き込み処理を行うフレームデータ処理のサブルーチンを図26に基づいて説明する。
塗り潰し処理部1004が、塗り潰し処理を行うとともに、パターン記憶部1009から取得した第1のアクセスパターンに従って、ステンシルバッファ1007に格納されたステンシルデータの一部を読み出し、フレームデータ生成部1013に出力する(ステップS512)。
次に、フレームデータ生成部1013が、塗り潰し処理部1004から出力されるステンシルデータの一部から複数の第2の画素情報を生成し、フレームデータ書き込み部1014に出力する(ステップS522)。
その後、処理装置1020からフレームバッファ1008に対してバースト長可変要求を行い、メモリバンド幅(バースト長)をフレームデータ生成部1013により生成され、フレームデータ書き込み部1014に入力された第2の画素情報に相当する大きさに設定する(ステップS532)。具体的には、フレームデータ生成部1013が、塗り潰し処理部1004がステンシルバッファ1007に1回のアクセスで読み出してフレームデータ生成部1013に出力したステンシルデータの一部から生成した画素数2N−M+K−J分の第2の画素情報に相当する大きさに設定する。
最後に、フレームデータ書き込み部1014が、第2のアクセスパターンに従って、フレームバッファ1008に1回だけアクセスして、第2の画素情報保持手段に格納された複数の第2の画素情報よりなるフレームデータの一部をフレームバッファ1008に書き込む(ステップS542)。
<変形例>
(1)前述の実施の形態1乃至3では、入力データバッファ1006、ステンシルバッファ1007、フレームバッファ1008は、物理的に異なるメモリで構成されている例について説明したが、これらは物理的に同一のメモリで構成されていて、異なる記憶領域に配置されてなるものであってもよい。
また、本変形例において、ある程度の大きさのデータを一時的に蓄えることができるキャッシュメモリ(図示せず)を設けてもよい。
これによれば、処理装置1020のメモリへのアクセスが競合することによって生じるレイテンシの増加を抑制することができる。
(2)前述の実施の形態1乃至3では、ステンシルバッファ1007とフレームバッファ1008とが、物理的に別個のDRAMから構成される例について説明したが、これに限定されるものではなく、例えば、可変バースト長機能を有する1つのDRAMを用い、当該DRAMの中にステンシルバッファ1007として用いる記憶領域と、フレームバッファ1008として用いる記憶領域を設けてなる構成とし、処理装置1020がステンシルバッファ1007として用いる記憶領域にアクセスする際のバースト長と、フレームバッファ1008として用いる記憶領域にアクセスする際のバースト長を変更する構成としてもよい。
本変形例によれば、1つのDRAMでステンシルバッファ1007とフレームバッファ1008とを構成することができるので、グラフィクス描画装置内におけるDRAM等のメモリを配設するスペースを小さくすることができる。
(3)前述の実施の形態1乃至3では、曲線分割部1002が、ベクターデータから、点と点を結ぶ線分を生成する例について説明したが、これに限定されるものではなく、例えば、ベクター画像を表すベクターデータを、第1の画像の解像度レベルで互いに隣接した点の集合から構成される点データに変換する機能を有するものであっても良い。
この変形例によれば、直線の傾きデータ等が不要になるので、直線の傾き等を算出する処理が不要とすることができ、また、直線を表すデータと曲線を表すデータとを同じデータ形式で統一することができる。
(4)前述の実施の形態1乃至3におけるエッジ処理では、エッジを構成する線分の描画方向とステンシル値に加算する値との関係を、第1の画像に対してY軸の正の方向に線分を描画する場合、ステンシル値に+1(または、+1より大きい正の整数)を加算するように設定した例について説明したが、これに限定されるものではなく、例えば、第1の画像に対してY軸の正の方向に線分を描画する場合、ステンシル値に−1(または、−1より小さい負の整数)を加算するように設定したものであってもよい。
また、本変形例では、線分の始点から終点への向きとは無関係に、常に線分を第1の画像に対してY軸の正の方向(または、Y軸の負の方向)に線分を描画し、ステンシル値に加算する値の符号だけを、線分の始点から終点への向きに応じて変化させるようにしても良い。
(5)前述の実施の形態1乃至3における塗り潰し処理では、処理装置1020が、ステンシルバッファ1007に対する一度のアクセス要求で、第1の画像の一部を構成する縦8画素×横8画素に対応するステンシルデータが格納された記憶領域にアクセスし、当該複数の画素に対応するステンシルデータの書き換えを行うと同時に、その都度、ステンシル値をフレームデータに出力する例について説明したが、これに限定されるものではなく、塗り潰し処理において、ステンシルデータの書き換えを実際には行わず、フレームデータ生成部1013にステンシル値を出力するだけであってもよい。
本変形例によれば、ステンシルデータの書き換えを行わないので、塗り潰し処理における処理量を低減することができる。
(6)前述の実施の形態1および2では、入力データバッファ1006には、第1の画像の解像度に対する第2の画像の解像度の比の分だけ、あらかじめ拡大したベクター画像を表すベクターデータが記憶されている例について説明したが、これに限定されるものではなく、例えば、ベクターデータ入力部1001にベクターデータが入力されると、ベクターデータ入力部1001が、第1の画像の解像度に対する第2の画像の解像度の比の分だけ拡大したベクター画像を表すベクターデータを生成する構成であってもよい。
本変形例によれば、ユーザが第1の画像の解像度を意識する必要がないので、使い勝手を向上させることができる。
(7)前述の実施の形態1乃至3では、第2の画像よりも解像度が高い第1の画像を生成するために、入力データバッファ1006には、あるベクター画像を第1の画像に対する第2の画像の解像度の比の分だけ、あらかじめ拡大したベクター画像を表すベクターデータが記憶されている例について説明したが、これに限定されるものではなく、例えば、エッジ処理部1003や塗り潰し処理部1004が、解像度の比の分だけ拡大したベクター画像を表すベクターデータを生成するとともに、当該ベクターデータに基づいてステンシルデータを生成してステンシルバッファ1007に記憶させるように構成されてなるものであってもよい。
(8)前述の実施の形態1乃至3では、第1のアクセスパターンが、縦方向の画素数をC1×2N、横方向の画素数をC2×2K(C1、C2は正の整数)に設定されてなるものであってもよい。この場合、アンチエイリアスパターンが、縦方向の画素数を2M、横方向の画素数を2Jに設定される場合、第1のアクセスパターン(縦C1・2N画素×横C2・2K画素)の中に、アンチエイリアスパターン(縦2M画素×横2J画素)が、縦方向にC1・2N−M組、横方向にC2・2K−J組だけ入ることになるので、ステンシルバッファ1007へのアクセス効率を向上させることができる。
(9)前述の実施の形態1乃至3では、ユーザがパターン入力部1012により1つのアンチエイリアスパターンをパターン記憶部1009に記憶する例について説明したが、これに限定されるものではなく、パターン記憶部1009に予め、図27に示すような、パターン管理テーブルTが記憶されてなるものであってもよい。ここで、アクセスパターン設定部1005は、パターン管理テーブルTを参照して、フレームデータ書き込み部1014の第2のアクセスパターンを変更するようにしてもよい。例えば、第1のアクセスパターンが「縦8画素×横8画素のブロック形状」であり、アンチエイリアスパターンが「縦4画素×横4画素」である場合には、アクセスパターン設定部1005は、パターン管理テーブルTの対応する識別IDを参照して、第2のアクセスパターンを「縦2画素×横2画素のブロック形状」に設定する。また、第1のアクセスパターンが「縦8画素×横8画素のブロック形状」であり、アンチエイリアスパターンが「縦4画素×横4画素」である場合には、アクセスパターン設定部1005は、パターン管理テーブルを参照して、第2のアクセスパターンを「縦2画素×横2画素のブロック形状」に設定する。
また、本変形例では、ユーザがパターン管理テーブルの識別IDを自由に選択できるように、パターン入力部1012が、図28に示すようなタッチパネルにより構成されるものであってもよい。ここで、図28に示すタッチパネル上に表示されたメモリバンド幅を選択する選択釦1012aと、アンチエイリアスパターンを選択する選択釦1012bとの組み合わせそれぞれが、パターン管理テーブルTの各識別IDに対応づけがなされており、ユーザが指定した組み合わせに対応した識別IDが選択されるようになっている。
よって、ユーザがタッチパネルの簡単な操作で容易に描画設定を行うことができるので、グラフィクス描画装置1000の使い勝手を向上させることができる。
また、前述の実施の形態1乃至3のグラフィクス描画装置では、第2の画像の解像度を高くすればエイリアシングの抑制効果が高くなるが、フレームデータの大きさが増加するので、フレームバッファ1008へのフレームデータの書き込み処理に時間を要してしまい、グラフィクス描画装置全体の処理速度が低下してしまう。一方、第2の画像の解像度を低くすればフレームデータの大きさが小さくなるので、フレームバッファ1008へのフレームデータの書き込み処理に要する時間が短縮され、グラフィクス描画装置全体の処理速度は向上するが、第2の画像の解像度が低下するのでエイリアシングの抑制効果が低下してしまう。即ち、エイリアシングの抑制効果とグラフィクス描画装置全体の処理速度の向上とはトレードオフの関係にある。
これに対して、本変形例では、ユーザーがアンチエイリアスパターンを自由に設定できるので、グラフィクス描画装置の使用目的に応じて、エイリアシングの抑制効果を向上させた画質重視の設定、若しくはグラフィクス描画装置全体の処理速度を向上させた処理速度重視の設定のいずれかを自由に選択できるようになる。
<補足>
本実施の形態のグラフィクス描画装置は、典型的には半導体集積回路であるLSIとして実現される。これらは個別に1チップ化されてもよいし、一部またはすべてを含むように1チップ化されても良い。ここではLSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。
また、集積回路化の手法はLSIに限るものではなく、専用回路または汎用プロセッサで実現しても良い。LSI製造後に、プログラムすることが可能なFPGA(Field
Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用しても良い。
さらには、半導体技術の進歩または派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行っても良い。バイオ技術の適応などが可能性として有り得る。
さらに加えて、本実施の形態のグラフィクス描画装置を集積化した半導体チップと、画像を描画するためのディスプレイとを組み合せて、様々な用途に応じた描画機器を構成することができる。特に、ベクターグラフィックスは文字(アウトラインフォント)を描画する手段としての利用価値が高いため、携帯電話やテレビ、デジタルビデオレコーダ、デジタルビデオカメラ、カーナビゲーション等における情報描画手段として、本発明を利用することが可能である。ディスプレイとしては、ブラウン管(CRT)の他、液晶やPDP(プラズマディスプレイパネル)、有機ELなどのフラットディスプレイ、プロジェクターを代表とする投射型ディスプレイなどと組み合わせることが可能である。
本発明のグラフィクス描画装置は、例えば、ベクター図形、特に文字(アウトラインフォント)を美しく、かつ省電力で高速に描画するための手段として、様々な用途に利用可能である。例えば、携帯電話や携帯音楽プレーヤー、デジタルカメラ、デジタルビデオカメラ等の電池駆動の携帯表示端末や、テレビ、デジタルビデオレコーダー、カーナビゲーション等の高解像度の情報表示機器におけるメニュー表示やWebブラウザ、エディタ、EPG、地図表示等における情報表示手段として利用価値が高い。
1000 グラフィクス描画装置
1001 ベクターデータ入力部
1002 曲線分割部
1003 エッジ処理部
1004 塗り潰し処理部(ステンシルデータ読み出し部)
1005 アクセスパターン設定部
1006 入力データバッファ
1007 ステンシルバッファ
1008 フレームバッファ
1009 パターン記憶部
1010 描画部
1012 パターン設定部
1013 フレームデータ生成部
1014 フレームデータ書き込み部
1015 ディスプレイ
T パターン管理テーブル