JP4646436B2 - デジタル画像の画像処理装置 - Google Patents
デジタル画像の画像処理装置 Download PDFInfo
- Publication number
- JP4646436B2 JP4646436B2 JP2001148269A JP2001148269A JP4646436B2 JP 4646436 B2 JP4646436 B2 JP 4646436B2 JP 2001148269 A JP2001148269 A JP 2001148269A JP 2001148269 A JP2001148269 A JP 2001148269A JP 4646436 B2 JP4646436 B2 JP 4646436B2
- Authority
- JP
- Japan
- Prior art keywords
- fill
- pixel
- priority
- module
- color
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—2D [Two Dimensional] image generation
- G06T11/40—Filling a planar surface by adding surface attributes, e.g. colour or texture
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
- Record Information Processing For Printing (AREA)
- Image Processing (AREA)
Description
【発明の属する技術分野】
本発明はデジタル画像の画素を処理する装置に関し、特にグレイスケールグラフィックオブジェクトをラスタ画素画像にレンダリングすることに関する。
【0002】
【背景技術】
オブジェクトを利用するグラフィックスシステムの多くは、ページ又は画面の画素ベース画像を保持するためにフレームストア又はページバッファを利用している。通常、図形オブジェクトの輪郭を計算し、埋め込み(fill)して、フレームストアに書き込む。2次元図形の場合、他のオブジェクトの前方に現れるオブジェクトは単に背景オブジェクトの後にフレームストアに書き込まれるだけであるので、画素ごとに背景と置き換えられる。当該技術分野においては、これは一般に「ペインターのアルゴリズム」として知られている。オブジェクトは最も後ろの位置にあるオブジェクトから最も前方のオブジェクトまで優先順位に従って考慮され、通常、各オブジェクトは走査線の順にラスタ化され、画素は各走査線に沿って逐次ランとしてフレームストアに書き込まれる。
【0003】
この技法には本質的に2つの問題がある。第1の問題は、フレームストアの全ての画素に対して高速ランダムアクセスが要求されることである。これは、考慮される新たなオブジェクトがいずれもフレームストア内のいずれかの画素に影響を及ぼす可能性があるためである。このため、フレームストアは通常は半導体ランダムアクセスメモリ(RAM)に保持されている。高分解能のカラープリンタの場合、要求されるRAMの量は非常に多く、通常は100メガバイトを越えてしまうので、そのようなメモリはコストもかかり、高速で動作させるのは困難である。第2の問題は、多くのペイント(レンダリング)された画素が、後に現れるオブジェクトにより上書きペイント(再レンダリング)されるという点である。以前のオブジェクトに対する画素のペイントは、時間の無駄である。
【0004】
フレームストアが大型になるという問題を克服する1つの方法は、「バンディング」を使用する方法である。バンディングを使用すれば、ある1つの時点でメモリに存在するのはフレームストアのごく一部ということになる。描き出すべき全てのオブジェクトは「表示リスト」に保持される。画像全体は先に説明したようにレンダリングされるが、存在するフレームストアの一部分の外側をペイント(レンダリング)しようとする画素ペイント(レンダリング)動作は「クリップアウト」される。全てのオブジェクトが描かれた後、フレームストアのその一部分をプリンタ(又は他の何らかの場所)へ送信し、フレームストアの別の部分を選択して、このプロセスを繰り返す。この技法には不都合な点がある。例えば、描くべきオブジェクトを何度も、すなわち、バンドごとに一度ずつ考慮しなければならない。バンドの数が増えるにつれて、レンダリングを要求するオブジェクトの検査を繰り返す回数も増加する。従って、バンディングの技法は上書きペイント(over-painting)の不利益の問題を解決するものではない。
【0005】
他のいくつかのグラフィックシステムは画像を走査線の順に考慮する。この場合にも、描き出すべき全てのオブジェクトは表示リストに保持される。走査線ごとに、その走査線と交わるオブジェクトを優先順位に従って考慮し、オブジェクトごとに、オブジェクトの辺の交差点の間の画素のスパンをラインストアにセットする。この技法もフレームストアの問題を克服するが、上書きペイントの問題は依然として残る。
【0006】
フレームストアが大型になるという問題と、上書きペイントの問題を共に克服する技法は他にもある。そのような技法の1つによれば、各走査線を順次生成する。この場合にも、描くべき全てのオブジェクトは表示リストに保持される。走査線ごとに、その走査線と交わるオブジェクトの辺を走査線との交差点の座標の小さい順に保持する。それらの交差点、すなわち、辺交差を順次考慮し、アクティブフラグのアレイをトグルするために使用する。走査線上で関心のあるオブジェクト優先順位ごとに1つのアクティブフラグが存在する。考慮される各対の辺の間で、アクティブフラグに対して優先順位符号器を使用して、どの優先順位が最高であるかを判定し、且つ2つの辺の間のスパンの画素に対してその優先順位と関連する色を使用することにより、第1の辺と次の辺との間に位置する画素ごとのカラーデータを生成する。次の走査線を準備する中で、各辺の性質に従って各辺の交差点の座標を更新する。この更新の結果として誤って分類されることになった隣接する辺を交換する。また、新たな辺を辺のリストに併合する。
【0007】
この技法は、フレームストア又はラインストアがなく、上書きペインティングもなく、オブジェクトの優先順位が順位N時間(Nは優先順位の数である)ではなく、一定の順位時間で扱われるという著しく大きな利点を有する。
【0008】
このようなグラフィックシステムの出力は、通常、クロックサイクルごとにトグルするような画素カラーデータを搬送するためのバス(24ビット又は32ビット幅)から構成されている。画素データバスに付随して、画素の属性及び特性を示すいくつかの制御信号がある。画素カラーデータは、通常、その色成分、すなわち、赤、緑、青の成分から形成されており、不透明度チャネル(すなわち、シアン、マゼンタ、黄色及び黒の各チャネル)を伴う場合と、伴わない場合がある。
【0009】
グレイスケールレンダリングの場合、システムは、より狭いデータパス(すなわち8ビット幅)を有するか、又は、カラーグラフィックシステムの使用可能な4つのチャネルのうちの1つを使用する。
【0010】
【発明の概要】
本発明の目的は、既存の構成の1つ又は複数の欠点をほぼ克服すること又は少なくとも軽減することである。
【0014】
本発明の1つの態様によれば、デジタル画像の画素を処理する画像処理装置であって、
複数のカラー出力チャネルを有する画像処理装置を第1の動作モード又は第2の動作モードで動作するように構成するホストプロセッサを具備し、前記画像処理装置は、
前記第1の動作モード中、複数の画素色成分を有する1つのカラー画素を生成し、且つ生成された各画素の前記複数の画素色成分を、対応する前記カラー出力チャネルから出力することにより、前記生成された複数のカラー画素を出力する塗りつぶしモジュールと、
前記第2の動作モード中、塗りつぶし指令が適用されるラスタ順の連続する画素位置の数であって、1から前記カラー出力チャネルの数に等しい最大数まで変化できる数を指示するパラメータをそれぞれ含む1つ又は複数の塗りつぶし指令を生成するモジュールとを具備し、
前記塗りつぶしモジュールは、前記第2の動作モード中、1つ又は複数の前記画素位置に対して1つ又は複数の前記塗りつぶし指令に応答して、塗りつぶし指令の数及び前記塗りつぶし指令のパラメータに従って決まる数の、各々が1つの画素色成分を有する画素を生成し、且つ複数の前記画素を、前記複数の前記カラー出力チャネルから出力することを特徴とする画像処理装置が提供される。
【0016】
本発明の別な態様によれば、デジタル画像の画素を処理する画像処理装置において、
画像処理装置を第1の動作モード又は第2の動作モードで動作するように構成するホストプロセッサを具備し、前記画像処理装置は、
前記第1の動作モード中、対応する画素位置に対して1つ又は複数の塗りつぶし指令を生成する優先順位モジュールと、
前記第1の動作モード中、前記画素位置に対して1つ又は複数の対応する前記塗りつぶし指令に応答して、複数の画素色成分を有する1つの画素を出力する塗りつぶしモジュールとを具備し、
前記優先順位モジュールは、前記第2の動作モード中、塗りつぶし指令が適用されるラスタ順の連続する画素位置の数であって、1から前記カラー出力チャネルの数に等しい最大数まで変化できる数を指示するパラメータをそれぞれ含む1つ又は複数の塗りつぶし指令を生成し、且つ
前記塗りつぶしモジュールは、前記第2の動作モード中、1つ又は複数の前記画素位置に対して1つ又は複数の前記塗りつぶし指令に応答して、塗りつぶし指令の数及び前記塗りつぶし指令のパラメータに従って決まる数の、各々が1つの画素色成分を有する複数の画素を生成し、且つ生成された複数の画素を、対応する複数の前記カラー出力チャネルから出力することを特徴とする画像処理装置が提供される。
【0020】
【実施形態】
次に、添付の図面を参照して本発明のいくつかの好ましい実施形態を説明する。
【0021】
添付の図面のいずれか1つ又は2つ以上においてステップ及び/又は特徴を参照する場合、本明細書においては、特に指示のない限り、便宜上、同じ図中符号を付されているステップ及び/又は特徴は同じ機能又は動作を有するものとする。
【0022】
そこで図1を参照すると、コンピュータグラフィックオブジェクト画像をレンダリングし、提示するように構成されたコンピュータシステム1が概略的に示されている。システムは、不揮発性のハードディスクドライブ又はそれに類する装置5と、揮発性の半導体RAM4とを含むシステムランダムアクセスメモリ(RAM)3と関連するホストプロセッサ2を含む。システム1は、通常は半導体ROM7を基礎とし、多くの場合にコンパクトディスク装置(CD ROM)8により補足されているシステム読み取り専用メモリ(ROM)6を更に含む。更に、システム1は、共にラスタ方式で動作するビデオ表示装置(VDU)又はプリンタなどの何らかの画像表示手段10を含んでいても良い。
【0023】
以上説明したシステム1の構成要素はバスシステム9を介して相互に接続し、IBM PC/AT型パーソナルコンピュータやそこから派生した構成、Sun Sparc stationsなどの当該技術では良く知られているコンピュータシステムの通常動作モードで動作可能である。
【0024】
更に、図1に示すように、画素逐次レンダリング装置20がバス9に接続しており、本好適な実施形態では、この装置20はバス9を介してシステム1から供給される命令及びデータを与えられた図形オブジェクトベースの記述から取り出される画素ベース画像を逐次レンダリングするように構成されている。装置20はオブジェクト記述をレンダリングするためにシステムRAM3を利用しても良いが、レンダリング装置20に関連して、通常は半導体RAMから構成される専用レンダリングストア構成30を設けるのが好ましいであろう。
【0025】
好適な実施形態の機能データ流れ図を図2に示す。この機能流れは、オブジェクトグラフィック記述11から開始する。このオブジェクトグラフィック記述は、ホストプロセッサ2により生成されるのに適切であるように図形オブジェクトのそれらのパラメータを記述するために使用され、且つ/又は、システムRAM3に適宜格納されるか、又はシステムROM6から適宜取り出され、且つそこから画素ベース画像をレンダリングするために画素逐次レンダリング装置20により解釈されても良い。例えば、オブジェクト図形記述11は、表示装置上の1点から別の点につながる直線の辺(単純なベクトル)を含むいくつかのフォーマット、又は2次元オブジェクトが直交する線を含む複数の辺により定義されるような直交辺フォーマットによる辺を伴うオブジェクトを含んでいても良い。三次スプラインなどの別のデータフォーマットを使用しても良い。オブジェクトは多数の異なる種類の辺が混合しているものとして考えられる。通常、全てのフォーマットに共通して、各々の線(直線又は曲線のいずれでも)の始まりと終わりを示す識別子が存在し、それらは、通常、走査線番号により識別されるので、曲線をレンダリングしうる特定の出力スペースを定義することになる。
【0026】
好適な実施形態の動作を図7に示す単純な画像78のレンダリングの例を参照しながら部分的に説明する。画像78は2つの図形オブジェクトを含むことがわかる。特に、一部透明な青色の三角形80が不透明な赤色の四角形90の上に重ねてレンダリングされ、そのために、四角形90は一部を暗くした状態になっている。図示されているように、四角形90は、様々な画素位置(X)及び走査線位置(Y)により定義される辺92、94、96及び98を含む。辺96及び98は走査線の上に形成されている(従って、走査線と平行である)ので、四角形90の実際のオブジェクト記述は、図8Aに示すように、辺92及び94にのみ基づくことができる。これに関連して、辺92は画素位置(40、35)から始まり、画面に沿ってラスタ方向に下方へ伸び、画素位置(40、105)で終わっている。同様に、辺94は画素位置(160、35)から画素位置(160、105)まで伸びている。四角形の図形オブジェクト90の水平部分は、単に辺92から辺94へラスタ化方式で走査することにより得られるであろう。
【0027】
しかし、青色の三角形のオブジェクト80は3つのオブジェクト辺82、84及び86により定義されており、それらの辺はそれぞれ三角形の頂点を定義するベクトルとしてみなされる。辺82及び84は画素位置(100、20)で始まり、それぞれ画素位置(170、90)及び(30、90)まで伸びている。辺86はそれら2つの画素位置の間で従来通りの左から右へのラスタ化方向に伸びている。この特定の例においては、辺86は先に述べた辺96及び98と同様に水平であるので、辺86は辺82及び84の関連する終点により特徴づけられるため(図8Bを参照)、辺86を定義することは不可欠ではない。辺82及び84を記述するために使用される始めと終わりの画素位置に加えて、これらの辺は、それぞれ、関連する傾き値、この場合には、+1と−1を有する。
【0028】
図9は、走査線35から始まって四角形90がレンダリングされる方法と、辺82及び84が走査線35と交差する様子を示している。図9から明らかなように、画像78をラスタ化するためには、より高い優先順位レベルを有するオブジェクトが低い優先順位レベルのオブジェクトの「上に」レンダリングされるように、2つのオブジェクト90及び80の分析(resolution)が必要である。このことは、画像78をレンダリングするために使用される辺リストレコードを表す図10からわかる。図10のレコードは2つのエントリ、すなわち、オブジェクトごとに1つのエントリを含み、それらのエントリは対応するオブジェクトの開始点に対応する走査線値に、ラスタレンダリングの順に配列されている。図10に示すように、各々の辺レコードは、関連するオブジェクトの優先順位レベルと、記述すべき辺の性質に関するその他の詳細(例えば、色、傾きなど)とを有する。
【0029】
表示リストの生成12は、付属のROM6及びRAM3を利用してホストプロセッサ2で実行されるソフトウェアモジュールとして実現されるのが好ましい。表示リストの生成12は、周知の図形記述言語のいずれか1つ又は2つ以上、図形ライブラリ呼び出し又は他の何らかのアプリケーション特定フォーマットで表現されるオブジェクト図形記述を表示リストに変換する。表示リストは、通常、一般にはRAM4の中に形成されている表示リストストア13に書き込まれるが、表示リストストアはレンダリングストア30の中に形成されても良い。図3に示すように、表示リストストア13はいくつかの構成要素を含むことができ、その1つは命令ストリーム14であり、もう1つは辺情報15であり、ラスタ画像画素データ16を適宜含んでいても良い。
【0030】
命令ストリーム14は、いずれかの特定の画像において望まれる特定の図形オブジェクトをレンダリングするために画素逐次レンダリング装置20により読み取られるべき命令として解釈可能なコードを含む。図7に示す画像の例の場合、命令ストリーム14は、
(1)走査線20で(何も)レンダリングしない;
(2)走査線20で2本の青色の辺82及び84を追加する;
(3)走査線35にレンダリングする
(4)走査線35で2本の赤色の辺92及び94を追加する;
(5)完成までレンダリングする
という形態をとると考えられるであろう。
【0031】
同様に、図7の例の場合の辺情報15は、
辺84は画素位置100で始まり、−1の傾きで70本の走査線と交わりつつ進む;
辺82は画素位置100で始まり、1の傾きで70本の走査線と交わりつつ進む;
辺92は画素位置40で始まり、0の傾きで70本の走査線と交わりつつ進む;
辺94は画素位置160で始まり、0の傾きで70本の走査線と交わりつつ進む
という情報を含むと考えられる。
【0032】
図7はラスタ画像画素データを含んでいないので、表示リスト13のストア部分16に格納すべき物はない。
【0033】
表示リストストア13は画素逐次レンダリング装置20により読み取られる。画素逐次レンダリング装置20は集積回路として実現されるのが普通であるが、ホストプロセッサ2などの汎用処理装置で実行される等価のソフトウェアモジュールとして実現されても良い。画素逐次レンダリング装置20は表示リストをラスタ画素のストリームに変換し、それらのラスタ画素のストリームは、例えば、プリンタ、表示装置又はメモリストアなどの別の装置へ供給可能である。
【0034】
図3は、画素逐次レンダリング装置20、表示リストストア13及び一時レンダリングストア30の構成を示している。画素逐次レンダリング装置20の処理段22は命令実行部300と、辺処理モジュール400と、優先順位判定モジュール500と、塗りつぶし(fill)色判定モジュール600と、画素合成モジュール700と、画素出力モジュール800とを含む。処理段で使用される一時ストア30は、先に述べた通り、表示リストストア13と同じ装置(例えば、磁気ディスク又は半導体RAM)と共用されても良いし、あるいは処理速度を最適化するという目的のために個別のストアとして実現されても良い。辺処理モジュール400は、走査線から走査線へと送り出される辺情報を保持するために辺レコードストア32を使用する。優先順位判定モジュール500は、各々の優先順に関する情報と、走査線がレンダリングされている間の辺の交差に関する各優先順位の現在状態とを保持するために、優先順位特性・状態テーブル34を使用する。塗りつぶし色判定モジュール600は、特定の位置における特定の優先順位の塗りつぶし色を判定するために要求される情報を保持するために、塗りつぶしデータテーブル36を使用する。画素合成モジュール700は、1つの出力画素の値を判定するために複数の優先順位からの色を要求するその画素の判定中に中間結果を保持するために、画素合成スタック38を使用する。
【0035】
図3の実施形態に示される処理ステップは処理パイプライン22の形態をとる。この場合、パイプラインの各モジュールは画像データの異なる部分に対して同時に並列して実行され、それらのモジュールの間で以下で説明するようにメッセージが交換される。
【0036】
命令実行部300は命令ストリーム14から命令を読み取って、それを処理し、それらの命令をメッセージにフォーマット化する。メッセージは出力線398を介してパイプライン22中の他のモジュール400、500、600及び700へ転送される。本好適な実施形態では、命令ストリーム14は次のような命令を含むであろう。
【0037】
命令実行部300は、通常、命令をマッピングし且つそれらを様々なモジュールに供給するためにパイプライン動作に復号するマイクロコード状態機械により形成される。あるいは、それに対応するソフトウェアプロセスを利用しても良い。
【0038】
次に、図4を参照して走査線レンダリング動作中の辺処理モジュール400の動作を説明する。走査線のレンダリングに要する初期条件は3つの辺レコードのリストを利用できることである。それらのリストのいずれか又は全てが空であっても良い。それらのリストは、辺情報15から得られ、命令によりセットされる新たな辺を含む新規辺リスと402と、先の走査線から送り出された辺レコードを含む主辺リスと404と、同様に先の走査線から送り出された辺レコードを含むこぼれ辺リスト406である。各辺レコードは次に示すパラメータのうち1つ又は2つ以上を含んでいれば良い。
・ 現在走査線交差座標(ここではX座標という)、
・ この辺の現在セグメントが持続しうる走査線の本数(実施形態によってはY限界としても表される)を表すカウント(ここではNYという)、
・ 走査線を1本すぎるごとにこの辺レコードのX座標に加算すべき値(ここではDXという)、
・ 走査線を1本すぎるごとにこの辺レコードのDXに加算すべき値(ここではDDXという)、
・ 1つ又は複数の優先順位番号(P),
・ 通常のラスタ(上下)方式で、辺が走査線と左から右へ交差するか又は右から左へ交差するかを指示する方向(DIR)フラグ、及び
・ リスト中の次の辺セグメントのアドレス(ADD)
3つのリスト402、404及び406の各々のレコードは走査線交差(X)座標の順に配列されている。これは、通常、分類プロセスにより得られ、当初は、辺情報を含めて命令実行部300からのメッセージを受信する辺入力モジュール408により管理される。辺入力モジュール408はメッセージを出力線498を介してパイプライン22を下ってモジュール500、600及び700へ適宜中継する。
【0039】
辺入力モジュール408は3つのリスト402、404及び406の各々への参照を維持すると共に、各リストからの辺データを受信する。その後、辺入力モジュール408は、選択されるレコードが3つの参照されたレコードの中の最小X座標を持つレコードであるように、3つの参照された辺レコードのうち1つからの1つの辺レコードを選択する。その選択された辺は1つのメッセージにフォーマット化され、辺更新モジュール410に送られる。また、辺のいくつかのフィールド、特に、現在X、優先順位番号、方向フラグなどを1つのメッセージにフォーマット化し、そのメッセージは辺処理モジュール400の出力498としてFIFO518を介して優先順位判定モジュール500へ送信される。
【0040】
辺を受信すると、辺更新モジュール410はNYカウントを減分し、1つ又は2つ以上の関連する辺パラメータを更新する。NYカウントが0に達したならば、次のセグメントアドレスにより指示されるアドレスから新たなセグメントを読み取り、辺の次の走査線についてX座標を計算する。辺レコードの修正が終了すると、辺更新モジュール410は、辺プール412に新たな辺が追加されたことを信号線416を介して辺出力モジュール414に報知する。そこで、辺レコードが辺レコードストア32に戻されて、格納される前に、辺レコードは辺出力モジュール414により分類される。
【0041】
FIFO518は辺処理モジュール400と優先順位判定モジュール500の動作を切り離す。先に述べたテーブル34の一部を構成する優先順位状態テーブル502は、各オブジェクトの優先順位に関する情報を保持するために使用される。FIFO518の大きさは、1回のアクションで走査線1本分の辺交差の辺処理モジュール400からの受信及び優先順位状態テーブル502への転送をイネーブルするように定められている。これにより、優先順位判定モジュール500は同じ画素(X)位置で複数の辺交差を正確に処理することができる。優先順位状態テーブル502及び優先順位データテーブル(例えば、レベルアクティべーションテーブル530)は、同じ画素X位置で交差メッセージを受信するたびに更新される。優先順位状態テーブル502の各レコードは次のような塗りつぶしパラメータを記録している。
・ この優先順位が奇数/偶数塗りつぶし規則又は非ゼロワインディング塗りつぶし規則の適用によりその内側対外側状態を判定されるべきであるか否かを指示する塗りつぶし規則フラグ;
・ この優先順位に影響を及ぼす辺との交差が起こるたびに塗りつぶし規則により指示されるように修正される塗りつぶしカウント;
・ この優先順位をクリッピング又は塗りつぶしのために使用すべきか否か及びクリップの種類(クリップイン又はクリップアウト)を指示するクリッパフラグ及びクリップ形フラグ;
・ この優先順位がそれより下のレベルを最初に計算することを要求するか否かを指示する「ニードビロー」フラグと呼ばれるフラグ。
【0042】
図11A及び図11Bは、奇数/偶数規則及び非ゼロワインディング規則の適用を示している。非ゼロワインディング規則に関して、図11Aは、オブジェクト70の辺71及び72が下向きであるか、又は上向きであるかに従って、それらの辺に概念上の方向がどのように割り当てられるかを示す。閉じた境界を形成するために、辺は境界に沿って数珠つなぎのようにリンクされる。塗りつぶし規則(後述する)の場合に辺に与えられる方向は、セグメントが定義された順序とは無関係である。辺セグメントは、レンダリング方向に対応して、追跡される順に定義される。
【0043】
図11Bは、2つの下向きの辺73及び76と、3つの上向きの辺74、75及び77とを有する1つのオブジェクト(星形)を示す。奇数/偶数規則は、単に、各辺が問題の走査線と交差するたびにブール値(Boolean value)をトグルし、それにより有効にオブジェクトの色をターンオン又はターンオフするだけで動作する。非ゼロワインディング規則は、交差中の辺の方向に応じて塗りつぶしカウント値を増減する。図11Bでは、走査線が初めに出会う2つの辺73及び76は下向きの辺であるので、それらの辺と交わることにより、塗りつぶしカウントはそれぞれ+1と、+2に増分される。次に走査線が出会う2つの辺74及び77は上向きの辺であるので、塗りつぶしカウントはそれぞれ+1と0に減分される。
【0044】
実施形態によっては、この情報の一部が表示リスト13及び先に説明した様々な辺リストの中の辺と関連しており、辺交差メッセージの一部として優先順位判定モジュール500へ送信される場合がある。特に、塗りつぶし規則フラグ、クリッパフラグ、クリップ形フラグ、ニードビローフラグ及びその他の情報はこのようにして処理されれば良い。
【0045】
図5を参照すると、優先順位更新モジュール506は、処理を完了するまでの走査線交差座標を記録するカウンタ524を維持する。これを優先順位更新モジュール506の現在X(current X)という。走査線の始まりにおける初期値は0である。
【0046】
FIFO518のヘッドで受信した辺交差メッセージを検査して、優先順位更新モジュール506は辺交差メッセージ中のX交差値を現在Xと比較する。辺交差メッセージ中のX交差値が優先順位更新モジュール506の現在Xと等しければ、優先順位更新モジュールは辺交差メッセージを処理し、現在Xより大きければ、優先順位更新モジュールは辺交差メッセージにおけるX交差値と現在Xとの差の画素ごとに塗りつぶし指令(commands)を生成する。
【0047】
ある画素が優先順位に関わる塗りつぶし規則に従って優先順位に適用される境界辺の内側にあり、且つ優先順位のクリップカウントが0である場合、その画素において優先順位はアクティブである。優先順位が最上のアクティブな優先順位である場合、又はその優先順位を越える全てのアクティブな優先順位の対応するニードビローフラグがセットされている場合、優先順位は露出される。このように、画素値は露出された優先順位の塗りつぶしデータのみを使用して生成される。
【0048】
優先順位のニードビローフラグ(need-below flag)は表示リストの情報で確定され、フラグがセットされない限り、問題の優先順位より下のアクティブな優先順位がいずれもレンダリングすべき画素値に寄与しないことを画素生成システムに報知するために使用される。最終的な画素値に全く関与しないと考えられる余分な合成動作を防止するために、フラグは適宜クリアされる。
【0049】
辺交差メッセージ中の優先順位ごとに、その優先順位により指示される優先順位状態テーブルレコードのフィールドを参照して、プロセスは、
(i)現在優先順位の現在塗りつぶしカウントを記録する工程と、
(ii)(a)現在優先順位の塗りつぶし規則が奇数/偶数である場合、塗りつぶしカウントがその時点で0でなければ塗りつぶしカウントを0に設定し、そうでなければ0でないいずれかの値に設定するか、
(b)現在優先順位の塗りつぶし規則が非ゼロワインディングである場合、塗りつぶしカウントを(辺方向フラグに応じて)増減する工程と、
(iii)新たな塗りつぶしカウントを記録した塗りつぶしカウントと比較し、一方が0であり、他方が0でない場合に、現在優先順位に対して「アクティブフラグ更新」(後述する)動作を実行する工程とを含む。
【0050】
実施形態によっては、各辺交差メッセージに複数の優先順位を導入するのではなく、優先順位ごとに別個の辺交差メッセージを使用しても良い。
【0051】
アクティブフラグ更新動作は、まず、現在優先順位について新たなアクティブフラグを確定することを含む。優先順位状態テーブル502中の優先順位の塗りつぶしカウントが0ではなく且つ優先順位のクリップカウントが0である場合、アクティブフラグは0ではなく、そうでない場合にはアクティブフラグは0である。アクティブフラグ更新動作の第2のステップでは、判定されたアクティブフラグをアクティブフラグアレイ508の、現在優先順位により指示される位置に格納し、更に、現在優先順位に関わる優先順位状態テーブルのニードビローフラグがゼロであれば、アクティブフラグを不透明アクティブフラグアレイ510の、現在優先順位により指示される位置に格納する。
【0052】
辺交差メッセージ中のX交差値が優先順位更新モジュール506の現在Xより大きいとき、優先順位更新モジュール506は、辺交差メッセージのX交差値と現在Xとの差である、生成すべき画素の数を示すカウントを形成する。このカウントは優先順位生成メッセージとしてフォーマット化され、接続線520を介して優先順位生成モジュール516へ送信される。そこで、優先順位更新モジュール506は、所定の数の画素についての処理が完了したことを示す、優先順位生成モジュール516からの信号522を待つ。信号522を受信すると、優先順位更新モジュール506はその現在Xを辺交差メッセージ中のX交差値に設定し、先に説明したように処理を続ける。
【0053】
優先順位生成モジュール516は、同様にテーブル34内に形成され、各優先順位に関する情報を保持するために使用される優先順位データテーブル504を参照して動作する。優先順位データテーブル504の各レコードは、
塗りつぶしテーブルアドレス及び型、
合成演算コード及びフラグ、
この優先順位の色が所定のYに対して一定であるか否かを記録する、「X独立(x-independent)」フラグと呼ばれるフラグを含む。
【0054】
優先順位生成メッセージ520を受信すると、優先順位生成モジュール516は、供給されたカウントにより指示される回数にわたり「画素優先順位生成動作」(後述する)を実行し、その後、その動作を完了したことを信号522により優先順位更新モジュール506に報知する。
【0055】
各画素優先順位生成動作は、第一に、不透明アクティブフラグアレイ510に対して優先順位符号器514(例えば、4096では、12ビット優先順位符号器)を使用して、最高の不透明アクティブフラグの優先順位番号を判定する。この優先順位(もし、存在すれば)は、優先順位データテーブル504を索引付けするために使用され、そのようにして参照されたレコードのコンテンツは優先順位生成モジュール516からの塗りつぶし優先順位メッセージ出力598として作成され、塗りつぶし色判定モジュール600へ送信される。更に、先のステップにより優先順位が判定されていた(すなわち、少なくとも1つの不透明アクティブフラグがセットされていた)場合、判定された優先順位を保持するが、これを「現在優先順位」という。優先順位が判定されていなかったならば、現在優先順位は0に設定される。そこで、優先順位生成モジュール516はアクティブフラグアレイ508に対して修正優先順位符号器512を繰り返し使用して、現在優先順位より大きい最低のアクティブフラグを判定する。そのようにして判定された優先順位(もし、存在すれば)は、優先順位データテーブル504を索引付けするために使用され、そのようにして参照されたレコードのコンテンツは塗りつぶし優先順位メッセージとして作成され、塗りつぶし色判定モジュール500へ送信され(598)、その後、判定された優先順位は現在優先順位を更新するために使用される。判定される優先順位がなくなるまで(すなわち、アクティブフラグの中でフラグ付けされた、現在優先順位より大きい優先順位が存在しなくなるまで)、このステップは繰り返し使用される。
【0056】
以上説明した基本動作の好ましい特徴として、優先順位生成モジュール516は、シーケンスの第1の画素を処理している間に塗りつぶし色判定モジュール600へ送り出す各メッセージのX独立フラグの値を記録する。送り出される全てのメッセージのX独立フラグが指定されたものであれば、隣接する辺交差の間の画素のスパンにある全ての後続メッセージをカウント−1の単一の反復仕様と置き換えることができる。これは、反復メッセージを生成し、それをこのシーケンスにおける他の全ての処理に代えて塗りつぶし色判定モジュール600へ送信することにより実行される。
【0057】
上述の基本動作の別の好ましい特徴として、優先順位生成モジュール516は、各レベル生成メッセージの後に、最高の不透明優先順位を接続線522を介して優先順位更新モジュール506へ送信する。優先順位更新モジュール506はこれをストア526に保持する。そこで、優先順位判定モジュール506は、画素優先順位生成メッセージを生成する前に、メッセージ中のX交差点が現在Xより大きいこと及びメッセージ中のレベルの少なくとも1つが最高の不透明優先順位以上であることの試験を実行する。これを実行することによって、より少ない回数の画素優先順位判定動作を実行するだけで済み、より長い反復シーケンスを生成できる。
【0058】
図12Aから図12Eは、好適な実施形態における、アレイ508、510及び符号器512、514と共にレベルアクティべーションテーブル530と呼ばれる1つのテーブルに併合されている優先順位テーブル502及び504の動作を示している。図12Aに示すように、辺交差メッセージは辺処理モジュール400から1本の走査線について順次受信され、優先順位の順に配列されるテーブル530にロードされる。この例では、辺交差メッセージは辺横断の非ゼロワインディング規則に従って増分方向を含む。優先順位テーブル530のエントリをいずれもセットしないことは可能である。
【0059】
530で示すようなレベルアクティべーションテーブルは塗りつぶしカウントに対応する列エントリを含む。これらは非ゼロワインディング規則又は(適切であれば)奇数/偶数規則に従って辺から判定される。ニードビローフラグは優先順位の特性であり、レンダリング動作に先立って部分レベル特性としてセットされる。ニードビローフラグは、テーブル530がロードされるときに全ての優先順位レベルに対してセットされる。「クリップカウント」及び「塗りつぶし索引テーブル」などの他の列を使用しても良いが、この例においては、説明を簡単にするため、それらの列は省略されている。レベルがいずれもアクティブではない場合、対応するエントリは0に設定される。更に、アレイ510及び508の値は後続する辺交差を受信した後にテーブル530から更新される。
【0060】
図12Aから明らかであるように、ここでは、明瞭を期するためにいくつかのレコードを便宜上省略してある。通常、レベルアクティべーションテーブル530は、優先順位の順に配列された次のレコードを含むであろう。
【0061】
塗りつぶしカウント
クリップカウント
塗りつぶし型
アクティベーション条件及びフラグ(次のものを含む)
ニードビローフラグ
クリップ型
クリッパフラグ
図形合成動作及びフラグ(次のものを含む)
ラスタ演算コード
アルファチャネル演算コード
「発信元ポップ」フラグ
「宛先ポップ」フラグ
X独立フラグ
塗りつぶし規則
属性、及び
塗りつぶしテーブル索引
テーブル530のコンテンツは、優先順位判定モジュール500で使用されない場合、画素生成のためにメッセージとして塗りつぶし色判定モジュール600へ送信されると共に、合成動作のために画素合成モジュール700へ送信される。テーブル530のコンテンツは辺交差メッセージから得られるのが好ましい。あるいは、レベルアクティべーションテーブル530の静的コンテンツを辺交差メッセージの受信前に事前にロードしておいても良い。
【0062】
図12Aには、走査線35(図9)の第1の辺交差が示されている。この場合、P=1(優先順位レベル1)のとき、塗りつぶしカウントは非ゼロワインディング規則に従って辺の値に更新される。その下にオブジェクトは存在しないので、「ニードビロー」は0のレベルに設定される。
【0063】
テーブル530の先行状態は設定されていなかったため、アレイ510及び508はセットされないままであり、優先順位符号器514は優先順位を出力できない。このことは優先順位生成モジュール516により解釈され、優先順位生成モジュール516は、走査線35の初めのブランクの部分である「オブジェクトなし」優先順位(例えば、P=0)に対してカウントn=40(画素)を出力する。
【0064】
図12Bは、走査線(図9)の第2の辺交差が受信されるときの配列を示す。塗りつぶしカウントが更新される。そこで、アレイ510及び508はテーブル530からの先行最高レベルによって設定される。この時点で、モジュール516はカウントn=45を出力し、P=1は半透明の三角形80との交差前の不透明の赤色オブジェクト90の辺96を表現している。
【0065】
図12Cは、図9の走査線35の第3の辺交差が受信されるときの配列を示す。尚、非ゼロワインディング規則であるために塗りつぶしカウントは下方へ調整されている。現在辺交差を受信する前に有効であったオブジェクトは不透明ではないので、修正優先順位符号器512を使用して、最高アクティブレベルとして優先順位P=2を選択し、これは現在値としてn=(115−85)=30について出力される。
【0066】
図12Dは、図9の走査線35の最終辺交差が受信されるときの配列を示す。尚、先に変更されたP=2の「ニードビロー」はアクティブアレイ508へ既に転送されているため、優先順位符号器はn=(160−115)=45画素について現在の値P=1を出力できる。
【0067】
図12Eは、辺交差をそれ以上利用できないときの結果を示し、n=(180−160)=20画素についてP=0の出力を提供している。
【0068】
このように、優先順位モジュール500は1本の走査線の全ての画素について画素のカウントと、対応する優先順位表示値とを出力する。
【0069】
次に、図6を参照して塗りつぶし色判定モジュール600の動作を説明する。優先順位判定モジュール500から入力される、塗りつぶしデータセットメッセージ、反復メッセージ、塗りつぶし優先順位メッセージ、画素終わりメッセージ及び走査線終わりメッセージを含むメッセージ598は、まず、塗りつぶしルックアップ制御モジュール604へ送信される。塗りつぶしルックアップ制御モジュール604は、塗りつぶし色判定モジュール600の様々な構成要素により使用されるべき現在X位置カウンタ614及び現在Y位置カウンタ616を維持している。
【0070】
走査線終わりメッセージを受信すると、塗りつぶしルックアップ制御モジュール604は現在Xカウンタ614を0にリセットし、現在Yカウンタ616を増分する。その後、走査線終わりメッセージは画素合成モジュール700へ送信される。
【0071】
塗りつぶしデータセットメッセージを受信すると、塗りつぶしルックアップ制御モジュール604はそのデータを塗りつぶしデータテーブル36の指定場所602に格納する。
【0072】
反復メッセージを受信すると、塗りつぶしルックアップ制御モジュール604は現在Xカウンタ614を反復メッセージからのカウントの分だけ増分する。その後、反復メッセージは画素合成モジュール700へ送信される。
【0073】
画素終わりメッセージを受信すると、塗りつぶしルックアップ制御モジュール604は同様に現在Xカウンタ614を増分し、その後、画素終わりメッセージは画素合成モジュール700へ送信される。
【0074】
塗りつぶし優先順位メッセージを受信すると、塗りつぶしルックアップ制御モジュール604は、
− 塗りつぶし優先順位メッセージからの塗りつぶし型を使用して、塗りつぶし優先順位メッセージからのテーブルアドレスにおいてレコードサイズを選択すること(レコードサイズは36で判定される通り);
− 前記の塗りつぶしテーブルを使用して、塗りつぶしデータテーブル36から1つのレコードを選択すること;
− 塗りつぶし優先順位メッセージからの塗りつぶし型を使用して、塗りつぶし色の生成を実行するためのサブモジュールを判定し、選択すること(サブモジュールは図形を処理するためのラスタ画像モジュール606、フラットカラーモジュール608、直線ランプカラーモジュール610及び不透明度タイルモジュール612を含むであろう);
− 判定されたレコードを選択されたサブモジュール606~612に供給すること;
− 選択されたサブモジュール606~612が供給されたデータを使用して、色及び不透明度値を判定すること;
− 判定された色及び不透明度を塗りつぶし色メッセージからのその他の情報、すなわち、ラスタ演算コード、アルファチャネル演算コード、発信元ポップフラグ及び宛先ポップフラグと組み合わせて、接続線698を介して画素合成モジュール700へ送信される色合成メッセージを形成すること
を含む動作を実行する。
【0075】
画素色成分は、通常は画素ごとに32ビットを提供する8ビット精度を有する赤色、緑色、青色及び不透明度の4つの成分である。しかし、その代わりに、不透明度の示唆を伴うシアン、マゼンタ、黄色及び黒色の4つの成分、あるいはその他の数多くの周知の色表現のいずれか1つを使用しても良い。
【0076】
次に、画素合成モジュール700の動作を説明する。塗りつぶし色判定モジュール600から入力される、反復メッセージ、色合成メッセージ、画素終わりメッセージ及び走査線終わりメッセージを含むメッセージは順次処理される。
【0077】
反復メッセージ又は走査線終わりメッセージを受信すると、画素合成モジュール700はそのメッセージをそれ以上の処理を加えずに出力FIFO702へ送信する。
【0078】
色合成メッセージを受信すると、画素合成モジュール700は、通常、色合成メッセージからのラスタ演算及びアルファチャネル演算に従って、色合成メッセージからの色及び不透明度を画素合成スタック38からポップされた色及び不透明度と組み合わせる。次に、その結果を画素合成スタック38に押し戻す。色合成メッセージの受信時に実行される処理については後に説明する。
【0079】
画素終わりメッセージを受信すると、画素合成モジュール700は画素合成スタック38から色及び不透明度をポップするが、例外として、スタック38が空である場合には、不透明白色値を使用する。その結果得られた色及び不透明度は画素出力メッセージとして形成され、このメッセージは画素出力モジュール800へ送信される。
【0080】
次に、画素出力モジュール800の動作を説明する。画素出力FIFOから入力される、画素出力メッセージ、反復メッセージ及び走査線終わりメッセージが読み取られ、順次処理される。
【0081】
画素出力メッセージを受信すると、画素出力モジュール800はその画素を格納すると共に、画素を出力部へ送信する。反復メッセージを受信すると、最前に格納されていた画素が反復メッセージからのカウントにより指定される回数だけ出力部898へ送信される。走査線終わりメッセージを受信すると、画素出力モジュール800はそのメッセージを出力部へ送り出す。
【0082】
出力部898は、画素画像データを利用する何らかの装置に必要に応じて接続可能である。そのような装置としては、ビデオ表示装置又はプリンタなどの出力装置、あるいはハードディスクやラインストア、バンドストア又はフレームストアを含む半導体RAM等のメモリ格納装置、又はコンピュータネットワークなどがある。しかし、以上の説明から明らかであるように、レンダリングプロセス中に画素画像データの中間格納を必要とせずに精巧な図形記述言語により要求される機能性を余す所なく発揮して図形オブジェクトをレンダリングすることができる方法及び装置が説明されている。
【0083】
次に図13A及び図13Bを参照すると、カラー動作モード1300及びグレイスケール動作モード1302でそれぞれ動作するときの画素逐次レンダリング装置20のデータ流れが示されている。命令実行部300はホストプロセッサ2からの命令に応答して、塗りつぶし順位判定モジュール500、塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800に、カラー動作モード又はグレイスケール動作モードのいずれかで動作するように命令する。
【0084】
カラー動作モード中、塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800は、4つの画素成分を有するカラー画素データを4つの出力チャネル1304からそれぞれ出力する。出力チャネル1304はバス(24ビット又は32ビット幅)を構成しているのが好ましい。カラー画素データは、例えば、不透明度成分を伴う又は伴わないその色成分、例えば、赤色成分、緑色成分、青色成分に分解されるか、又はシアン、マゼンタ、黄色及び黒色の各成分に分解される。それらの色成分はそれぞれ8ビットから構成されているのが好ましく、それぞれ対応する4つの出力チャネル1304を介して出力される。カラー動作モード中、塗りつぶし色判定モジュール600、画素合成モジュール及び画素出力モジュール800は4つの出力チャネル1304を介して、クロックサイクルごとに1画素ずつ同期して出力する。
【0085】
グレイスケールレンダリングモード中、塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800は、8ビットのグレイスケール画素成分のみを有する画素データを4つの出力チャネル1304から出力する。このモード中、塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800はクロックサイクルごとに4つの連続する画素をラスタ順に同期してそれぞれ対応する4つの出力チャネル1304を介して出力する。
【0086】
カラー画素逐次レンダリング装置20はグレイスケールレンダリングを2つの異なる方法で加速する。優先順位判定モジュール500はカラー動作モードの場合は反復指令と塗りつぶし指令を生成するが、加速グレイスケール動作モードの場合には、それらの指令の動作はグレイスケールレンダリングを加速するように修正される。
【0087】
これら2つの指令、すなわち、塗りつぶし指令及び反復指令の詳細と動作については、以下にカラー動作モードに関して説明する。
【0088】
反復指令は優先順位判定モジュール500により1つのパラメータを伴って生成される。このパラメータは、同一の画素データを有する画素の数を指定し、この指令は画素出力モジュール800に至る経路にある下流側の全てのモジュールへ送信される。指定の画素位置についてこの指令が下流側のモジュールにより処理され終わったならば、それらの下流側モジュールは次の画素位置へ進む。
【0089】
カラー動作モード中、塗りつぶし指令は、オブジェクト識別子、塗りつぶし型、塗りつぶしアドレス、合成動作、画素属性、及びオブジェクトがこの画素に関する最終オブジェクトであるか、すなわち、この画素に関してアクティブである全てのオブジェクトのうち最上のオブジェクトであるか否かを指示するためのフラグ(last_object)などのいくつかのパラメータを有する。処理すべき現在画素位置に寄与する各オブジェクトの色を得るために、この指令は塗りつぶし色判定モジュール600により翻訳されなければならない。塗りつぶし指令についてlast_objectフラグがTRUEにセットされており且つその塗りつぶし指令が現在画素位置について塗りつぶし色判定モジュール600により処理され終わっている場合、塗りつぶし色判定モジュール600は次の画素位置へ処理を進める。しかし、last_objectフラグがFALSEにセットされていた場合には、塗りつぶし色判定モジュール600は現在画素位置を処理し続ける。
【0090】
反復指令は、現在画素に続く1つ又は複数の後続画素がX座標独立オブジェクト、例えば、フラットカラー又はy方向の直線ランプカラーの色塗りつぶしを伴うオブジェクトを有する場合に作成される。そのような状況の下では、塗りつぶし色判定モジュール600は先頭の画素について塗りつぶし指令を処理し、その後、下流側の全てのモジュールに反復指令を送信するだけで良い。反復すべき画素の数は、優先順位判定モジュール500が次に受信する辺交差X"座標と、現在辺交差のX座標とによって決まる。すなわち、反復指令のパラメータは(X"−(X+1))に等しい。
【0091】
1つ又は複数のオブジェクトがビットマップ、もしくは画素ごとに異なる潜在色データを有する他の何らかの色塗りつぶし動作を有する場合、優先順位判定モジュール500は塗りつぶし指令をオブジェクトがアクティブである画素ごとに送る以外の選択肢を持たない。その代わりに、塗りつぶし色判定モジュール600は画素ごとの最終画素色を処理する。
【0092】
次に図14を参照すると、複数のオブジェクトから構成される画像の一例の表現が示されている。オブジェクトAの左の辺は画素位置6、7、8及び9で走査線54、55、56及び57とそれぞれ交差している。また、オブジェクトAの右の辺は画素位置13、16、18及び21で走査線54、55、56及び57とそれぞれ交差している。オブジェクトBの左の辺は画素位置10、9、9及び7で走査線54、55、56及び57とそれぞれ交差している。また、オブジェクトBの右の辺は画素位置18、18、19及び19で走査線54、55、56及び57とそれぞれ交差している。オブジェクトAは、X方向の画素位置とは無関係である、すなわち、Xから独立したフラットカラーを有する。これに対し、オブジェクトBは、画素がXに依存するようなビットマップである。オブジェクトA及びオブジェクトBは、画素10から13を含む走査線54、画素9から16を含む走査線55、画素9から18を含む走査線56及び画素9から19を含む走査線57の画素について共通してアクティブである。オブジェクトBの優先順位はオブジェクトAより低いので、オブジェクトAはこの画素についてアクティブである全てのオブジェクトのうち最上位置のオブジェクトである。
【0093】
カラー動作モードにおいて、図14に示す例の第1の走査線及び最終走査線(54及び57)に対する優先順位判定モジュール500の入力部498及び出力部598における指令は次の通りである。
・ 走査線54(入力指令):
1. edge_crossing:x=6;object=A;edge=UP;priority=11;
2. edge crossing:x=10;object=B;edge=UP;priority=15;
3. edge crossing:x=13;object=A;edge=DOWN;priority=11
4. edge crossing:x=18;object=B;edge=DOWN;priority=15
・ 走査線54(出力指令):
1. repeat 4
2. fill:object=A;type=flat;fill_address=20;last_object=true;
3. repeat 3
4. fill:object=B;type=bitmap;fill_address=32;last_object=false;
5. fill:object=A;type=flat;fill_address=20;last_object=true;
6. fill:object=B;type=bitmap;fill_address=32;last_object=false;
7. fill:object=A;type=flat;fill_address=32;last_object=true;
8. fill:object=B;type=bitmap;fill_address=32;last_object=false;
9. fill:object=A;type=flat;fill_address=20;last_object=true;
10. fill:object=B;type=bitmap;fill_address=32;last_object=false;
11. fill:object=A;type=flat;fill_address=20;last_object=true
12. fill:object=B;type=bitmap;fill_address=32;last_object=true
13. fill:object=B;type=bitmap;fill_address=32;last_object=true;
14. fill:object=B;type=bitmap;fill_address=32;last_object=true;
15. fill:object=B;type=bitmap;fill_address=32;last_object=true;
16. fill:object=B;type=bitmap;fill_address=32;last_object=true;
・ 走査線57(入力指令):
1. edge_crossing:x=7;object=B;edge=UP;priority=15;
2. edge crossing:x=9;object=A;edge=UP;priority=11;
3. edge crossing:x=19;object=B;edge=DOWN;priority=15
4. edge crossing:x=21;object=A;edge=DOWN;priority=11
・ 走査線57(出力指令):
1. repeat 5
2. fill:object=B;type=bitmap;fill_address=32;last_object=true;
3. fill:object=B;type=bitmap;fill_address=32;last_object=true
4. fill:object=B;type=bitmap;fill_address=32;last_object=false;
5. fill:object=A;type=flat;fill_address=20;last_object=true;
6. fill:object=B;type=bitmap;fill_address=32;last_object=false;
7. fill:object=A;type=flat;fill_address=20;last_object=true;
8. fill:object=B;type=bitmap;fill_address=32;last_object=false;
9. fill:object=A;type=flat;fill_address=20;last_object=true;
10. fill:object=B;type=bitmap;fill_address=32;last_object=false;
11. fill:object=A;type=flat;fill_address=20;last_object=true
12. fill:object=B;type=bitmap;fill_address=32;last_object=false
13. fill:object=A;type=flat;fill_address=20;last_object=true;
14. fill:object=B;type=bitmap;fill_address=32;last_object=false;
15. fill:object=A;type=flat;fill_address=20;last_object=true;
16. fill:object=B;type=bitmap;fill_address=32;last_object=false;
17. fill:object=A;type=flat;fill_address=20;last_object=true;
18. fill:object=B;type=bitmap;fill_address=32;last_object=false;
19. fill:object=A;type=flat;fill_address=20;last_object=true;
20. fill:object=B;type=bitmap;fill_address=32;last_object=false;
21. fill:object=A;type=flat;fill_address=20;last_object=true;
22. fill:object=B;type=bitmap;fill_address=32;last_object=false;
23. fill:object=A;type=flat;fill_address=20;last_object=true;
24. fill:object=B;type=bitmap;fill_address=32;last_object=falst;
25. fill:object=A;type=flat;fill_address=20;last_object=true;
26. fill:object=A;type=flat;fill_address=20;last_object=true;
27. repeat 1
先に述べた通り、辺交差メッセージ(入力指令)はその他にもパラメータを含んでいて良い。例えば、図12Aに関連する説明を参照。簡単にするため、図14に関連してそれらのパラメータのうちいくつかを示してあるにすぎない。
【0094】
fill_addressパラメータは、塗りつぶし色判定モジュールにより、この特定のオブジェクトと関連する色値を処理するために使用される。塗りつぶし色判定モジュール600へ送信される塗りつぶし指令ごとに、対応するカラーデータはRGBO又はCMYKいずれかのフォーマットで生成される。
【0095】
グレイスケール動作モード中、優先順位判定モジュールと塗りつぶし色判定モジュールの双方は塗りつぶし指令ごとに4画素までの分解能で動作するので、4つの出力チャネルを効率良く利用できる。これにより、グレイスケールレンダリング時に1つの出力チャネルしか使用しない場合と比較して、グレイスケールレンダリング速度は4倍まで改善される。
【0096】
優先順位判定モジュール500はグレイスケールレンダリングモード中も、カラー動作モード中も、X独立領域が現れたときに、依然として塗りつぶし指令に続いて繰り返しが起こるという点で同様に動作する。この場合、塗りつぶし色判定モジュール600と画素合成モジュール700は1つの出力チャネル1304から1つの画素を出力するだけで良く、その後に反復指令が続く。しかし、画素出力モジュール800は反復指令を使用するのではなく、後に画素出力装置10が使用することを考慮して、全ての画素データを出力することが望ましい。加えて、グレイスケール動作モード中、画素出力モジュール800は4つの出力チャネルを介して4つまでの画素をそれぞれ同時に供給するのが好ましい。グレイスケール動作モード中、画素出力モジュール800は1つの画素を受信し、次に反復指令を受信すると、各出力チャネル1304のうち4つまでのチャネルを介して適切な数の画素を同時に送り出す。5つ以上の画素がある場合には、反復指令は4つ1組の画素のグループを順次出力させる。反復指令は画素を所定の順序でチャネルから出力させる。例えば、画素は最も低いチャネル、次に低いチャネルと続き、最後にもっとも上のチャネルに至るという順序で出力される。すなわち、反復指令が2つの画素を送り出す場合、それらの画素は最も低いチャネルと次に低いチャネルから同時に出力される。反復すべき画素の量は常に4の倍数であるとは限らないので、画素出力モジュール800は画素出力モジュール800の送り出しサイクル中の有効チャネルの数を指示するための出力信号も供給する。後者の例では、それらの信号は下2つのチャネルが有効であり、上2つのチャネルは無効であることを指示することになるであろう。
【0097】
通常はビットマップデータが存在することにより発生するX従属領域の場合、優先順位判定モジュールは、グレイスケールレンダリング中に4つまでの画素について1つの塗りつぶし指令を送信する。これは、塗りつぶし指令が適用されるラスタ順の連続する画素の数を識別する「no_pixel」と呼ばれる塗りつぶし指令の別のパラメータにより実現される。1つの塗りつぶし指令中に表現できる画素の数は、次の辺交差の前に残留している画素の数によって決まる。次の辺交差がレンダリング中である現在x位置から5画素以上離れて起こる場合には、発行される塗りつぶし指令は4画素について有効である。残る画素については別の塗りつぶし指令を発行しなければならない。そうでない場合には、塗りつぶし指令中の有効画素の数は単に辺交差前の残留画素の数である。更に、塗りつぶし指令は、その塗りつぶし指令が適用される画素を所定の順序で出力チャネル1304から出力させる。例えば、画素は最も低いチャネル、次に低いチャネルと続き、最後に最も上のチャネルに至るような順序で出力される。従って、塗りつぶし指令パラメータ「no_pixel」=2である場合、対応する2つの画素は最も低いチャネルと次に低いチャネルから同時に出力されることになる。
【0098】
そこで、塗りつぶし色判定モジュール600は所定の塗りつぶし指令の有効画素ごとに同時に結果として得られた色を処理する。これは、隣接する画素のビットマップデータが通常はローカルメモリの隣接するアドレススペースに格納されているために可能である。更に、塗りつぶし色判定モジュール600は、通常、性能を改善するために、ローカルメモリから1画素分を超える量のデータを取り出す。
【0099】
また、塗りつぶし色判定モジュール600は、複数の画素を伴う1つの塗りつぶし指令の結果として、複数の「色合成メッセージ」を生成することができる。これは、キャッシュが複数画素のビットマップデータの一部しか含んでおらず、その結果、通常は極めてゆっくりとした速度で、まず、ローカルメモリから取り出されなければならないために有用である。この状況においては、モジュールは第1の色合成メッセージを修正画素有効性値と共に下流側のモジュールへ送信する。後続する画素データを利用できる場合、同じ塗りつぶし指令から残る画素位置について第2のメッセージが生成される。
【0100】
更に下流側へ下って、画素合成モジュール700の動作は変化がなく、チャネルが有効画素を含むか又はグレイスケールレンダリングの場合にないかに関わらず、利用できる全てのチャネルに対して合成動作を単純に実行できる。しかし、画素データバッファリングの動作を簡単にするために画素出力モジュール800は、有効画素が常に最下位チャネルから始まるように保証するという意味で一種のハウスキーピングを実行することを望む場合もある。
【0101】
再び図14に戻って説明を続けると、加速グレイスケールレンダリングの場合の第1の走査線及び最終走査線(54及び57)についての優先順位判定モジュール500の入力部及び出力部における指令(command)は、グレイスケール動作モードの場合と比較して次のようになる。
・ 走査線54(入力指令):
1. edge_crossing:x=6;object=A;edge=UP;priority=11;
2. edge crossing:x=10;object=B;edge=UP;priority=15;
3. edge crossing:x=13;object=A;edge=DOWN;priority=11;
4. edge crossing;x=18;object=B;edge=DOWN;priority=15;
・ 走査線54(出力指令):
1. repeat 4
2. fill:object=A;type=flat;fill_address=20;last_object=true;no_pixel=1;
3. repeat 3
4. fill:object=B;type=bitmap;fill_address=32;last_object=false;no_pixel=4;
5. fill:object=A;type=flat;fill_address=20;last_object=true;no_pixel=4;
6. fill:object=B;type=bitmap;fill_address=32;last_object=true;no_pixel=4;
7. fill:object=B;type=bitmap;fill_address=32;last_object=true;no_pixel=1;
8. 走査線57(入力指令):
1. edge_crossing:x=7;object=B;edge=UP;priority=15;
2. edge crossing:x=9;object=A;edge=UP;priority=11;
3. edge crossing:x=19;object=B;edge=DOWN;priority=15;
4. edge crossing;x=21;object=A;edge=DOWN;priority=11;
・ 走査線57(出力指令):
1. repeat 5
2. fill:object=B;type=bitmap;fill_address=32;last_object=true;no_pixel=2;
3. fill:object=B;type=bitmap;fill_address=32;last_object=false;no_pixel=4
4. fill:object=A;type=flat;fill_address=20;last_object=true;no_pixel=4;
5. fill:object=B;type=bitmap;fill_address=32;last_object=false;no_pixel=4;
6. fill:object=A;type=flat;fill_address=20;last_object=true;no_pixel=4;
7. fill:object=B;type=bitmap;fill_address=32;
last_object=false;no_pixel=3;
8. fill:object=A;type=flat;fill_address=20;last_object=true;no_pixel=3
9. fill:object=A;type=flat;fill_address=20;last_object=true;no_pixel=1
10. repeat 1
所定の2本の走査線に関する例から性能の向上がはっきりと見て取れる。2本の走査線(54及び57)において、塗りつぶし指令の数は、それぞれ、14から5へ、25から8へと減っており、非常に大きな改善であることがわかる。
【0102】
以下の表は、先に挙げた例の走査線54における初めの3つの指令に関してカラーレンダリングとグレースケールレンダリングの場合の画素出力モジュールの動作を示す。尚、カラーレンダリングの場合、チャネル3,2,1及び0はそれぞれ不透明度、青色、緑色及び赤色のチャネルとして機能することに注意する。
【0103】
【表1】
【0104】
【表2】
【0105】
次に、図15及び図16に示すフローチャートを参照して画素逐次レンダリング装置20を動作させる方法を説明する。この方法は、塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800をカラー動作モード又は加速グレイスケール動作モードで動作するように構成することができる。方法は、ホストプロセッサから命令実行部300を介して受信される命令に応答してこれらのモードの一方を動作させるように構成される。これら2つのモードにおいて、方法は塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800の各々に対して指令を発生する。それらの指令はほぼ類似しているが、モードによって異なる。カラー動作モードで動作しているとき、方法はカラー動作モード指令に応答して、1つの画素の4つの画素成分を塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800の4つの出力チャネル1304をそれぞれ介して出力する。加速グレイスケール動作モードで動作しているとき、方法はグレイスケール動作モード指令に応答して、4つのまでの連続する画素をラスタ順に塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800のそれぞれ対応する4つの出力チャネル1304を介してクロックサイクルごとに同期させて出力する。
【0106】
そこで図15を参照すると、カラー動作モードで動作しているときに指令を生成する方法のフローチャートが示されている。指令を生成する方法1500はレンダリングすべき画像の走査線ごとに実行される。説明を容易にするため、ここでは現在走査中の走査線と呼ばれる1本の走査線に関してのみ指令を発生する場合に関連して方法を説明する。
【0107】
方法1500は、現在走査中の走査線において、変数current_xを1に設定することにより開始される(1502)。この変数は、考慮すべき現在画素の位置を指示するカウンタとして機能する。先に述べた通り、辺交差メッセージ(入力指令)は走査線交差(X)座標の順にFIFO518を介して優先順位判定モジュール500へ送信される。方法1500は、それらの辺交差メッセージをその走査線交差(X)座標の順に処理する。それらの辺交差メッセージは図14を参照して説明した、例えば、edge_crossing:x=6;object=A;edge=UP;priority=11及びその他のフィールドのようなフォーマットをとっていても良い。
【0108】
方法1500は、ステップ1504で辺交差メッセージを検索し、ループの各々のパス中に走査線交差(X)座標の順にそれらのメッセージを処理するループ(1504−1512−1504、1504−1524−1504)の形態をとっている。同じ走査線交差座標(X)を有する複数の辺交差メッセージが存在する場合、方法は、ループの1回のパス中に処理するためにそれら複数の辺交差メッセージの全てを検索する(1504)。言い換えれば、ループの現在パス中に、方法1500は、走査線の順で、ループの最前のパス中に検索された辺交差メッセージの(X)座標の次に来る同じ(X)座標を有する1つ又は複数の辺交差メッセージを獲得する(1504)。
【0109】
開始ステップ1502の後、方法1500は、走査線の順で初めて現れた走査線交差座標(X)を有する辺交差メッセージを獲得する(1504)。全てが走査線の順で初めて現れる同じ交差(X)座標を有する複数の辺交差メッセージが存在する場合、方法はそれら初めて現れた全ての辺交差メッセージを獲得する(1504)。また、方法1500は、先に説明したように、現在X座標についてその時点で検索された辺交差メッセージを使用してレベルアクティべーションテーブル530を更新する。最初の辺交差メッセージの(X)座標が2より大きい場合、方法1500は更に指令「repeat X−2」を塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800へ送信する。この反復指令のフラグは、画素X=1からX−1にわたるオブジェクトが存在せず且つそれらの画素位置において背景をペイントしても良いことを指示するようにONにセットされているのが好ましい。
【0110】
ステップ1504の後、方法1500は、その時点で検索されていた辺交差メッセージを利用して、フラグテーブル508及び510に格納されている「アクティブフラグ」及び「不透明アクティブフラグ」を更新する(1506)。「アクティブフラグ」及び「不透明アクティブフラグ」がどのようにして更新されるかについては、先に詳細に説明してある。
【0111】
次に、方法1500は、current_xの現在値に位置する画素について「アクティブフラグ」がONにセットされている優先順位オブジェクトが存在するか否かを判定する(1508)。それら1つ又は複数のオブジェクトの全ての関連する「アクティブフラグ」がOFFにセットされているならば、それらのオブジェクトは現在画素に全く寄与しないので、決定ブロック1508はFALSE(ノー)を戻し、方法1500はステップ1516へ進む。
【0112】
そこで、走査線の順で次の辺交差メッセージのX座標の値をnew_Xとし、変数current_xの現在値をcurrent_xとするとき、(new_X−current_x)>0であるならば、方法1500は指令「repeat(new_X−current_x)」を送信する(1516)。この場合、反復指令の前記フラグは、current_xからnew_Xに位置する画素にわたるオブジェクトは存在せず且つそれらの画素位置で背景をペイントしても良いことを指示するようにONにセットされている。次に、方法はステップ1518へ進む。
【0113】
ステップ1518中、方法1500は変数current_xを走査線の順で次の辺交差メッセージのX座標に等しいnew_Xに設定する。次に、方法はステップ1504に戻り、ループの次のパス中に処理するためにnew_Xで辺交差を有する次の辺交差メッセージを獲得する(1504)。
【0114】
これに対し、current_xの現在値に位置する画素についてオブジェクトの「アクティブフラグ」のいずれか1つがONになっている場合には、決定ブロック1508はTRUE(イエス)を戻し、方法1500はステップ1510へ進む。
【0115】
ステップ1510中、方法1500はcurrent_xの現在値に位置する画素について塗りつぶし指令を生成し始める。このステップ1510中、方法1500は、「アクティブフラグ」がONにセットされ且つ最高「不透明アクティブフラグ」がONにセットされているオブジェクト以下の優先順位を有する、「アクティブフラグ」がONにセットされているオブジェクトを優先順位の順に判定する。それらの塗りつぶし指令のパラメータのデータは、それまでに検索されていた辺交差メッセージに含まれる情報から間接的に得られる。特に、塗りつぶし指令のパラメータはcurrent_xの現在値に関する更新後のレベルアクティべーションテーブル530から獲得される。この生成ステップ1510中、方法1500は、current_xの現在値に位置する画素について2つ以上の塗りつぶし指令が存在する場合、更にそれらの塗りつぶし指令の優先順位を判定する。すなわち、current_xの現在値に位置する画素の塗りつぶし指令はそのオブジェクト優先順位の順に生成される。尚、この生成ステップ1510は1つの画素についてのみ1つ又は複数の塗りつぶし指令を生成することに注意すべきである。それらの塗りつぶし指令(出力指令)は図14を参照して先に説明したようなフォーマットをとっていても良い。例えば、1つの画素の塗りつぶし指令はfill:object=B;type=bitmap;fill_address=32;last_object=false;fill:object=A;type=flat;fill_address=20;last_object=trueであっても良い。パラメータlast_object=trueは、この塗りつぶし指令が現在画素に対する最終塗りつぶし指令であることを示す。オブジェクトの塗りつぶし指令はX独立フラグ(例えば、型)を更に含むのが好ましい。先に述べた通り、このフラグは、このアクティブオブジェクトの色が所定のY(すなわち、走査線)に対して一定であるか否かを指示する。
【0116】
生成ステップ1510の後、方法1500は、先に生成された塗りつぶし指令と関連するオブジェクトが型パラメータに関してX独立であるか否かを判定する(1512)。
【0117】
決定ブロック1512が先に生成された塗りつぶし指令と関連する全てのオブジェクトはX独立であると判定した場合、方法1500は、それらの先に生成された塗りつぶし指令を塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800へ送信する(1514)。ステップ1514の後、方法1500は変数current_xを1増分し(1515)、ステップ1516へ進む。
【0118】
そこで、走査線の順で次の辺交差メッセージのX座標の値をnew_Xとし、変数current_xの現在値をcurrent_xとするとき、(new_X−current_x)>0であるならば、方法1500は指令「repeat(new_X−current_x)」を送信する(1516)。この場合、反復指令の前記フラグはOFFにセットされる。これは、current_xの現在値に対する塗りつぶし指令を後続する位置についても反復すべきであることを指示する。次に、方法はステップ1518へ進む。しかし、値new_X−current_xが0に等しい場合には、反復指令は送信されず、方法は直接にステップ1518へ進む。
【0119】
そこで、方法1500は変数current_xをnew_Xの値に設定し(1518)、ステップ1504に戻って、ループの次のパス中に、new_Xで辺交差を有する次の辺交差メッセージを処理する。
【0120】
これに対し、決定ブロック1512が先に生成された塗りつぶし指令の1つ又は複数のオブジェクトはX従属であると判定した場合には、方法1500はステップ1520へ進む。このような状況は、例えば、オブジェクトの1つがビットマップである場合に起こるであろう。すなわち、決定ブロック1512がFALSE(ノー)を戻したならば、方法1500はcurrent_xに位置する画素に対して塗りつぶし指令(出力指令)を送信する(1520)。それらの指令は塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800へ送信される。
【0121】
送信ステップ1520の後、方法1500は変数current_xを1増分し(1522)、決定ブロック1524へ進む。
【0122】
決定ブロック1524中、方法1500は、変数current_xの現在値が走査線の順で次に処理されるべき辺交差メッセージのX座標であるnew_Xと等しいか否かを検査する。決定ブロック1524がcurrent_xの現在値はnew_Xと等しくないと判定したならば、方法1500はステップ1520に戻る。ステップ1520では、current_xの新たな値に位置する画素に対して、先のステップ1520のパス中に送信されたのと同じ塗りつぶし指令を再び送信する。
【0123】
これに対し、決定ブロック1524がTRUE(イエス)を戻した場合には、方法1500はステップ1504に戻り、ループの次のパス中に次の辺交差メッセージを処理する。
【0124】
処理すべき辺交差メッセージがなくなった時点で、方法1500は現在走査線に関する処理を終了する(図示せず)。
【0125】
次に図16を参照すると、カラー動作モードで動作しているときに指令を生成する方法のフローチャートが示されている。指令を生成する方法1600は、レンダリングすべき画像の走査線ごとに実行される。説明を容易にするため、ここでは現在走査中の走査線と呼ばれる1本の走査線についてのみ指令を発生する場合について方法を説明する。
【0126】
方法1600は、現在走査中の走査線について、変数current_xを1に設定することにより始まる(1602)。この変数は、考慮すべき現在画素の位置を指示するカウンタとして機能する。先に述べた通り、辺交差メッセージ(入力指令)は走査線交差(X)座標の順にFIFO518を介して優先順位判定モジュール500へ送信される。方法1600はそれらの辺交差メッセージをその走査線交差(X)座標の順に処理する。それらの辺交差メッセージは、図14を参照して説明した、edge_crossing:x=6;object=A;edge=UP;priority=11及びその他のフィールドのようなフォーマットをとっていても良い。
【0127】
方法1600は、辺交差メッセージを検索し(1604)、ループの各々のパス中に走査線交差(X)座標の順にそれらのメッセージを処理するループ(1604−1612−1604、1604−1642−1604)の形態をとっている。同じ走査線交差座標(X)を有する複数の辺交差メッセージが存在する場合、方法は、ループの1回のパス中に処理するためのそれら複数の辺交差メッセージの全てを検索する(1604)。言い換えれば、ループの現在パス中、方法1600は、走査線の順で、ループの最前のパス中に検索された辺交差メッセージの(X)座標の次に来る同じ(X)座標を有する1つ又は複数の辺交差メッセージを獲得する(1604)。
【0128】
開始ステップ1602の後、方法1600は、走査線の順で最初に現れた走査線交差座標(X)を有する辺交差メッセージを獲得する(1604)。全て走査線の順で最初に現れた同じ交差(X)座標を有する複数の辺交差メッセージが存在する場合、方法はそれら最初の辺交差メッセージの全てを獲得する(1604)。また、方法1600は、先に説明したように、現在X座標についてその時点で検索されている辺交差メッセージを使用してレベルアクティべーションテーブル530を更新する。最初の辺交差メッセージの(X)座標が2より大きい場合、方法1600は更に指令「repeat X−2」を塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800へ送信する。初期反復指令は、画素X=1からX−1にわたるオブジェクトが存在しないことを指示する。この反復指令のフラグは、画素X=1からX−1にわたるオブジェクトが存在せず且つそれらの画素位置で背景をペイントしても良いことを指示するONにセットされているのが好ましい。
【0129】
ステップ1604の後、方法1600は、その時点で検索されている辺交差メッセージを利用して、フラグテーブル508及び510に格納されている「アクティブフラグ」及び「不透明アクティブフラグ」を更新する(1606)。「アクティブフラグ」及び「不透明アクティブフラグ」がどのようにして更新されるかについては先に詳細に説明してある。
【0130】
次に、方法1600は、current_xの現在値に位置する画素について「アクティブフラグ」がONにセットされている優先順位オブジェクトが存在するか否かを判定する(1608)。それら1つ又は複数のオブジェクトの全ての関連する「アクティブフラグ」がOFFにセットされていたならば、それらのオブジェクトは現在画素に全く寄与しないので、決定ブロック1608はFALSE(ノー)を戻し、方法1600はステップ1616へ進む。
【0131】
そこで、走査線の順で次の辺交差メッセージのX座標の値をnew_Xとし、変数current_xの現在値をcurrent_xとするとき、(new_X−current_x)>0であるならば、方法1600は指令「repeat(new_X−current_x)」を送信する(1616)。この場合、反復指令の前記フラグは、current_xからnew_Xに位置する画素にわたるオブジェクトは存在せず且つそれらの画素位置で背景をペイントしても良いことを指示するONにセットされている。次に、方法はステップ1618に進む。
【0132】
しかし、値new_X−current_xが0に等しい場合には、反復指令は送信されず、方法は直接にステップ1618へ進む。
【0133】
ステップ1618中、方法1600は変数current_xを走査線の順で次の辺交差メッセージのX座標に等しいnew_Xに設定する。次に、方法1600はステップ1604に戻り、方法1600は、ループの次のパス中に処理するためにnew_Xで辺交差を有する次の辺交差メッセージを獲得する(1604)。
【0134】
これに対し、current_xの現在値に位置する画素についてオブジェクトの「アクティブフラグ」のいずれか1つがONにセットされている場合には、決定ブロック1608はTRUE(イエス)を戻し、方法1600はステップ1610へ進む。
【0135】
ステップ1610中、方法1600はcurrent_xの現在値に位置する画素に対して塗りつぶし指令を生成し始める。このステップ1610中、方法1600は、優先順位の順に、「アクティブフラグ」がONにセットされ且つ最高「不透明アクティブフラグ」がONにセットされているオブジェクト以下の優先順位を有する、「アクティブフラグ」がONにセットされているオブジェクトを判定する。それらの塗りつぶし指令のパラメータのデータは、それまでに検索されていた辺交差メッセージに含まれる情報から間接的に得られる。特に、塗りつぶし指令のパラメータは、current_xの現在値について更新後のレベルアクティべーションテーブル530から獲得される。この生成ステップ1610中、current_xの現在値に位置する画素に対する塗りつぶし指令が2つ以上存在する場合、方法1600は更に塗りつぶし指令の優先順位を判定する。すなわち、current_xの現在値に位置する画素に対する塗りつぶし指令はそのオブジェクト優先順位の順に生成される。尚、この生成ステップ1610は1つの画素についてのみ1つ又は複数の塗りつぶし指令を生成することに注意すべきである。それらの塗りつぶし指令(出力指令)は先に図14を参照して説明したようなフォーマットをとっていても良い。例えば、1つの画素に対する塗りつぶし指令はfill:object=B;type=bitmap;fill_address=32;last_object=false;no_pixel=Z;fill:object=A;type=flat;fill_address=20;last_object=true;no_pixel=Zであっても良い。パラメータlast_object=trueは、この塗りつぶし指令が現在画素に対する最終塗りつぶし指令であることを示す。パラメータno_pixelは、現在画素から始めてこの塗りつぶし指令が適用される連続する画素の数を示す1から4までの数字である。このパラメータの値は方法1600中、塗りつぶし指令を送信する直前に判定される。1つのオブジェクトに関する塗りつぶし指令はX独立フラグ(例えば、型)を更に含むのが好ましい。先に述べた通り、このフラグは、このアクティブオブジェクトの色が所定のY(すなわち、走査線)に対して一定であるか否かを指示する。
【0136】
生成ステップ1610の後、方法1600は、ループの現在パス中に生成された塗りつぶし指令と関連するオブジェクトが型パラメータに関してX独立であるか否かを判定する(1612)。
【0137】
決定ブロック1612がループの現在パス中に生成された塗りつぶし指令と関連する全てのオブジェクトはX独立であると判定した場合、方法1600はそれらの塗りつぶし指令を塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800へ送信する(1614)。それらの塗りつぶし指令を送信する(1614)前に、方法1600は塗りつぶし指令のパラメータno_pixelを1に設定する。ステップ1614の後、方法1600は変数current_xを1増分し(1615)、ステップ1616へ進む。
【0138】
そこで、走査線の順で次の辺交差メッセージのX座標の値をnew_Xとし、変数current_xの現在値をcurrent_xとするとき、(new_X−current_x)>0であるならば、方法1600は指令「repeat(new_X−current_x)」を送信する(1616)。この場合、反復指令の前記フラグはOFFにセットされている。これは、current_xの現在値についての塗りつぶし指令を後続する画素位置に対して反復すべきであることを指示する。次に、方法はステップ1618へ進む。しかし、値new_X−current_xが0に等しい場合には、反復指令は送信されず、方法は直接にステップ1618へ進む。
【0139】
次に、方法1600は変数current_xをnew_Xの値に設定し(1618)、ステップ1604に戻って、ループの次のパス中に、new_Xで辺交差を有する次の辺交差メッセージを処理する。
【0140】
これに対し、決定ブロック1612がループの現在パス中に生成された塗りつぶし指令の1つ又は複数のオブジェクトはX従属であると判定した場合には、方法1600は決定ブロック1626へ進む。このような状況は、例えば、オブジェクトの1つがビットマップである場合に起こるであろう。すなわち、決定ブロック1612がFALSE(ノー)を戻した場合、方法1600は決定ブロック1626へ進む。
【0141】
決定ブロック1626は、値current_x+3がnew_Xより小さいか否かを判定する。決定ブロック1626がTRUE(イエス)を戻した場合、方法1600は4つの画素について有効である1つ又は複数の塗りつぶし指令を送信する(1628)。すなわち、方法1600は、ループの現在パス中に生成された塗りつぶし指令を塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800へ送信する(1628)。この送信(1628)に先立って、方法1600はそれらの塗りつぶし指令のno_pixelパラメータを4に設定する。ステップ1628の後、方法は変数current_xを4増分し(1630)、決定ブロック1626に戻る。決定ブロック1626が再びTRUE(イエス)を戻した場合には、方法1600は、no_pixelパラメータを4に設定した状態でループの現在パス中に生成されたもう1組の塗りつぶし指令を送信する(1628)。
【0142】
これに対し、決定ブロック1626がFALSE(ノー)を戻した場合には、方法1600は決定ブロック1632へ進む。決定ブロック1632は、値current_x+2がnew_Xより小さいか否かを判定する。決定ブロック1632がTRUE(イエス)を戻した場合、方法1600はループの現在パス中に生成された塗りつぶし指令を塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800へ送信する(1634)。この送信(1634)に先立って、方法1600はそれらの塗りつぶし指令のno_pixelパラメータを3に設定する。ステップ1634の後、方法は変数current_xを3増分し(1530)、決定ブロック1632に戻る。
【0143】
決定ブロック1632がFALSE(ノー)を戻した場合、方法1600は決定ブロック1636へ進む。決定ブロック1636は、値current_x+1がnew_Xより小さいか否かを判定する。決定ブロック1636がTRUE(イエス)を戻した場合、方法1600は2つの画素について有効である1つ又は複数の塗りつぶし指令を送信する(1638)。すなわち、方法1600は、ループの現在パス中に生成された塗りつぶし指令を塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800へ送信する(1638)。この送信(1638)に先立って、方法1600はそれらの塗りつぶし指令のno_pixelパラメータを2に設定する。ステップ1638の後、方法は変数current_xを2増分し(1640)、決定ブロック1636に戻る。
【0144】
決定ブロック1636がFALSE(ノー)を戻した場合には、方法1600は決定ブロック1642に戻る。決定ブロック1642は、値current_xがnew_Xより小さいか否かを判定する。決定ブロック1642がTRUE(イエス)を戻した場合、方法1600は1つの画素について有効である1つ又は複数の塗りつぶし指令を送信する(1644)。すなわち、方法1600は、ループの現在パス中に生成された塗りつぶし指令を塗りつぶし色判定モジュール600、画素合成モジュール700及び画素出力モジュール800へ送信する(1644)。この送信(1644)に先立って、方法1600はそれらの塗りつぶし指令のno_pixelパラメータを1に設定する。ステップ1644の後、方法は変数current_xをnew_Xに設定し(1646)、ステップ1604に戻って、次の辺交差メッセージを処理する。
【0145】
これに対し、決定ブロック1642がFALSE(ノー)を戻した場合には、方法1600は変数current_xをnew_Xに設定し(1646)、ステップ1604に戻って、次の辺交差メッセージを処理する。
【0146】
処理すべき辺交差メッセージがなくなった時点で、現在走査線について方法1600の処理は終了する(図示せず)。
【0147】
カラー動作モードで動作しているとき、塗りつぶし色判定モジュール600は塗りつぶし指令を獲得し、塗りつぶし指令のパラメータに含まれている情報を利用して画素を生成する。塗りつぶし色判定モジュール600は、カラー動作モードで動作しているとき、そのような画素を一度に1つずつ出力カラーチャネルを介して出力する。それらの画素は複数の色成分を有し、それらの色成分は塗りつぶし色判定モジュール600のそれぞれ対応するカラー出力チャネルから出力される。また、塗りつぶし色判定モジュール600は反復指令をカラー出力チャネルを介して画素出力モジュール800へ送信する。画素出力モジュール800は反復指令を受信すると、先に出力された画素を反復指令のパラメータに従った回数だけ繰り返し出力する。塗りつぶし色判定モジュール600は塗りつぶし指令ごとに1つの画素を生成し、走査線の現在画素位置に対して複数の塗りつぶし指令が存在する場合には、塗りつぶし色判定モジュール600は走査線のその現在位置について複数の画素を生成し、優先順位の順にそれらの画素を一度に1つずつ出力チャネルから出力する。塗りつぶし色判定モジュール600が走査線の現在画素位置について複数の画素を生成する場合、塗りつぶし色判定モジュール600は、更に、それらの生成画素を合成するための合成情報を含む合成メッセージを生成する。合成メッセージは、元の塗りつぶし指令から得られる合成情報から構成される。それらの合成メッセージは塗りつぶし色判定モジュール600からカラー出力チャネルを介して画素合成モジュール700へも送信される。
【0148】
加速グレイスケール動作モードで動作しているとき、塗りつぶし色判定モジュール600は塗りつぶし指令を獲得し、塗りつぶし指令のパラメータに含まれている情報を利用して、1つの色成分を有する画素を生成する。それらの画素は、その後、塗りつぶし指令のパラメータno_pixelに応じて塗りつぶし色判定モジュール600のそれぞれのカラー出力チャネルから出力される。例えば、塗りつぶし指令のパラメータno_pixel=4である場合、塗りつぶし色判定モジュール600の4つの出力チャネルから4つの画素が同時に出力される。また、塗りつぶし色判定モジュール600は、塗りつぶし指令に含まれる合成情報を使用して合成メッセージを送信する。それらの合成メッセージは塗りつぶし色判定モジュール600から出力チャネルを介して画素合成モジュール700へ送信される。同様に、それらの合成メッセージはno_pixelなどのパラメータを含む場合があり、それにより、画素合成モジュール700から出力チャネルを介していくつかの画素が同時に出力されることになる。加速グレイスケール動作モードでは、塗りつぶし色判定モジュール600は、更に、カラー動作モードの場合と同様に反復指令を送信する。
【0149】
【産業上の適用可能性】
以上の説明から、本発明の実施形態はコンピュータグラフィックス及びプリントの分野に適用可能であることが明白である。
【0150】
以上、本発明の実施形態を説明したが、それらの実施形態は単なる例であって、限定的な意味を持たず、本発明の趣旨から逸脱せずに実施形態に対して変形及び/又は変更を実施することは可能である。
【図面の簡単な説明】
【図1】好適な実施形態によるコンピュータシステムを示す概略ブロック構成図である。
【図2】好適な実施形態の機能データ流れを示すブロック構成図である。
【図3】好適な実施形態の画素逐次レンダリング装置と、関連する表示リスト及び一時ストアとを示す概略ブロック構成図である。
【図4】図2の辺処理モジュールの概略機能図である。
【図5】図2の優先順位判定モジュールの概略機能図である。
【図6】図2の塗りつぶしデータ判定モジュールの概略機能図である。
【図7】好適な実施形態の動作を説明するための一例として使用される2オブジェクト画像を示す図である。
【図8A】、
【図8B】図7のオブジェクトのベクトル辺を示す図である。
【図9】図7の画像の数本の走査線のレンダリングを示す図である。
【図10】図7のカラーレンダリングを実行するときに出力される様々なモジュールにおける処理画素のスナップショットを示す図である。
【図11A】、
【図11B】偶数/奇数及び非ゼロワインディング塗りつぶし規則を示す図である。
【図12A】、
【図12B】、
【図12C】、
【図12D】、
【図12E】図5の構成により実現される優先塗りつぶしルーチンを示す図である。
【図13A】、
【図13B】カラー動作モード及びグレイスケール動作モード中の画素逐次レンダリング装置の機能データ流れを示す図である。
【図14】複数のオブジェクトから構成される画像の一例を表す図である。
【図15】カラー動作モードで動作しているときの指令生成方法を示すフローチャートである。
【図16】加速グレイスケール動作モードで動作しているときの指令生成方法を示すフローチャートである。
Claims (2)
- デジタル画像の画素を処理する画像処理装置であって、
複数のカラー出力チャネルを有する画像処理装置を第1の動作モード又は第2の動作モードで動作するように構成するホストプロセッサを具備し、前記画像処理装置は、
前記第1の動作モード中、複数の画素色成分を有する1つのカラー画素を生成し、且つ生成された各画素の前記複数の画素色成分を、対応する前記カラー出力チャネルから出力することにより、前記生成された複数のカラー画素を出力する塗りつぶしモジュールと、
前記第2の動作モード中、塗りつぶし指令が適用されるラスタ順の連続する画素位置の数であって、1から前記カラー出力チャネルの数に等しい最大数まで変化できる数を指示するパラメータをそれぞれ含む1つ又は複数の塗りつぶし指令を生成するモジュールとを具備し、
前記塗りつぶしモジュールは、前記第2の動作モード中、1つ又は複数の前記画素位置に対して1つ又は複数の前記塗りつぶし指令に応答して、塗りつぶし指令の数及び前記塗りつぶし指令のパラメータに従って決まる数の、各々が1つの画素色成分を有する画素を生成し、且つ複数の前記画素を、前記複数の前記カラー出力チャネルから出力することを特徴とする画像処理装置。 - デジタル画像の画素を処理する画像処理装置において、
画像処理装置を第1の動作モード又は第2の動作モードで動作するように構成するホストプロセッサを具備し、前記画像処理装置は、
前記第1の動作モード中、対応する画素位置に対して1つ又は複数の塗りつぶし指令を生成する優先順位モジュールと、
前記第1の動作モード中、前記画素位置に対して1つ又は複数の対応する前記塗りつぶし指令に応答して、複数の画素色成分を有する1つの画素を出力する塗りつぶしモジュールとを具備し、
前記優先順位モジュールは、前記第2の動作モード中、塗りつぶし指令が適用されるラスタ順の連続する画素位置の数であって、1から前記カラー出力チャネルの数に等しい最大数まで変化できる数を指示するパラメータをそれぞれ含む1つ又は複数の塗りつぶし指令を生成し、且つ
前記塗りつぶしモジュールは、前記第2の動作モード中、1つ又は複数の前記画素位置に対して1つ又は複数の前記塗りつぶし指令に応答して、塗りつぶし指令の数及び前記塗りつぶし指令のパラメータに従って決まる数の、各々が1つの画素色成分を有する複数の画素を生成し、且つ生成された複数の画素を、対応する複数の前記カラー出力チャネルから出力することを特徴とする画像処理装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
AUPQ7580A AUPQ758000A0 (en) | 2000-05-17 | 2000-05-17 | Processing pixels of a digital image |
AU7580 | 2000-05-17 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2002063583A JP2002063583A (ja) | 2002-02-28 |
JP2002063583A5 JP2002063583A5 (ja) | 2008-07-03 |
JP4646436B2 true JP4646436B2 (ja) | 2011-03-09 |
Family
ID=3821658
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001148269A Expired - Fee Related JP4646436B2 (ja) | 2000-05-17 | 2001-05-17 | デジタル画像の画像処理装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6795048B2 (ja) |
JP (1) | JP4646436B2 (ja) |
AU (1) | AUPQ758000A0 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11521302B2 (en) | 2019-07-10 | 2022-12-06 | Canon Kabushiki Kaisha | Image processing apparatus and image processing method |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6891536B2 (en) * | 2001-11-30 | 2005-05-10 | Canon Kabushiki Kaisha | Method of determining active priorities |
AUPS134202A0 (en) | 2002-03-25 | 2002-05-09 | Canon Kabushiki Kaisha | System and method for optimizing halftoning printer performance |
US7755629B2 (en) * | 2004-06-30 | 2010-07-13 | Canon Kabushiki Kaisha | Method of rendering graphic objects |
US7230560B2 (en) * | 2005-08-05 | 2007-06-12 | Microsoft Corporation | Image compression and decompression |
US20070085860A1 (en) * | 2005-10-13 | 2007-04-19 | Honeywell International Inc. | Technique for improving the readability of graphics on a display |
US20090096792A1 (en) * | 2007-10-15 | 2009-04-16 | Ati Technologies Ulc | Fill mode determination in vector graphics |
US8595689B2 (en) | 2008-12-24 | 2013-11-26 | Flir Systems Ab | Executable code in digital image files |
US8749572B2 (en) * | 2010-05-28 | 2014-06-10 | Adobe Systems Incorporated | System and method for simulation of brush-based painting in a color space that includes a fill channel |
US8988461B1 (en) | 2011-01-18 | 2015-03-24 | Disney Enterprises, Inc. | 3D drawing and painting system with a 3D scalar field |
US9142056B1 (en) * | 2011-05-18 | 2015-09-22 | Disney Enterprises, Inc. | Mixed-order compositing for images having three-dimensional painting effects |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0652323A (ja) * | 1992-07-31 | 1994-02-25 | Canon Inc | 画像処理方法及び装置 |
JPH07105388A (ja) * | 1993-06-23 | 1995-04-21 | Sun Microsyst Inc | 高性能3次元グラフィック・アクセラレータの作図プロセッサ |
JPH09507310A (ja) * | 1994-01-04 | 1997-07-22 | ハネウエル・インコーポレーテッド | ラスタ・エンハンスメント機構を備えた再構成可能なビデオ出力アーキテクチャ |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5097518A (en) * | 1990-02-27 | 1992-03-17 | Eastman Kodak Company | Technique for performing digital image scaling by logically combining or replicating pixels in blocks of differing groupsizes |
US5237655A (en) * | 1990-07-05 | 1993-08-17 | Eastman Kodak Company | Raster image processor for all points addressable printer |
EP0673011B1 (en) * | 1994-03-11 | 1999-06-02 | Canon Kabushiki Kaisha | Dynamic refinement of pixel structure in a display |
-
2000
- 2000-05-17 AU AUPQ7580A patent/AUPQ758000A0/en not_active Abandoned
-
2001
- 2001-05-02 US US09/846,365 patent/US6795048B2/en not_active Expired - Lifetime
- 2001-05-17 JP JP2001148269A patent/JP4646436B2/ja not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0652323A (ja) * | 1992-07-31 | 1994-02-25 | Canon Inc | 画像処理方法及び装置 |
JPH07105388A (ja) * | 1993-06-23 | 1995-04-21 | Sun Microsyst Inc | 高性能3次元グラフィック・アクセラレータの作図プロセッサ |
JPH09507310A (ja) * | 1994-01-04 | 1997-07-22 | ハネウエル・インコーポレーテッド | ラスタ・エンハンスメント機構を備えた再構成可能なビデオ出力アーキテクチャ |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11521302B2 (en) | 2019-07-10 | 2022-12-06 | Canon Kabushiki Kaisha | Image processing apparatus and image processing method |
Also Published As
Publication number | Publication date |
---|---|
US20020175925A1 (en) | 2002-11-28 |
AUPQ758000A0 (en) | 2000-06-08 |
US6795048B2 (en) | 2004-09-21 |
JP2002063583A (ja) | 2002-02-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3919754B2 (ja) | 画素順次描画システムにおいて実行される合成演算回数の削減法 | |
JP4366387B2 (ja) | 画像処理装置及び方法 | |
JP4343344B2 (ja) | ラスタ形式のグラフィックオブジェクトを用いたイメージの高速レンダリング方法 | |
US20100315431A1 (en) | Combining overlapping objects | |
EP1577838B1 (en) | A method of rendering graphical objects | |
US7538770B2 (en) | Tree-based compositing system | |
JP4646436B2 (ja) | デジタル画像の画像処理装置 | |
US8723884B2 (en) | Scan converting a set of vector edges to a set of pixel aligned edges | |
US7714865B2 (en) | Compositing list caching for a raster image processor | |
US7551173B2 (en) | Pixel accurate edges for scanline rendering system | |
JPH0872317A (ja) | カラー印刷装置及びその方法 | |
US20060001681A1 (en) | Method of rendering graphic objects | |
US6591020B1 (en) | Antialiazed high-resolution frame buffer architecture | |
JP2009009345A (ja) | ベクター画像描画装置、ベクター画像描画方法およびプログラム | |
JP3604152B2 (ja) | ページプリンタ用に強度のレンダリングを必要としないプロセッサ/メモリ | |
JP6904717B2 (ja) | 画像処理装置、その制御方法、およびプログラム | |
JP2008107970A (ja) | 画像形成装置 | |
JPH09171564A (ja) | 描画装置 | |
JPH0729021A (ja) | 画像出力装置 | |
AU770175B2 (en) | Processing pixels of a digital image | |
JP2006031160A (ja) | グラフィックオブジェクト処理方法 | |
JPH09314915A (ja) | 印刷制御装置と印刷装置の制御方法、印刷システム、並びに記憶媒体 | |
JP2005235205A (ja) | 形状チャネルを用いないクリップ・トゥ・セルフ(clip−to−self)機能を有する合成 | |
JP4533019B2 (ja) | グラフィックオブジェクト処理装置及びグラフィックオブジェクト処理方法 | |
AU2004200655B2 (en) | Reducing the Number of Compositing Operations Performed in a Pixel Sequential Rendering System |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080519 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080519 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20100712 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100720 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100916 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20101206 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20101207 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131217 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |