(57)【特許請求の範囲】
【請求項１】
所定形状を有するスプライトをフレームメモリへライン毎に書き込む描画装置において、
複数のスプライトデータが順次ライン毎に入力されると共に、各ライン上のピクセルを複数個ごとにブロック化し、入力されたラインについて各ブロック内の個々のピクセルがスプライトの表示される領域に対応したピクセルであるか否かを検出し、検出結果を各ピクセル毎に１ビットで表した第１のビット列を出力する検出手段と、
前記フレームメモリの各アドレスにスプライトの表示される領域に対応したデータが既に書き込まれていることを第２のビット列として記憶するマスクメモリと、
前記マスクメモリから読み出した第２のビット列と前記第１のビット列とを演算することにより新たにフレームメモリに書き込むべきビット情報を示す第３のビット列を出力し、この第３のビット列に基づいて前記フレームメモリへのスプライトデータの書き込みを制御すると共に、前記マスクメモリから読み出した第２のビット列と前記第１のビット列とを演算することにより前記フレームメモリの各アドレスにスプライトの表示される領域に対応したデータが書き込まれているか否かを示す第４のビット列を出力し、この第４のビット列を用いて前記マスクメモリを更新することにより、前記フレームメモリ上の前面に表示されるものから奥に表示されるものに向かって順次複数のスプライトを重ねて描画する書き込み制御手段とを設けたことを特徴とする描画装置。
【請求項２】
入力されるスプライトデータに対して所定の変換処理を施し、処理されたスプライトデータを、そのスプライト領域のライン上のアドレスと共に前記検出手段に供給する二次元描画エンジンを設け、前記検出手段は、前記アドレスに基づいて前記検出を行うことを特徴とする請求項１記載の描画装置。
【請求項３】
所定形状を有するスプライトをフレームメモリへライン毎に書き込む描画方法において、
複数のスプライトデータが順次ライン毎に入力されると共に、各ライン上のピクセルを複数個ごとにブロック化し、入力されたラインについて各ブロック内の個々のピクセルがスプライトの表示される領域に対応したピクセルであるか否かを検出し、検出結果を各ピクセル毎に１ビットで表した第１のビット列を出力し、
前記フレームメモリの各アドレスにスプライトの表示される領域に対応したデータが既に書き込まれていることを第２のビット列としてマスクメモリに記憶し、
前記マスクメモリから読み出した第２のビット列と前記第１のビット列とを演算することにより新たにフレームメモリに書き込むべきビット情報を示す第３のビット列を出力し、
この第３のビット列に基づいて前記フレームメモリへのスプライトデータの書き込みを制御すると共に、前記マスクメモリから読み出した第２のビット列と前記第１のビット列とを演算することにより前記フレームメモリの各アドレスにスプライトの表示される領域に対応したデータが書き込まれているか否かを示す第４のビット列を出力し、この第４のビット列を用いて前記マスクメモリを更新することにより、前記フレームメモリ上の前面に表示されるものから奥に表示されるものに向かって順次複数のスプライトを重ねて描画することを特徴とする描画方法。
【請求項４】
二次元描画エンジンを用いて入力されるスプライトデータに対して所定の変換処理を施し、処理されたスプライトデータとそのスプライト領域のライン上のアドレスとを得、このアドレスに基づいて前記検出を行うことを特徴とする請求項３記載の描画方法。
【請求項５】
所定形状を有するスプライトをフレームメモリへライン毎に書き込む描画装置で用いられるプログラムであって、
複数のスプライトデータが順次ライン毎に入力されると共に、各ライン上のピクセルを複数個ごとにブロック化し、入力されたラインについて各ブロック内の個々のピクセルがスプライトの表示される領域に対応したピクセルであるか否かを検出し、検出結果を各ピクセル毎に１ビットで表した第１のビット列を出力する検出処理と、
前記フレームメモリの各アドレスにスプライトの表示される領域に対応したデータが書き込まれていることを第２のビット列としてマスクメモリに記憶する記憶処理と、
前記マスクメモリから読み出した第２のビット列と前記第１のビット列とを演算することにより新たにフレームメモリに書き込むべきビット情報を示す第３のビット列を出力し、この第３のビット列に基づいて前記フレームメモリへのスプライトデータの書き込みを制御すると共に、前記マスクメモリから読み出した第２のビット列と前記第１のビット列とを演算することにより前記フレームメモリの各アドレスにスプライトの表示される領域に対応したデータが書き込まれているか否かを示す第４のビット列を出力し、この第４のビット列を用いて前記マスクメモリを更新することにより、前記フレームメモリ上の前面に表示されるものから奥に表示されるものに向かって順次複数のスプライトを重ねて描画する書き込み制御処理と
をコンピュータに実行させるためのプログラム。
【請求項６】
入力されるスプライトデータに対して所定の変換処理を施し、処理されたスプライトデータを、そのスプライト領域のライン上のアドレスと共に前記検出処理に供給する二次元描画エンジン処理を設け、前記アドレスに基づいて前記検出処理を行うことを特徴とする請求項５記載のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、スプライトをフレームメモリ上に描画する描画装置、方法及び描画装置におけるコンピュータが実行するプログラムに関するものである。
【０００２】
【従来の技術】
図１３はフレームバッファ（フレームメモリ）上に二次元スプライトを描画する従来の描画装置を概略的に示すブロック図である。尚、スプライト（sprite)とは、例えばコンピュータゲームのアニメーション等で用いられる絵の単位であり、通常は矩形で、その中に絵が描かれ、周囲が透明なバックグラウンドとなっている。
【０００３】
図１３において、スプライトバッファＡからスプライトデータを読み出し、二次元描画エンジン１０により拡大、縮小、回転等の処理をして、フレームバッファ２０に書き込む。この間にスプライトバッファＢに次のスプライトデータを書き込み、スプライトバッファＡの読み出しが終了すると、スプライトバッファＢを読み出してそのスプライトデータを二次元描画エンジン１０に供給する。スプライトバッファＡにはさらに次のスプライトデータの書き込みが行われる。このようにして、スプライトバッファＡ，Ｂに交互にスプライトデータの書き込みと読み出しが行われ、読み出されたスプライトデータは二次元描画エンジン１０で処理された後、フレームバッファ２０に書き込まれていく。フレームバッファ２０から読み出されたスプライトデータは、表示装置に送られて表示される。
【０００４】
フレームバッファ２０には、最も後ろに存在するスプライトの書き込みから開始し、順次に他のスプライトを重ねながら最も前面に存在するスプライトの書き込みまでが行われる。この書き込みのプライオリティは、予め別に設けられたアトリビュートテーブル（図示せず）に書き込まれており、このテーブルを参照することで決定している。
【０００５】
【発明が解決しようとする課題】
上述した従来の描画装置においては、アトリビュートテーブルを参照することにより、図１４に示すように、背景となるスプライトＡが先に書き込まれ、その上にスプライトＢが書き込まれる。この場合、スプライトＡとＢが重なった斜線の部分は二度描画されることになり、そのための消費電力や処理・時間が無駄となっていた。
【０００６】
本発明は上記の問題を解決するためになされたもので、二次元で定義されるスプライトを、視点に近いものから順に書き込むことにより、視点から遠いところにあるスプライトの重なった部分の書き込みを省き、書き込み時間のオーバーヘッド、消費電力を低減し、効率的な描画を行えるようにすることを目的としている。
【０００７】
【課題を解決するための手段】
上記の目的を達成するために、本発明による描画装置は、所定形状を有するスプライトをフレームメモリへライン毎に書き込む描画装置において、複数のスプライトデータが順次ライン毎に入力されると共に、各ライン上のピクセルを複数個ごとにブロック化し、入力されたラインについて各ブロック内の個々のピクセルがスプライト領域のピクセルであるか否かを検出し、検出結果を各ピクセル毎に１ビットで表した第１のビット列を出力する検出手段と、前記フレームメモリの各アドレスにデータが書き込まれたことを記憶するマスクメモリと、前記マスクメモリから読み出した第２のビット列と前記第１のビット列とを演算することにより新たにフレームメモリに書き込むべきビット情報を示す第３のビット列を出力し、この第３のビット列に基づいて前記フレームメモリへのスプライトデータの書き込みを制御すると共に、前記第３のビット列を用いて前記マスクメモリを更新することにより、前記フレームメモリ上の前面に表示されるものから奥に表示されるものに向かって順次複数のスプライトを重ねて描画する書き込み制御手段とを設けたものである。
【０００８】
また、本発明による描画方法は、所定形状を有するスプライトをフレームメモリへライン毎に書き込む描画方法において、複数のスプライトデータが順次ライン毎に入力されると共に、各ライン上のピクセルを複数個ごとにブロック化し、入力されたラインについて各ブロック内の個々のピクセルがスプライト領域のピクセルであるか否かを検出し、検出結果を各ピクセル毎に１ビットで表した第１のビット列を出力し、前記フレームメモリの各アドレスにデータが書き込まれたことをマスクメモリに記憶し、前記マスクメモリから読み出した第２のビット列と前記第１のビット列とを演算することにより新たにフレームメモリに書き込むべきビット情報を示す第３のビット列を出力し、この第３のビット列に基づいて前記フレームメモリへのスプライトデータの書き込みを制御すると共に、前記第３のビット列を用いて前記マスクメモリを更新することにより、前記フレームメモリ上の前面に表示されるものから奥に表示されるものに向かって順次複数のスプライトを重ねて描画するようにしたものである。
【０００９】
また、本発明によるプログラムは、所定形状を有するスプライトをフレームメモリへライン毎に書き込む描画装置で用いられるプログラムであって、複数のスプライトデータが順次ライン毎に入力されると共に、各ライン上のピクセルを複数個ごとにブロック化し、入力されたラインについて各ブロック内の個々のピクセルがスプライト領域のピクセルであるか否かを検出し、検出結果を各ピクセル毎に１ビットで表した第１のビット列を出力する検出処理と、前記フレームメモリの各アドレスにデータが書き込まれたことをマスクメモリに記憶する記憶処理と、前記マスクメモリから読み出した第２のビット列と前記第１のビット列とを演算することにより新たにフレームメモリに書き込むべきビット情報を示す第３のビット列を出力する演算処理と、この第３のビット列に基づいて前記フレームメモリへのスプライトデータの書き込みを制御すると共に、前記第３のビット列を用いて前記マスクメモリを更新することにより、前記フレームメモリ上の前面に表示されるものから奥に表示されるものに向かって順次複数のスプライトを重ねて描画する描画処理とをコンピュータに実行させるためのプログラムである。
【００１０】
【作用】
従って、本発明によれば、ライン毎に順次入力されるスプライトデータについて、各ライン上のピクセルを複数個毎にブロック化し、ラインについて各ブロック内の個々のピクセルがスプライト領域のピクセルであるか否かを検出し、検出結果を各ピクセル毎に１ビットで表した第１のビット列を出力すると共に、前記フレームメモリの各アドレスにデータが書き込まれたことをマスクメモリに記憶し、マスクメモリから読み出した第２のビット列と前記第１のビット列とを演算することにより新たにフレームメモリに書き込むべきビット情報を示す第３のビット列を出力し、この第３のビット列に基づいてフレームメモリへのスプライトデータの書き込みを制御すると共に、第３のビット列を用いてマスクメモリを更新することにより、フレームメモリ上の前面に表示されるものから奥に表示されるものに向かって順次複数のスプライトを重ねて描画し、この処理をスプライト毎に繰り返すことにより、フレームメモリ上の前面から奥に向かって二度書きすることなく、複数のスプライトを順次重ねて描画することができる。
【００１１】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
図１は本発明の実施の形態による描画装置を示すブロック図である。
図１において、本実施の形態は、図１３の二次元描画エンジン１０とフレームバッファ２０との間にマスク演算装置３０を設けたものである。マスク演算装置３０は、フレームバッファ２０のピクセル（画素）に既にスプライトの書き込みがあるか否かを判定するマスクメモリを内蔵し、このマスクメモリを書き込みの際に参照することにより、無駄な書き込みを省くためのものである。
【００１２】
図２はマスク演算装置３０の構成を示すブロック図である。
マスク演算装置３０は、入力レジスタであるY レジスタ３１、XRレジスタ３２、XLレジスタ３３と、XL＿S カウンタ３４、XL＿B カウンタ３５、COLOR レジスタ３６、COLOR セレクタ３７、BG＿COLOR レジスタ３８（BGはバックグラウンドを示す）と、マスク発生装置３９、マスクメモリ４０、書き込み制御装置４１とから構成される。
【００１３】
次に、二次元描画エンジン１０について図３を参照して説明する。
図３において、スプライト１は図示のように矩形を有し、実際に表示されるスプライト１ａと透明なバックグラウンド１ｂからなる。二次元描画エンジン１０は、このスプライト１に対して拡大、縮小、回転等の変換処理を行い、実際に描画するフレームバッファ２０上のアドレスを計算してマスク演算装置３０に出力する。即ち、図示のように、各スキャンラインを示すY 座標(Y1,Y2,Y3,Y4 ---)と、スプライト１の領域の左側の座標XL(XL1,XL2,XL3,XL4 ---) と、右側の座標XR(XR1,XR2,XR3,XR4 ---) を計算し、アドレスとして出力する。各アドレスは、図２のマスク演算装置３０における入力レジスタとしてのY レジスタ３１、XRレジスタ３２、XLレジスタ３３に入力される。
【００１４】
次に、本発明の第１の実施の形態によるフレームメモリとしてのフレームバッファ２０及びマスクメモリ４０の構成について図４（ａ）を参照して説明する。
図示のように、フレームバッファ２０、マスクメモり４０は、スキャンラインごとに、セクタ、ブロック、ピクセル（画素）、ビット（１画素のビット数）により階層的に構造化されている。１ラインは２h 個のセクタから構成され、１セクタは２k 個のブロックから構成され、１ブロックは２m 個のピクセルから構成され、１ピクセルは２n 個のビットから構成される。１ブロックは、フレームバッファ２０のデータバス幅に相当する。
図示の例では、１ピクセル＝１６ビット（ｎ＝４）、１ブロック＝８ピクセル（ｍ＝３）、１セクタ＝４ブロック（ｋ＝２）＝４×８ピクセル＝４×８×１６ビットとしている。従って、１ラインは２のｈ＋ｋ＋ｍ＋ｎ乗個のビットで構成されている。
【００１５】
次に、図２のマスク演算装置３０における入力レジスタ等について説明する。
図２において、二次元描画エンジン１０からは、各アドレスY, XL,XR、及びXLとXRとの間に存在するピクセルデータが送られてくる。XLとXRとの間に存在するピクセルデータは、１セクタごとにCOLOR レジスタ３６に書き込まれる。また、Y はY レジスタ３１に、XRはXRレジスタ３２に書き込まれる。XLはXLレジスタ３３に書き込まれた後、XL＿S,XL＿B の２つに分割される。 XL＿S はセクタアドレスを示し、XL＿B はブロックアドレスを示し、それぞれXL＿S カウンタ３４、XL＿B カウンタ３５に書き込まれる。
図４（ｂ）のようにh+k+m+n ビットを表現した場合に、[y:x] は図４（ｃ）で示すビットを表すものとすると、XL、XRがh+k+m+n ビットの場合、XLはXL＿S[h+k+m+n-1:k+m+n]と、XL＿B[k+m+n-1:m+n]とに分解される。 XL＿S カウンタ３４、XL＿B カウンタ３５には、XLの初期値の対応するセクタ及びブロックがそれぞれロードされる。
【００１６】
１ブロックの処理が終了すると、XL＿B カウンタ３５はインクリメントされる。また、 XE＿B カウンタ３５が１つのセクタの終了まで達すると、XL＿B カウンタ３５がインクリメントされると共に、XL＿S カウンタ３４もインクリメントされる。XLとXRを比較し、両者の値が等しくなるとそのラインの処理を終了する。比較はマスク発生装置３９で行われる。
【００１７】
次に、マスク演算装置３０における他のレジスタ及びカウンタ等について説明する。
図２において、BG＿COLOR レジスタ３８は、スプライト１のバックグラウンド１ｂとなるカラーデータ（透明）をストアする。COLOR レジスタ３６は、二次元描画エンジン１０からの１セクタ分のスプライトのカラーデータ（ピクセルデータ）を保持する。後述する図６にも示すように、セクタが更新されるに従って新たなセクタのカラーデータがストアされる。また、COLOR セレクタ３７は、COLOR レジスタ３６にストアされた１セクタ分のカラーデータから、１ブロックのカラーデータをブロックの左側から順に抽出して出力する。ブロックアドレスが更新されると、それに対応したブロックのカラーデータがXL＿B カウンタ３５の出力に応じて選択され、出力される。
【００１８】
図２においては、フレームバッファ２０にアクセスするためのY アドレス、セクタアドレス、ブロックアドレスが、Y レジスタ３１、XL＿S カウンタ３４、XL＿B カウンタ３５から供給されているが、ピクセルアドレスは供給されていない。これは、書き込み制御装置４１からの後述するPRC＿MSK パターンによりフレームバッファ２０への書き込みを制御するためである。即ち、上記PRC＿MSK により選択されたピクセルデータがフレームバッファ２０に書き込まれるためである。
【００１９】
図５は上記のことを説明するためのもので、図２のマスク演算装置３０の要部を示している。
図５において、フレームバッファ２０には、XL＿S カウンタ３４からセクタアドレスが、XL＿B カウンタ３５からブロックアドレスが供給されている。また、図において説明されるように、ピクセルアドレスは不要となっている。
【００２０】
次に、本発明の第１の実施の形態によるマスク発生装置３９について説明する。図６はマスク発生装置３９の構成を示すブロック図である。
マスク発生装置３９は、マスク演算装置３０におけるXRレジスタ３２、XLレジスタ３３、XL＿S カウンタ３４、XL＿B カウンタ３５、COLOR セレクタ３７、BG＿COLOR レジスタ３８の出力から、１ブロック内で、スプライトが可視である（即ち、バックグラウンドではない）ピクセルを検出し、検出結果を０又は１のビット列として出力する。０がバックグラウンド、１がスプライト内で可視であることを示す。
【００２１】
図６において、セクタスタートアドレス比較器４２は、XL＿ SとXLのセクタアドレスを比較し、アドレスが等しいときは１、そうでないときは０を出力する。
ブロックスタートアドレス比較器４３は、XL＿B とXLのブロックアドレスを比較し、アドレスが等しいときは１、そうでないときは０を出力する。
ＡＮＤ回路４４で、セクタスタートアドレス比較器４２とブロックスタートアドレス比較器４３の各出力の論理積をとることで、スタートフラグを出力する。
【００２２】
セクタエンドアドレス比較器４５は、XL＿S とXRのセクタアドレスを比較し、アドレスが等しいときは１、そうでないときは０を出力する。ブロックエンドアドレス比較器４６は、XL＿B とXRのブロックアドレスを比較し、アドレスが等しいときは１、そうでないときは０を出力する。
ＡＮＤ回路４７で、セクタエンドアドレス比較器４５とブロックエンドアドレス比較器４６の各出力の論理積をとることで、エンドフラグを出力する。
【００２３】
２m 個のピクセルデータ比較器４８〜５０は、COLOR セレクタ３７から入力された１ブロック内の各ピクセルカラーデータと、バックグラウンドに指定されているカラーデータを比較し、そのピクセルがバックグラウンドカラーと同じであるかどうかを調べる。ピクセルのカラーがバックグラウンドカラーと等しいときは０、そうでないときは１をBGN＿MSK として出力する。即ち、 BGN＿MSK ビットで０で示されるピクセルは、バックグラウンドカラーとなる。尚、スプライト領域外のデータとしてはバックグラウンドカラーが入力される。
【００２４】
カレントマスク計算装置５１は、現在入力されているブロックのうち、バックグラウンドでないピクセルを検出する。まず、ブロック内に存在するピクセルを、１ピクセルが１ビットのマスクパターンPAT＿MASKとして求める。マスクパターンPAT＿MSK はブロック内のピクセル数に等しく、２m ビットとなる。
PAT＿MSK の計算には、マスク発生装置３９からの上記スタートフラグ、エンドフラグ、XLレジスタ３３のピクセルアドレス部分であるXL[m+n-1:n] 、XRレジスタ３２のピクセルアドレス部分であるXR[m+n-1:n] が用いられる。
【００２５】
ｍ＝３とした場合の１ブロック内のマスクパターンPAT＿MSK の例を図７（ａ）〜（ｄ）に示す。図において、
（ａ）スタートフラグ＝１、エンドフラグ＝０の場合、XLのスタートアドレス有するピクセルがブロック内に存在する。
（ｂ）スタートフラグ＝０、エンドフラグ＝１の場合、XRのエンドアドレス有するピクセルがブロック内に存在する。
（ｃ）スタートフラグ＝１、エンドフラグ＝１の場合、XLのスタートアドレス、XRのエンドアドレスを有するピクセルがともにブロック内に存在する。
（ｄ）スタートフラグ＝０、エンドフラグ＝０の場合、XLのスタートアドレス、XRのエンドアドレスを有するピクセルはともにブロック内に存在しない。
これらは一例を示すものであり、XR,XL のデータの値により色々なデータに変わり得る。一般に表１のようになる。
【００２６】
【表１】
0003899977.tif 000002
【００２７】
上記のようにして計算されたPAT＿MSK と、２m 個のピクセルデータ比較器４８〜５０の出力BGN＿MSK との論理積を取ることで、カレントパターンCRN＿MSKを計算する。即ち、
CRN＿MSK ＝PAT＿MSK ＆BGN＿MSK となる。
【００２８】
次に、マスクメモリ４０と書き込み制御装置４１について図８を参照して説明する。
マスクメモリ４０は、フレームバッファ２０と同様のアドレスY 、セクタアドレスXL＿S 、ブロックアドレスXL＿B でアクセスされるメモリであり、データ幅が２m ビット、１ビットで１ピクセルを表す。
マスクメモリ４０は表示期間の最初にすべて０にクリアされる。０はその対応するフレームバッファ２０にまだスプライトが書き込まれていないことを示す。スプライトデータが書き込まれると、１が書き込まれる。
【００２９】
新しいブロックデータが入力されると、マスクメモリ４０から該当するブロックのマスクパターンOLD＿MSK が読み出される。 OLD＿MSK は、以前にそのブロック内のピクセルに書き込みがあったかどうかを示している。 OLD＿MSK は書き込み制御装置４１に送られ、ここで新しいブロックのカレントパターンCRN＿MSKを参照する。
【００３０】
書き込み制御装置４１では、CRN＿MSK とOLD＿MSK との論理和を求めることで、新たに書き込まれたピクセルに対応するビットをNEW＿MSK として、マスクメモリ４０の OLD＿MSK に上書きする形で書き込み保存する。CRN＿MSK から OLD＿MSK を参照して既に書き込まれているビットを取り除いた部分が、新たに入力されたブロックデータに寄与するピクセルとなり、それをプロセスパターンPRC＿MSK のビット列として計算する。即ち、
NEW＿MSK ＝CRN＿MSK ｜OLD＿MSK
PRC＿MSK ＝CRN＿MSK ＆！OLD＿MSK
である。尚、｜は論理和、＆は論理積、！はビットの反転を意味する。
書き込み制御装置４１は、このPRC＿MSK に基づいてスプライトデータのフレームバッファ２０への書き込みを制御する。
【００３１】
もし、PRC＿MSK がすべて０であれば、そのブロックは既にプライオリテイの高いスプライトによって描画済みであるので書き込む必要はない。その場合は次のブロックの処理に移る。もし、一つでもPRC＿MSK が１であれば、対応するピクセルがフレームバッファ２０に書き込まれる。
【００３２】
次に、フレームバッファ２０について説明する。
フレームバッファ２０は、１ブロック内のピクセル毎に書き込みが制御可能な構成とする。 PRC＿MSK がフレームバッファ２０の書き込みを制御する。
【００３３】
次に、上記構成による動作について図９を参照して説明する。
図９のように、あるスキャンラインｊにおいて、スプライト１の下にスプライト２を描画する場合について説明する。図示のように、スプライト１、２は横に細長い矩形であり、スプライト２がスプライト１より大きい。
XL＿1 は、スプライト１の外形（矩形）の左側のＸ座標であり、XLS＿1 は、スプライト１のバックグラウンドがなくなるＸ座標である。XRS＿1 は、スプライト１のバックグラウンドが始まるＸ座標であり、XR＿1 は、スプライト１の外形の右側のＸ座標である。同様に、XL＿2 は、スプライト２の外形（矩形）の左側のＸ座標であり、XLS＿2 は、スプライト２のバックグラウンドがなくなるＸ座標である。 XRS＿2 は、スプライト２のバックグラウンドが始まるＸ座標であり、XR＿2 は、スプライト２の外形の右側のＸ座標である。
【００３４】
ここでは、１ブロックが８ピクセルよりなり、１セクタが４ブロックからなる場合について説明する。
まず、アトリビュートテーブルを参照することにより、スプライト１がスプライト２よりも前面にあることがわかる。従って、二次元描画エンジン１０により、まずスプライト１の処理から開始される。
【００３５】
以下、処理順序に従って説明する。
・スプライト１、セクタｉ、ブロック０の処理
二次元描画エンジン１０から、スキャンラインｊ，XR＿1 ，XL＿1 の座標がマスク演算装置３０に送られ、それぞれ、Y レジスタ３１、XRレジスタ３２、XLレジスタ３３にストアされる。同時に、セクタ内の最初のピクセルデータが、COLOR レジスタ３６にストアされる。図示のようにスプライト１は１セクタ内に収まるため、全てのピクセルデータがCOLOR レジスタ３６にストアされる。
【００３６】
次に、XL＿S カウンタ３４、XL＿B カウンタ３５に、XL＿1 のセクタアドレス、ブロックアドレス部分がロードされる。このとき、スタートフラグ＝１、エンドフラグ＝０であり、最初のブロックであることがわかる。従って、スプライト１のブロック０のPAT＿MSKは、
PAT＿MSK ＝0000  1111となる。尚、スプライト領域外のデータはバックグラウンドカラーであるので、スプライト領域外のデータがバックグラウンドカラーでない場合には、このようなデータにはならない。
【００３７】
XL＿1 からXLS＿1 の間はバックグラウンドである。このため、２m 個のピクセルデータ比較器４８〜５０から出力されるBGN＿MSK は、
BGN＿MSK ＝0000  0000
また、マスクメモリ４０はクリアされているため、
OLD＿MSK ＝0000  0000となる。そして、
CRN＿MSK ＝ PAT＿MSK & BGN＿MSK
NEW＿MSK ＝ CRN＿MSK ｜OLD＿MSK
PRC＿MSK ＝ CRN＿MSK & ！OLD＿MSKが計算される。この計算による各マスクデータを表２に示す。
【００３８】
【表２】
0003899977.tif 000003
【００３９】
これにより、ブロック０内には描画すべきピクセルが存在しないことがわかる。この場合は、XL＿B カウンタ３５がインクリメントされ、すぐに次のブロックの処理に移る。
【００４０】
・スプライト１、セクタｉ、ブロック１の処理
次のブロック１では、スタートフラグ＝０かつエンドフラグ＝０である。この場合の各マスクデータは表３に示す通りとなる。
【００４１】
【表３】
0003899977.tif 000004
【００４２】
NEW＿MSK は、マスクメモリ４０から読み出されたアドレスに書き込まれ、マスクメモリ４０が更新される。 PRC＿MSK に対応したピクセルデータがフレームバッファ２０に書き込まれる。
【００４３】
・スプライト１、セクタｉ、ブロック２の処理
ブロック２も同様となる。各マスクデータは、表４に示す通りである。
【００４４】
【表４】
0003899977.tif 000005
【００４５】
・スプライト１、セクタｉ、ブロック３の処理
ブロック３の場合、スタートフラグ＝０、エンドフラグ＝１となる。従って、 XRS＿1 とXR＿1 との間はバックグラウンドとなる。各マスクデータは、表５に示す通りである。
【００４６】
【表５】
0003899977.tif 000006
【００４７】
NEW＿MSK は、読み出されたアドレスに書き込まれ、マスクメモリ４０が更新される。 PRC＿MSK に対応したピクセルデータがフレームバッファ２０に書き込まれる。
以上の処理を繰り返して、スプライト１に関連する全てのスキャンラインの処理が終了した後、スプライト２の処理が開始される。
【００４８】
スプライト２が、スキャンラインｊの処理に達した場合を考える。
スキャンラインj に対応するマスクメモリ４０には、スプライト１の処理により既に表６に示す値が書き込まれている。
【００４９】
【表６】
0003899977.tif 000007
【００５０】
・スプライト２、セクタｉ−１、ブロック３の処理
二次元描画エンジン１０から、スキャンラインｊ、XR＿2 、XL＿2 、の座標がマスク演算装置３０に送られ、Y レジスタ３１、XRレジスタ３２、XLレジスタ３３にストアされる。
スプライト２の最初のセクタ及びブロックは、セクタｉ−１となり、ブロック３となる。XL＿2 からXLS＿2 の間はバックグラウンドとなる。スプライト２のセクタｉ−１のデータがCOLOR レジスタ３６にロードされる。各マスクデータは、表７の通りである。
【００５１】
【表７】
0003899977.tif 000008
【００５２】
フレームバッファ２０への書き込み後、XL＿B カウンタ３５をインクリメントしその結果０となるので、XL＿S カウンタ３４がインクリメントされ、次のセクタであるセクタｉ、ブロック０の処理に移る。
【００５３】
・スプライト２、セクタｉ、ブロック０の処理
スプライト２のセクタｉのデータがCOLOR レジスタ３６にロードされる。各マスクデータは表８の通りである。
【００５４】
【表８】
0003899977.tif 000009
【００５５】
マスクメモリ４０が更新される。 PRC＿MSK に対応したピクセルデータがフレームバッファ２０に書き込まれる。その後、ブロックがインクリメントされ、次のブロック１の処理に移る。
【００５６】
・スプライト２、セクタｉ、ブロック１の処理
セクタｉ、ブロック１は、スプライト１処理時にマスクメモリ４０が更新されている。それを読み出し、さらに更新して書き込む。各マスクデータは表９の通りである。
【００５７】
【表９】
0003899977.tif 000010
【００５８】
この場合、PRC＿MSK はすべて０となる。従って、フレームバッファ２０への書き込みは行われず、すぐに次のブロックの処理に移ることができる。
【００５９】
・スプライト２、セクタｉ、ブロック２の処理
セクタｉ、ブロック２は、セクタｉ、ブロック１と同様に、スプライト１の処理時にマスクメモリ４０が更新されている。それを読み出し、さらに更新して書き込む。各マスクデータは表１０の通りである。
【００６０】
【表１０】
0003899977.tif 000011
【００６１】
この場合も、ブロック１と同様に、PRC＿MSK はすべて０となる。従って、フレームバッファ２０への書き込みが行われず、すぐに次のブロックの処理に移ることができる。
【００６２】
・スプライト２、セクタｉ、ブロック３の処理
スプライト２のセクタｉ、ブロック３内にあるXRS＿2 からXR＿2 まではバックグラウンドとなる。各マスクデータは表１１の通りである。
【００６３】
【表１１】
0003899977.tif 000012
【００６４】
PRC＿MSK の1 の部分が、スプライト２のデータとなる。
スプライト２のピクセルのうち、この部分のみがフレームバッファ２０に書き込まれる。
【００６５】
・スプライト２、セクタｉ＋１、ブロック０の処理
各マスクデータは、表１２の通りである。
【００６６】
【表１２】
0003899977.tif 000013
【００６７】
セクタｉ＋１、ブロック０には、スプライト２の寄与がないことがわかる。従って、次のラインｊ＋１の処理に移ることができる。
以上の結果、マスクメモリ４０は、スプライト１とスプライト２とにより、表１３に示すように更新されたことになる。
【００６８】
【表１３】
0003899977.tif 000014
【００６９】
以上述べた処理を、トッププライオリティのスプライトから順次繰り返すことにより、既に書き込まれているピクセルに対して上書きが行われることをなくし、スプライトをフレームバッファ上に高速に展開することが可能となる。また、消費電力も削減することができる。
【００７０】
次に、本発明の第２の実施の形態について説明する。
上述した第１の実施の形態は、図４のように１ラインをセクタ、ブロック、ピクセル、ビットの４段の階層構造とし、ブロック単位に処理を行う場合であるが、本実施の形態は、図１０のようにブロックを省略して３段の階層構造とし、セクタ単位に処理を行う場合である。
図１０においては、１ラインを２h セクタ、１セクタを２k ピクセル（ｋ＝２として４ピクセル）、１ピクセル＝２n （ｎ＝２）ビットとしている。
【００７１】
図１１は第２の実施の形態によるマスク発生装置３９を示す。
図１１において、図６におけるブロックアドレスは１セクタ内のピクセルアドレスに対応する。マスクビットは２k 個のピクセルに対応する。また、図６におけるCOLOR セレクタ３７は省略される。
セクタスタートアドレス比較器５２は、XL＿ SとXLのセクタアドレスを比較し、アドレスが等しいときは１、そうでないときは０を出力する。ピクセルスタートアドレス比較器５３は、XL＿B でピクセルアドレスがカウントアップされるものとした場合、XL＿B とXLのピクセルアドレスを比較し、アドレスが等しいときは１、そうでないときは０を出力する。
ＡＮＤ回路５４で、セクタスタートアドレス比較器５２とピクセルスタートアドレス比較器５３の各出力の論理積とることで、スタートフラグを出力する。
【００７２】
セクタエンドアドレス比較器５５は、XL＿S とXRのセクタアドレスを比較し、アドレスが等しいときは１、そうでないときは０を出力する。ピクセルエンドアドレス比較器５６は、XL＿B とXRのピクセルアドレスを比較し、アドレスが等しいときは１、そうでないときは０を出力する。
ＡＮＤ回路５７で、セクタエンドアドレス比較器５５とピクセルエンドアドレス比較器５６の各出力の論理積をとることで、エンドフラグを出力する。
【００７３】
２k 個のピクセルデータ比較器５８〜６０は、１セクタ内の各ピクセルカラーデータと、バックグラウンドに指定されているカラーデータを比較し、そのピクセルがバックグラウンドカラーと同じであるかどうかを調べる。ピクセルのカラーがバックグラウンドカラーと等しいときは０、そうでないときは１をBGN＿MSKとして出力する。即ち、 BGN＿MSK ビットで０で示されるピクセルは、バックグラウンドカラーとなる。
【００７４】
カレントマスク計算装置６１は、現在入力されているセクタのうち、バックグラウンドでないピクセルを検出する。まず、セクタ内に存在するピクセルを、１ピクセルが１ビットのマスクパターンPAT＿MSK として求める。マスクパターンPAT＿MSK はセクタ内のピクセル数に等しく、２k ビットとなる。
PAT＿MSK の計算には、マスク発生装置３９からの上記スタートフラグ、エンドフラグ、XLレジスタ３３のピクセルアドレス部分、XRレジスタ３２のピクセルアドレス部分が用いられる。
【００７５】
図１２は、ｈ＝６、ｋ＝２、ｎ＝２とした場合のマスク発生装置３９の構成例を示すブロック図であり、図１１と対応する部分には同一番号を付して重複する説明は省略する。尚、ピクセルデータ比較器は５８〜６０、６２が図示されている。
【００７６】
以上説明したように本発明の実施の形態は、
PAT＿MSK ：スプライトデータの存在ビットを表示
BGN＿MSK ：バックグラウンド領域のビット（の反転ビット）を表示するものとし、
CRN＿MSK ：対象スプライトでの表示すべきビットを示す）とすると、
CRN＿MSK ＝PAT＿MSK & BGN＿MSKで示される。
【００７７】
請求項１の記載においては、
第１のビット列＝CRN＿MSK
第２のビット列＝OLD＿MSK
である。そして、
NEW＿MSK＝OLD＿MSK ｜CRN＿MSK
となって、このNEW＿MSK により新たにマスクメモリに書き込れる。この際、OLD＿MSK が記憶されていたアドレスに上書きされて保存される。
【００７８】
また、OLD＿MSK の反転ビット列！OLD＿MSK は、未描画ビット列を示すが
CRN＿MSK ｜！OLD＿MSK により、新たに追加描画すべきエリア（ビット）が判明するので、
第３のビット列＝PRC＿MSK（＝CRN＿MSK ｜！OLD＿MSK ）
を用いてフレームメモリへスプライトデータの書き込みを行う。
【００７９】
従って、本実施の形態のポイントは、
・フレームメモリの表示エリアに対応するマスクメモリを設け、
・フレームメモリにデータが書き込まれたことをマスクメモリ上にフラグを立てて記憶しておき、
・フラグが立っている場合は、フレームメモリの対応するアドレスにはデータを書き込まない。
と言う点にある。
また、スプライトデータは、表示画面上で手前に表示されるべきデータから順に奥に向かって描画処理に転送されることを前提条件にしている。
【００８０】
尚、本発明における各請求項の記載における「ブロック」は、第１の実施の形態における「ブロック」、及び第２の実施の形態における「セクタ」と等価であるものとする。
【００８１】
次に、本発明の実施の形態によるプログラムについて説明する。
本発明による描画装置をソフトウェア構成とする場合、前述した各処理を、描画装置のコンピュータシステムにおけるＣＰＵが実行するためのプログラムは、本発明によるプログラムを構成する。
【００８２】
このプログラムの記録媒体としては、光磁気ディスク、光ディスク、半導体メモリ、磁気記録媒体等を用いることができ、これらをＲＯＭ、ＲＡＭ、ＣＤ−ＲＯＭ、フレキシブルディスク、メモリカード等に構成して用いてよい。またこの記録媒体は、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部のＲＡＭ等の揮発性メモリのように、一定時間プログラムを保持するものも含まれる。
【００８３】
また上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから伝送媒体を介して、あるいは伝送媒体中の伝送波により他のコンピュータシステムに伝送されるものであってもよい。上記伝送媒体とは、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体をいうものとする。
【００８４】
また、上記プログラムは、前述した機能の一部を実現するためであってもよい。さらに、前述した機能をコンピュータシステムに既に記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【００８５】
従って、この記録媒体を図１のシステム又は装置とは異なるシステム又は装置において用い、そのシステム又は装置のコンピュータがこの記録媒体に格納されたプログラムを実行することによっても、各実施の形態で説明した機能及び効果と同等の機能及び効果を得ることができ、本発明の目的を達成することができる。
【００８６】
【発明の効果】
以上説明したように本発明によれば、トッププライオリティに従って各スプライトを表示画面の手前から奥に向かって順にブロック毎にフレームメモリに書き込み、その際、書き込みのあったブロックの個々のピクセルについてマスクメモリにフラグを立て、次のデータを書き込む際、マスクメモリのフラグを調べ、既に書き込みのあったブロック内のピクセルについては、フレームメモリのそのピクセルに上書きをしないため、無駄な書き込みがなく高速に処理することができ、消費電力等を削減することができる。
【図面の簡単な説明】
【図１】  本発明の実施の形態による描画装置を示すブロック図である。
【図２】  マスク演算装置を示すブロック図である。
【図３】  二次描画エンジンを説明する構成図である。
【図４】  フレームバッファ、マスクメモリの第１の実施の形態による階層構造及びデータの構成を示す構成図である。
【図５】  図２を捕捉説明するためのマスク発生装置の要部を示すブロック図である。
【図６】  第１の実施の形態によるマスク発生装置を示すブロック図である。
【図７】  マスク発生装置におけるスタートフラグとエンドフラグを示す構成図である。
【図８】  マスクメモリと書き込み制御装置を示すブロック図である。
【図９】  二つのスプライトを重ねて描画する例を示す構成図である。
【図１０】  フレームバッファ、マスクメモリの第２の実施の形態による階層構造を示す構成図である。
【図１１】  第２の実施の形態によるマスク発生装置を示すブロック図である。
【図１２】  図１１の具体的な構成例を示すブロック図である。
【図１３】  従来の描画装置を示すブロック図である。
【図１４】  従来の描画装置により二つのスプライトを重ねて描画する場合を説明するための構成図である。
【符号の説明】
１、２：スプライト、１ａ：表示されるスプライト、１ｂ：バックグラウンド、１０：二次元描画エンジン、２０：フレームバッファ、３０：マスク演算装置、３１：Y レジスタ、３２：XRレジスタ、３３：XLレジスタ、３４：XL＿S カウンタ、３５：XL＿B カウンタ、３６：COLOR レジスタ、３７：COLOR セレクタ、３８：BG＿COLOR レジスタ、３９：マスク発生装置、４０：マスクメモリ、４１：書き込み制御装置
【図１】
0003899977.tif 000015
【図２】
0003899977.tif 000016
【図３】
0003899977.tif 000017
【図４】
0003899977.tif 000018
【図５】
0003899977.tif 000019
【図６】
0003899977.tif 000020
【図７】
0003899977.tif 000021
【図８】
0003899977.tif 000022
【図９】
0003899977.tif 000023
【図１０】
0003899977.tif 000024
【図１１】
0003899977.tif 000025
【図１２】
0003899977.tif 000026
【図１３】
0003899977.tif 000027
【図１４】
0003899977.tif 000028