以下に添付図面を参照して、本発明にかかる画像処理方法、および画像処理装置の実施の形態を詳細に説明する。
図1は、本発明にかかる画像処理装置による一動作例を示す説明図である。画像処理装置100は、描画領域areaの各画素の画像データimgを生成するための装置である。画像処理装置100は、例えば、図2Aに示すGPU(Graphics Processing Unit)などの特定の装置であってもよいし、図2Aに示すCPU(Central Processing Unit)が画像処理プログラムを実行することにより実現してもよい。描画領域areaは、例えば、ディスプレイなどの表示面などが挙げられる。
画像処理装置100は、複数の図形の各々について、図形を描画領域areaに描画させる描画命令Iと、描画領域areaを分割した複数の分割領域のうちの図形の少なくとも一部が描画される分割領域を示す領域情報と、を取得する。複数の図形は、描画領域areaに描画される。図1の例では、図形Aと図形Bとが描画領域areaに描画される。描画命令Iとは、図形を作成するための作成情報を数値や式として表現した命令であり、例えば、ベクター形式で記述された命令である。具体的には、描画命令Iが実行されると、複数の図形の各々の頂点を示す頂点情報102から描画命令Iに記述された頂点に基づき頂点データが取得される。頂点情報102は、例えば、図2Aに示すRAM(Random Access Memory)、ROM(Read Only Memory)、ディスクなどの記憶装置に記憶されてある。または、頂点情報102は、例えば、図2Bに示す内蔵SRAMなどに記憶されてある。図1の例では、図形Aと図形Bとが描画領域areaに描画される。ここで、分割領域は、例えば、ラインセットLと称する。ラインセットLのサイズは、例えば、ラインバッファのサイズである。図1において、描画領域areaの横方向のサイズがラインバッファのサイズであるため、ラインセットLは、描画領域areaを縦方向に分割した分割領域である。また、領域情報は、例えば、複数のラインセットLのうち図形が描画される描画範囲を示す情報である。領域情報は、例えば、図2Aに示すRAM、ROM、ディスクなどの記憶装置に記憶されてある。描画範囲を示す情報は、例えば、ラインセット開始番号Lsと、ラインセット開始番号Lsから図形が少なくとも一部描画されるラインセットLの数であるラインセット継続数Lcと、を有する。ここでラインセットLの番号とは、例えば、描画領域areaの縦方向に描画順に先頭から付した番号である。
つぎに、画像処理装置100は、取得した領域情報が示すラインセットLの各々について、複数の図形のうちの少なくとも一部が描画される図形が同一の各ラインセットLが同じグループとなるように分類する。また、画像処理装置100は、ラインセットLの各々について、複数の図形のうちの少なくとも一部が描画される図形が同一であり、かつ画像データimgを生成する処理における画像データimgの生成順が連続する各分割領域が同一のグループとなるように分類する。本実施の形態では、ラインセットLごとにラインセットLの各画素の画像データimgを生成するため、隣接するラインセットLを同一のグループに分類することにより、画像データimg生成時の制御の容易化を図ることができる。生成順は、例えば、描画領域areaへの画像データの描画順である。
例えば、画像処理装置100は、ラインセットLの各々について、少なくとも一部が描画される図形を特定し、特定結果が同一のラインセットを同一のグループにし、かつ生成順が連続するラインセットLを同一のグループにする。例えば、ラインセットLがラインバッファサイズであると、生成順が連続するラインセットLは、隣接するラインセットLとなる。
例えば、図形Aは、ラインセットL[1]からラインセットL[4]までに描画され、図形Bは、ラインセットL[4]からラインセットL[6]までに描画される。そのため、画像処理装置100は、例えば、ラインセットL[1]からラインセットL[3]までを図形Aのみが描画されるグループG1に分類する。画像処理装置100は、ラインセットL[4]を図形Aおよび図形Bが描画されるグループG2に分類する。画像処理装置100は、ラインセットL[5]とラインセットL[6]を図形Bのみが描画されるグループG3に分類する。
画像処理装置100は、グループの各々について、グループに分類されたラインセットLを示す領域情報と、グループに分類されたラインセットLに少なくとも一部が描画される図形について取得した描画命令Iと、を関連付けて記憶部101に記憶させる。記憶部101は、例えば、SRAM(Static Random Access Memory)である。また、記憶部101は、例えば、画像処理装置100の外部のメモリであってもよいし、内部のメモリであってもよい。記憶部101が外部のメモリである場合、例えば、記憶部101は、図2Aに示すRAMなどである。内部のメモリである場合、例えば、記憶部101は、図2Bに示す内蔵SRAMなどである。例えば、ラインセットLを示す領域情報は、例えば、グループに分類されたラインセットLのうち、生成順が先頭のラインセットLの番号であるラインセット開始番号Lsと、グループに分類されたラインセットLの数であるラインセット継続数Lcと、を有する。
例えば、画像処理装置100は、グループG1について、ラインセット開始番号Lsとして1と、ラインセット継続数Lcとして3と、図形Aの描画命令群IAと、を記憶部101に関連付けて記憶させる。例えば、画像処理装置100は、グループG2について、ラインセット開始番号Lsとして4と、ラインセット継続数Lcとして1と、図形Aの描画命令群IAと図形Bの描画命令群IBと、を記憶部101に関連付けて記憶させる。例えば、画像処理装置100は、グループG3について、ラインセット開始番号Lsとして5と、ラインセット継続数Lcとして2と、図形Bの描画命令群IBと、を記憶部101に関連付けて記憶させる。
つぎに、画像処理装置100は、取得した領域情報が示すラインセットLの各々について、ラインセットLが示す領域情報に関連付けられて記憶部101に記憶された描画命令Iに基づいて、ラインセットL内の各画素を示す画像データimgを生成する。具体的には、画像処理装置100は、ラインセットLを番号順に選択する。そして、画像処理装置100は、ラインセットLを選択する都度、選択したラインセットLの番号に基づいて記憶部101に記憶された描画命令Iを取得する。そして、画像処理装置100は、取得した描画命令Iを実行することにより、ラインセットLの各画素の画素データを生成する。生成された画素データは、例えば、ラインバッファなどに記憶される。
このように、少なくとも一部が描画される図形の組み合わせごとに分割領域をグループ分けし、グループごとに描画命令Iを記憶させることにより、分割領域ごとの画像データを生成するために記憶される描画命令の削減を図ることができる。
図2Aは、本発明にかかる画像処理装置を利用したシステムのハードウェア構成例を示すブロック図である。図2Aにおいて、システム270は、CPU251と、GPU252と、ROM253と、RAM254と、ディスクドライブ255と、ディスク256と、を有する。システム270は、I/F257と、入力装置258と、出力装置259と、を有する。また、各部はバス260によってそれぞれ接続される。
ここで、CPU251は、システム270の全体の制御を司る。GPU252は、画像処理に特化した装置である。ROM253は、ブートプログラムなどのプログラムを記憶する。RAM254は、CPU251のワークエリアとして使用される。ディスクドライブ255は、CPU251の制御にしたがってディスク256に対するデータのリード/ライトを制御する。ディスク256は、ディスクドライブ255の制御で書き込まれたデータを記憶する。ディスク256としては、磁気ディスク、光ディスクなどが挙げられる。
I/F257は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークNETに接続され、このネットワークNETを介して他の装置に接続される。そして、I/F257は、ネットワークNETと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F257には、例えばモデムやLANアダプタなどを採用することができる。
入力装置258は、キーボード、マウス、タッチパネルなど利用者の操作により、各種データの入力を行うインターフェースである。また、入力装置258は、カメラから画像や動画を取り込むこともできる。また、入力装置258は、マイクから音声を取り込むこともできる。出力装置259は、CPU251またはGPU252の指示により、データを出力するインターフェースである。出力装置259には、ディスプレイが挙げられる。
例えば、画像処理装置100がGPU252である場合、GPU252は、CPU251からの指示に応じて出力装置259に表示させる画像データを生成する。
図2Bは、本発明にかかる画像処理装置の機能ブロック例を示す説明図である。画像処理装置100は、描画命令ソート前処理部202と、描画命令ソート実行部203と、描画実行部204と、を有する。画像処理装置100は、例えば、図2Aに示したGPU252であってもよい。例えば、GPU252である場合、各部は、論理積回路、否定論理回路、論理和回路や、ラッチ回路であるFF(Flip Flop)などの素子によって形成されてもよい。また、各部は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGA(Field Programmable Gate Array)などのPLD(Programmable Logic Device)によって実現されてもよい。具体的には、例えば、上述した各部の機能をハードウェア記述言語などによってネットリストに機能定義し、そのネットリストを論理合成してASICやPLDに与えることにより、各部を実現してもよい。
また、画像処理装置100は、例えば、図2Aに示したCPU251であってもよい。例えば、CPU251である場合、各部は、画像処理装置100がアクセス可能な記憶装置に記憶された画像処理プログラムにコーディングされてもよい。そして、画像処理装置100が記憶装置から画像処理プログラムを読み出して、画像処理プログラムにコーディングされた処理を実行する。これにより、各部の処理が実現されてもよい。
また、画像処理装置100は、記憶部として内蔵SRAM201を有する。ここでは、描画命令I、頂点データ、ソート前中間データ、ソート済中間データなどを記憶させるための専用の内蔵SRAMを例に挙げているが、これに限らず、他の装置と共有のSRAMやディスクなどが使用されてもよい。
描画命令ソート前処理部202は、描画領域areaに描画される複数の図形の各々について、図形を描画させる描画命令Iと、図形の頂点を示す頂点データと、を取得する。
図3は、描画される図形例を示す説明図である。ここでは、描画領域areaに図形1〜図形17まで描画される例を挙げる。
図4は、頂点情報例を示す説明図である。頂点情報102は、例えば、描画面に表示される図形の頂点ごとに頂点を示す情報である。具体的には、頂点データ群は、頂点ごとに、頂点番号、x、y、z、nx、ny、nz、s、tのフィールドを有する。各フィールドに情報が設定されることにより、各頂点を示す頂点データ(401−1〜401−4など)として記憶される。
x軸とy軸とz軸とからなる3次元の直交座標系が予め定義されてある。x、y、zのフィールドには、各座標値が設定される。x、y、zのフィールドに設定された情報は頂点の位置を示す。nx、ny、nzのフィールドには、法線ベクトルの座標値が設定される。nx、ny、nzのフィールドに設定された情報は法線ベクトルの位置を示す。s、tのフィールドには、テクスチャーの座標値が設定される。s、tのフィールドに設定された情報は、テクスチャーの位置を示す。頂点情報102は、例えば、内蔵RAM201内の頂点データ領域212に記憶される。ここでは、頂点データとして、3次元を例に挙げたが2次元であってもよい。
図5は、各図形の描画命令例を示す説明図である。取得部221は、描画領域areaに描画される図形ごとに、頂点データに基づいて図形を描画領域areaに描画させる描画命令Iを取得する。各描画命令Iは、例えば、内蔵SRAM201内の描画命令データ領域211に記憶されてある。
具体的に、取得部221は、第1描画命令デコーダ223と、描画範囲算出部224と、ソート前中間データ生成部225と、を有する。具体的には、第1描画命令デコーダ223は、描画命令データ領域211から、未取得の図形を描画させる描画命令Iを読み出すことにより、描画命令Iを取得する。第1描画命令デコーダ223は、取得した描画命令Iをデコードして頂点データ取得指示信号を描画範囲算出部224へ出力する。なお、第1描画命令デコーダ223は、1図形を描画させる描画命令I単位で取得する。
描画範囲算出部224は、頂点データ取得指示信号が示す頂点データを頂点データ領域212から取得する。そして、描画範囲算出部224は、取得した頂点データに基づいて描画領域area上における頂点位置を算出する。なお、頂点位置を算出する際に、行列乗算によるアフィン変換を施すなどの座標変換が行われるが、詳細な説明は省略する。そして、描画範囲算出部224は、頂点位置に基づいて図形がいずれのラインセットLからいずれのラインセットLまでに描画されるかを算出する。これにより、描画範囲算出部224は、複数のラインセットLのうち、図形が描画されるラインセットLを示す情報を算出する。図3の例では、描画領域areaを所定方向に分割したラインセットL[0]〜ラインセットL[11]までの12のラインセットLがある。ここで、ラインセットLの横サイズは、画面フルサイズと同等であり、縦サイズは1画素〜数画素である。図形が描画されるラインセットLを示す情報としては、例えば、図形の描画が開始するラインセット開始番号Lsと、ラインセット開始番号Lsから図形の描画が終了するラインセット終了番号までのラインセット継続数Lcと、が算出される。
ソート前中間データ生成部225は、描画命令Iと、ラインセット開始番号Lsと、ラインセット継続数Lcと、に基づいてソート前中間データを生成する。具体的には、ソート前中間データ生成部225は、ラインセット開始番号Lsおよびラインセット継続数Lcを埋め込んだ描画範囲通知命令を生成する。そして、ソート前中間データ生成部225は、描画範囲通知命令を第1描画命令デコーダ223からの描画命令Iの直前に挿入することにより、ソート前中間データを生成する。そして、ソート前中間データ生成部225は、生成されたソート前中間データを内蔵SRAM201上のソート前中間データ領域213に書き込む。
図6は、ソート前中間データ例を示す説明図である。ソート前中間データは、例えば、描画される図形の各々について、ラインセット開始番号Lsおよびラインセット継続数Lcを埋め込んだ描画範囲通知命令と、描画命令Iと、を有する。
つぎに、分類部222は、取得した領域情報が示す分割領域の各々について、複数の図形のうちの少なくとも一部が描画される図形が同一の各分割領域が同じグループとなるように分類する。また、分類部222は、さらに、画像データの生成順が隣接する各分割領域が同一のグループとなるように分類する。画像データの生成順は、例えば、ディスプレイに表示させる場合、1画面のうちの表示順である。図6の例では、画像データの生成順は、ラインセットLの並び順であり、ラインセットL[0]からラインセットL[11]の順である。
具体的には、分類部222は、継続数バッファLcbと、前処理用継続数カウンタLccpと、継続数比較部226と、開始番号参照更新部227と、開始番号バッファLsbと、を有する。
図7は、継続数バッファLcb例と開始番号バッファLsb例とを示す説明図である。継続数バッファLcbは、ラインセットLごとに、同一のソート済中間データが繰り返し現れるラインセットL数を保持するバッファである。ここで、iは、継続数バッファLcbのデータ記憶位置を指定するためのインデックスとする。また、開始番号バッファLsbは、同一のソート済中間データが最初に現れるラインセット番号である。ここで、iは、開始番号バッファLsbのデータ記憶位置を指定するためのインデックスである。
上述したラインセット継続数Lcとラインセット開始番号Lsは図形ごとに描画命令Iに付随する情報である。これに対して、継続数バッファLcbおよび開始番号バッファLsbは、任意のラインセットLにおいて複数の図形が描画されることがあるため、同一描画命令群で繰り返し描画可能なラインセットLの配置に関する情報である。各バッファのエントリ数は、1フレームの高さをラインバッファlbufの高さにより除算した数である。例えば、1フレームの高さが480画素、ラインバッファlbufの高さが4画素であれば、エントリ数は120であり、iは0〜119となる。なお、上述したように、本実施の形態では、エントリ数を12とする。開始番号バッファLsbと、継続数バッファLcbと、の値の組み合わせよって、各ラインセットLのグループを特定可能である。
継続数比較部226は、描画命令Iソート前処理段階において、図形ごとの描画範囲と、継続数バッファLcbの対応する値と、を比較する。そして、継続数比較部226は、比較結果に応じて継続数バッファLcbの更新や設定値を保持する。継続数比較部226は、カウンタリセットフラグを有する。
継続数前値バッファLcpは、継続数バッファLcbの更新前の値を一時的に保持しておき、条件判定の比較値として用いる。
前処理用継続数カウンタLccpは、継続数比較部226による比較結果に基づいて、ラインセットLごとに継続数を算出するためのカウンタである。
開始番号参照更新部227は、更新済の継続数バッファLcbの値に基づいて継続数比較部226による比較結果に基づいて、開始番号バッファLsbを更新する。
開始番号一時バッファLstは、開始番号バッファLsbの更新前の値が一時的に保持されるバッファであり、保持された値は条件判定の比較値として用いられる。
ここで、理解の容易化のために、まず、描画範囲の重なりが異なる2つの図形について、開始番号バッファLsbと継続数バッファLcbとの更新例を5つ挙げて説明し、3つの図形について、開始番号バッファLsbと継続数バッファLcbとの更新例を1つ挙げて説明する。また、ここでの更新例は、簡易的な説明であって、詳細な更新例については後述するフローチャートに示す。
図8は、継続数バッファLcbと開始番号バッファLsbの更新例1を示す説明図である。更新例1では、図形1の描画範囲が図形2の描画範囲よりも広く、図形2の描画範囲が図形1の描画範囲に含まれる。図形1の描画範囲はラインセットL[1]からラインセットL[7]までである。図形1のラインセット開始番号は1であり、図形1のラインセット継続数は7である。図形2の描画範囲はラインセットL[3]からラインセットL[5]までである。図形2のラインセット開始番号は3であり、図形2のラインセット継続数は3である。分類部222は、継続数バッファLcbと開始番号バッファLsbとのそれぞれの値を0でリセットする(ステップS80)。
継続数バッファLcbの現在値がリセット値0である。そのため、継続数比較部226は、継続数バッファLcb[1]〜[7]までに図形1のラインセット開始番号Lsと図形1のラインセット継続数Lcとに基づく値を書き込む(ステップS81)。
そして、図形1のラインセット開始番号は1であるため、開始番号参照更新部227は、開始番号バッファLsbの[1]から[7]までに図形1のラインセット開始番号を書き込む(ステップS82)。
つぎに、図形2のラインセット開始番号Lsは3であり、図形2のラインセット継続数Lcが3である。そのため、図形2については、ラインセットL[3]の継続数が3であり、ラインセットL[4]の継続数が2であり、ラインセットL[5]の継続数が1である。図形2についてのラインセットLの継続数とは、当該ラインセットLの番号からラインセット終了番号までのラインセットLの数である。
継続数比較部226は、現在の継続数バッファLcb[3]、[4]、[5]はそれぞれ5、4、3である。そのため、継続数比較部226は、図形2について各ラインセットLの継続数が対応する現在の継続数バッファLcbの値より小さいため、図形2についてのラインセットLの継続数により上書きする(ステップS83)。
つぎに、開始番号参照更新部227は、図形2のラインセット開始番号Lsは3であるため、開始番号バッファLsb[3]から[5]までに三角形2のラインセット開始番号を書き込む(ステップS84)。
図形1によってラインセットL[1]〜[7]が1つのグループに分類されていたが、図形2によってラインセットL[1],[2]と、ラインセットL[3]〜[5]と、ラインセットL[6],[7]と、の3つのグループに分類される。そのため、継続数比較部226は、継続数バッファLcb[1],[2]を適正値で更新し、継続数バッファLcb[6],[7]を更新しない(ステップS85)。そして、開始番号参照更新部227は、開始番号バッファLsb[6],[7]を6に更新し、開始番号バッファLsb[1],[2]を更新しない(ステップS86)。各ステップについての詳細は、フローチャートに示す。
ステップS86における開始番号バッファLsbと継続数バッファLcbとによれば、ラインセットL[1],[2]と、ラインセットL[3]〜[5]と、ラインセットL[6],[7]と、の3つのグループG1〜G3に分類される。
図9は、継続数バッファLcbと開始番号バッファLsbの更新例2を示す説明図である。更新例2では、図形2の描画範囲が図形1の描画範囲よりも広く、図形1の描画範囲が図形2の描画範囲に含まれる。図形1の描画範囲はラインセットL[3]からラインセットL[5]までである。図形1のラインセット開始番号は3であり、図形1のラインセット継続数は3である。図形2の描画範囲はラインセットL[1]からラインセットL[6]までである。図形2のラインセット開始番号は1であり、図形2のラインセット継続数は6である。分類部222は、継続数バッファLcbと開始番号バッファLsbとのそれぞれの値を0でリセットする(ステップS90)。
まず、継続数バッファLcbの現在値がリセット値0である。そのため、継続数比較部226は、継続数バッファLcb[3]から[5]までに図形1のラインセット開始番号Lsと図形1のラインセット継続数Lcとに基づく値を書き込む(ステップS91)。
そして、図形1のラインセット開始番号Lsは3であるため、開始番号参照更新部227は、開始番号バッファLsb[3]から[5]までに図形1のラインセット開始番号Lsを書き込む(ステップS92)。
つぎに、図形2のラインセット開始番号Lsは1であり、図形2のラインセット継続数Lcが6である。そのため、図形2については、ラインセットL[1]の継続数が6であり、ラインセットLの順に継続数が単調減少してラインセットL[6]の継続数が1である。現在値が設定されている継続数バッファLcb[3]から[5]よりも大きい範囲であるため、図形2の描画範囲は、図形1の描画範囲によって3つのグループに分断される。継続数比較部226は、現在値が設定されていないかつ図形2の描画範囲に含まれるラインセットLの継続数バッファLcb[1],[2],[6]を、分断長により補正した図形2についてのラインセット継続数により更新する(ステップS93)。分断長とは、例えば、描画の開始位置から分断が開始される直前の位置までのラインセット数である。また、分断長とは、例えば、分断の開始位置から分断の終了位置までのラインセット数である。継続数バッファLcb[1],[2]についての分断長は、2であり、継続数バッファLcb[6]についての分断長は、3である。図形2についてのラインセットL[1]の継続数6は2に補正され、図形2についてのラインセットL[2]の継続数5は1に補正される。図形2についてのラインセットL[6]の継続数1は1に補正される。
開始番号参照更新部227は、図形2の描画範囲のうち、図形1の描画範囲と一致しないラインセットL[1],[2],[6]に対応する開始番号バッファLsb[1],[2],[6]にそれぞれ1と1と6を書き込む(ステップS94)。
ステップS94における開始番号バッファLsbと継続数バッファLcbとによれば、ラインセットL[1],[2]と、ラインセットL[3]〜[5]と、ラインセットL[6]と、の3つのグループG1〜G3に分類される。
図10は、継続数バッファLcbと開始番号バッファLsbの更新例3を示す説明図である。更新例3では、図形1の継続数と図形2の継続数とは同一であるが、図形2の描画範囲と図形1の描画範囲との一部が重なる。図形1の描画範囲はラインセットL[3]〜[6]までである。図形1のラインセット開始番号は3であり、図形1のラインセット継続数は4である。図形2の描画範囲はラインセットL[1]〜[4]までである。図形2のラインセット開始番号は1であり、図形2のラインセット継続数は4である。分類部222は、継続数バッファLcbと開始番号バッファLsbとのそれぞれの値を0でリセットする(ステップS100)。
まず、継続数バッファLcbの現在値がリセット値0である。そのため、継続数比較部226は、継続数バッファLcb[3]〜[6]までに図形1のラインセット開始番号Lsと図形1のラインセット継続数Lcとに基づく値を書き込む(ステップS101)。
そして、図形1のラインセット開始番号Lsは3であるため、開始番号参照更新部227は、開始番号バッファLsb[3]〜[6]までに図形1のラインセット開始番号Lsを書き込む(ステップS102)。
つぎに、図形2のラインセット開始番号Lsは1であり、図形2のラインセット継続数Lcが4である。そのため、図形2については、ラインセットL[1]の継続数が4であり、ラインセットLの順に継続数が単調減少してラインセットL[4]の継続数が1である。図形2についてのラインセットLの継続数と現在値が設定されている継続数バッファLcb[3]から[6]とは一部重なっているため、図形2の描画範囲と図形1の描画範囲とは互いに2グループに分断される。継続数比較部226は、継続数バッファLcb[1],[2]と継続数バッファLcb[3],[4]をそれぞれ分断長により補正した図形2についてのラインセット継続数により更新する(ステップS103)。図形2についてのラインセットL[1]の継続数4は2に補正され、図形2についてのラインセットL[2]の継続数3は1に補正される。図形2についてのラインセットL[3]の継続数2は2に補正され、図形2についてのラインセットL[4]の継続数1は1に補正される。
つぎに、図形2の開始番号Lsは1であり、現在の継続数バッファLcb[1]は2であるため、開始番号参照更新部227は、開始番号バッファLsb[1],[2]に図形2の開始番号LSである1を書き込む(ステップS104)。ラインセットL[3],[4]に対応する開始番号バッファLsb[3],[4]には適正値が入っているため、開始番号参照更新部227は、更新しない。
開始番号参照更新部227は、図形1のみが描画されるラインセットL[5],[6]に対応する開始番号バッファLsb[5],[6]を適正値5により更新する(ステップS105)。
ステップS105における開始番号バッファLsbと継続数バッファLcbとによれば、ラインセットL[1],[2]と、ラインセットL[3],[4]と、ラインセットL[5],[6]と、の3つのグループG1〜G3に分類される。
図11は、継続数バッファLcbと開始番号バッファLsbの更新例4を示す説明図である。更新例4では、図形1の継続数と図形2の継続数とは同一であるが、図形2の描画範囲と図形1の描画範囲との一部が重なる。図形1の描画範囲はラインセットL[1]〜[4]までである。図形1のラインセット開始番号は1であり、図形1のラインセット継続数は4である。図形2の描画範囲はラインセットL[3]〜[6]までである。図形2のラインセット開始番号は3であり、図形2のラインセット継続数は4である。分類部222は、継続数バッファLcbと開始番号バッファLsbとのそれぞれの値を0でリセットする(ステップS110)。
まず、継続数バッファLcbの現在値がリセット値0である。そのため、継続数比較部226は、継続数バッファLcb[1]〜[4]までに図形1のラインセット開始番号Lsと図形1のラインセット継続数Lcとに基づく値を書き込む(ステップS111)。
そして、図形1のラインセット開始番号Lsは1であり、開始番号参照更新部227は、開始番号バッファLsb[1]〜[4]までに図形1のラインセット開始番号Lsを書き込む(ステップS112)。
つぎに、図形2のラインセット開始番号Lsは3であり、図形2のラインセット継続数Lcは4である。そのため、図形2については、ラインセットL[3]の継続数が4であり、ラインセットLの順に継続数が単調減少してラインセットL[6]の継続数が1である。図形2についてのラインセットLの継続数と値が設定されている継続数バッファLcb[1]から[4]とは一部重なっているため、図形2の描画範囲と図形1の描画範囲とは互いに2グループに分断される。継続数比較部226は、継続数バッファLcb[5],[6]をそれぞれ分断長により補正した図形2についてのラインセット継続数により更新する(ステップS113)。図形2についてのラインセットL[5]の継続数2は2に補正され、図形2についてのラインセットL[6]の継続数1は1に補正される。また、図形2についてのラインセットL[3]の継続数4は2に補正され、図形2についてのラインセットL[4]の継続数3は1に補正される。そのため、現在継続数バッファLcbに設定されている値と同一であるため、更新されない。
そして、図形2と図形1との両方が描画されるラインセットL[3],[4]の開始番号が3であり、図形2のみが描画されるラインセットL[5],[6]の開始番号が5である。そのため、開始番号参照更新部227は、開始番号バッファLsb[3],[4]に開始番号3を書き込み、開始番号バッファLsb[5],[6]に開始番号5を書き込む(ステップS114)。
継続数比較部226は、図形1のラインセット継続数Lcによって更新された継続数バッファLcb[1],[2]を、それぞれ適正値2,1により更新する(ステップS115)。
ステップS115における開始番号バッファLsbと継続数バッファLcbとによれば、ラインセットL[1],[2]と、ラインセットL[3],[4]と、ラインセットL[5],[6]と、の3つのグループG1〜G3に分類される。
図12は、継続数バッファLcbと開始番号バッファLsbの更新例5を示す説明図である。更新例5では、図形2の描画範囲と図形1の描画範囲とが重ならない。図形1の描画範囲はラインセットL[0]〜[2]までである。図形1のラインセット開始番号は0であり、図形1のラインセット継続数は3である。図形2の描画範囲はラインセットL[4]からラインセットL[7]までである。図形2のラインセット開始番号は4であり、図形2のラインセット継続数は4である。分類部222は、継続数バッファLcbと開始番号バッファLsbとのそれぞれの値を0でリセットする(ステップS120)。
まず、継続数バッファLcbの現在値がリセット値0である。そのため、継続数比較部226は、継続数バッファLcb[0]〜[2]までに図形1のラインセット開始番号Lsと図形1のラインセット継続数Lcとに基づく値を書き込む(ステップS121)。
そして、図形1のラインセット開始番号Lsは0であり、開始番号参照更新部227は、開始番号バッファLsb[0]〜[2]までに図形1のラインセット開始番号Lsを書き込む(ステップS122)。
つぎに、図形2のラインセット開始番号Lsは4であり、図形2のラインセット継続数Lcは4である。そのため、図形2については、ラインセットL[4]の継続数が4であり、ラインセットLの順に継続数が単調減少してラインセットL[7]の継続数が1である。図形2についてのラインセットLの継続数と値が設定されている継続数バッファLcb[0]〜[3]とは重複していない。そのため、継続数比較部226は、継続数バッファLcb[4]〜[7]までに図形2のラインセット開始番号Lsとラインセット継続数Lcとに基づく値を設定する(ステップS123)。
そして、図形2のラインセット開始番号Lsは4であるため、開始番号参照更新部227は、開始番号バッファLsb[4]〜[7]までに図形2のラインセット開始番号Lsを書き込む(ステップS124)。
ステップS124における開始番号バッファLsbと継続数バッファLcbとによれば、ラインセットL[0]〜[2]と、ラインセットL[4]〜[7]と、の2つのグループG1,G2に分類される。
図13は、継続数バッファLcbと開始番号バッファLsbの更新例6を示す説明図である。更新例6では、図形1から図形3がそれぞれ一部重複する。ステップS130〜S132は更新例1〜5と同様の処理であるため、説明を省略する。
図形2の描画範囲はラインセットL[2]〜[5]であり、図形2のラインセットL[2]の継続数は4であり、ラインセットLの順に継続数が単調減少してラインセットL[5]の継続数が1である。図形2の各ラインセットLの継続数と値が設定されている継続数バッファLcb[1]から[4]とは一部重なっているため、図形2の描画範囲と図形1の描画範囲とは互いに2グループに分断される。継続数比較部226は、継続数バッファLcb[5]を分断長により補正した図形2についてのラインセット継続数により更新する(ステップS133)。図形2についてのラインセットL[2]の継続数3は3に補正され、図形2についてのラインセットL[3]の継続数2は2に補正される。また、図形2についてのラインセットL[4]の継続数1は1に補正され、図形2についてのラインセットL[5]の継続数0は1に補正される。そのため、ラインセットL[2]〜[4]について補正した継続数は、継続数バッファLcb[2]〜[4]に設定されている値と同一であるため、更新されない。
そして、図形2と図形1との両方が描画されるラインセットL[2]〜[4]の開始番号が2であり、図形1が描画されず図形2が描画されるラインセットL[5]の開始番号が5である。そのため、開始番号参照更新部227は、開始番号バッファLsb[2]〜[4]のそれぞれに2を書き込み、開始番号バッファLsb[5]に5を書き込む(ステップS134)。
図形2が描画されず図形1が描画されるラインセットL[1]の継続数は図形2と図形1が描画されるラインセットL[2]からラインセットL[4]によって4でない。そのため、継続数比較部226は、図形1のラインセット継続数Lcによって更新された継続数バッファLcb[1]を、適正値1により更新する(ステップS135)。
つぎに、図形3の描画範囲は、ラインセットL[3]〜[7]である。図形3についてのラインセットL[3]の継続数が5であり、ラインセットLの順に継続数が単調減少してラインセットL[7]の継続数が1である。そのため、ラインセットL[1]と、ラインセットL[2],[3],[4]と、ラインセットL[5]、の3つのグループが、図形3によってさらに異なるグループに分類される。継続数比較部226は、継続数バッファLcb[6],[7]を分断長により補正した図形3のラインセット継続数Lcによって更新する(ステップS136)。継続数バッファLcb[3],[4],[5]には適正値が残るため、継続数比較部226は、更新しない。
つぎに、図形1と図形2と図形3との3つの図形が重複するラインセットL[3],[4]のラインセット開始番号が3であり、図形3の一部のみが描画されるラインセットL[6],[7]のラインセット開始番号が6である。そのため、開始番号参照更新部227は、開始番号バッファLsb[3],[4]に3を書き込み、開始番号バッファLsb[6],[7]に6を書き込む(ステップS137)。なお、開始番号バッファLsb[5]には適正値が残るため、開始番号参照更新部227は、開始番号バッファLsb[5]を更新しない。
継続数比較部226は、ラインセットL[2]とラインセットL[3],[4]とで異なるグループに分類されるため、継続数バッファLcb[2]を適正値により更新する(ステップS138)。ラインセットL[2]の開始番号バッファLsb[2]は適正値が残るため、開始番号参照更新部227は、開始番号バッファLsb[2]を更新しない。
ステップS138における開始番号バッファLsbと継続数バッファLcbとによれば、5つのグループG1〜G5に分類される。グループG1〜G5は、それぞれラインセットL[1]と、ラインセットL[2]と、ラインセットL[3],[4]と、ラインセットL[5]と、ラインセットL[6],[7]とである。
ここで、値が確定した後の開始番号バッファLsbの値には以下のような特徴がある。図形の組み合わせが同一であるラインセットLに対応する開始番号バッファLsbの値は、同一の開始番号である。ここでの図形の組み合わせでは、ラインセットLに少なくとも一部が描画される図形が1つであっても、1つの図形の組み合わせとする。図形の組み合わせが同一であるラインセットLのうち、生成順において先頭であるラインセットLの番号と、当該ラインセットLに対応する開始番号バッファLsbの値と、は一致する。
また、値が確定した後の継続数バッファLcbの値には以下のような特徴がある。例えば、ラインセットLに対応する継続数バッファLcbの値が0の場合、ラインセットLに描画すべき図形がないことを示す。また、例えば、ラインセットLに対応する継続数バッファLcbの値が1の場合、以下2通りの特徴に分かれる。生成順が直前のラインセットLに対応する継続数バッファLcbの値が1または0の場合、隣接するラインセットLの中に図形の組み合わせが同一であるラインセットLがないラインセットLである。すなわち、同一のグループに分類されたラインセットLが他にないことを示す。生成順が直前のラインセットLに対応する継続数バッファLcbの値が2の場合、図形の組み合わせが同一のラインセットLのうちの生成順が最後尾のラインセットLである。すなわち、同一のグループに分類されたラインセットLのうちの生成順が最後尾のラインセットLであることを示す。
また、例えば、ラインセットLに対応する継続数バッファLcbの値が1より大きい場合、以下2通りの特徴に分かれる。生成順が直前のラインセットLに対応する継続数バッファLcbの値が1または0の場合、図形の組み合わせが同一のラインセットLのうちの生成順が先頭のラインセットLである。すなわち、同一のグループに分類されたラインセットLのうちの生成順が先頭のラインセットLであることを示す。生成順が直前のラインセットLに対応する継続数バッファLcbの値が現在対象のラインセットLに対応する継続数バッファLcbの値よりも1大きい場合、現在対象のラインセットLは以下の通りである。現在対象のラインセットLは、図形の組み合わせが同一のラインセットLのうち、生成順が先頭および最後尾でないラインセットLであることを示す。
図14から図16は、図3に示す図形例に関する継続数バッファLcbおよび開始番号バッファLsbの更新遷移例を示す説明図である。図14から図16中の経路とは、後述するフローチャートに記載のステップの経路である。
まず、分類部222は、各バッファ要素を0によって初期化する(ステップS1401)。つぎに、分類部222は、図形1のラインセット継続数と、継続数バッファLcbと、を比較する(ステップS1402)。そして、分類部222は、比較結果に基づいて、継続数バッファLcbを更新する(ステップS1403)。ここでは、継続数バッファLcb[1],[2]が経路3に従って更新される。そして、分類部222は、図形1について開始番号バッファLsbを更新する(ステップS1404)。ここでは、開始番号バッファLsb[1],[2]が経路9に従って更新される。
つぎに、分類部222は、図形2のラインセット継続数Lcと、継続数バッファLcbと、を比較する(ステップS1405)。分類部222は、比較結果に基づいて、継続数バッファLcbを更新する継続数バッファLcb[1],[2]を経路2に従って維持し、継続数バッファLcb[3]〜[5]を経路3に従って更新する(ステップS1406)。ここでは、継続数バッファLcb[1],[2]は、更新値と現在値が同じであるため、現在値が維持される。
つぎに、分類部222は、開始番号バッファLsb[1],[2]を経路9に従って更新し、開始番号バッファLsb[3]〜[5]を経路8に従って更新する(ステップS1407)。分類部222は、図形3のラインセット継続数Lcと継続数バッファLcbとを比較する(ステップS1408)。そして、分類部222は、比較結果に基づいて、継続数バッファLcb[1],[2]を経路2に従って維持する(ステップS1409)。ここでは、継続数バッファLcb[1],[2]が維持される。分類部222は、開始番号バッファLsb[1],[2]を経路9に従って更新し、開始番号バッファLsb[3]〜[5]を経路8に従って更新する(ステップS1410)。
つぎに、分類部222は、図形4のラインセット継続数Lsと、継続数バッファLcbとを比較する(ステップS1411)。そして、分類部222は、比較結果に基づいて、継続数バッファLcb[3]を経路7に従って更新する。そして、分類部222は、継続数バッファLcb[4],[5]を経路2に従って維持し、継続数バッファLcb[6],[7]を経路3に従って更新する(ステップS1412)。
分類部222は、開始番号バッファLsb[4],[5]を経路9に従って更新し、開始番号バッファLsb[6],[7]を経路8に従って更新する(ステップS1413)。分類部222は、図形5のラインセット継続数Lcと継続数バッファLcbとを比較する(ステップS1414)。分類部222は、比較結果に基づいて、継続数バッファLcb[10],[11]を経路3に従って更新する(ステップS1415)。分類部222は、開始番号バッファLsb[10],[11]を経路8に従って更新する(ステップS1416)。
分類部222は、図形6〜16のそれぞれのラインセット継続数Lcと継続数バッファLcbとを比較する(ステップS1417)。分類部222は、比較結果に基づいて、継続数バッファLcb[10],[11]を経路2に従って維持する(ステップS1418)。分類部222は、開始番号バッファLsb[10],[11]を経路8に従って更新する(ステップS1419)。
つぎに、分類部222は、図形17のラインセット継続数Lcと継続数バッファLcbとを比較する(ステップS1420)。分類部222は、比較結果に基づいて、継続数バッファLcb[5]〜[7]を経路2に従って維持する。さらに、分類部222は、継続数バッファLcb[8],[9]を経路5および経路4に従って更新し、継続数バッファLcb[10],[11]を経路2に従って維持する(ステップS1421)。分類部222は、開始番号バッファLsb[5]を経路9に従って更新し、開始番号バッファLsb[6]〜[11]を経路8に従って更新する(ステップS1422)。
つぎに、描画命令ソート実行部203は、グループの各々について、領域情報と、描画命令Iと、を関連付けて記憶部に記憶させる関連付け部である。ここでの領域情報は、グループに分類されたラインセットLを示す。また、描画命令Iは分類されたラインセットLに少なくとも一部が描画される図形について取得した描画命令Iである。記憶部は、図2Bに示す内蔵SRAM201である。例えば、グループに分類されたラインセットLを示す領域情報は、グループに分類された分割領域のうち生成順が先頭または末尾の分割領域を示す領域情報と、グループに分類された分割領域の数を示す情報と、によって表される。ここでは、グループに分類されたラインセットLを示す領域情報は、先頭の分割領域を示す領域情報として開始番号と、グループに分類された分割領域の数を示す情報として継続数と、を含む。これにより、領域情報のビット幅を統一させることができ、データ量を削減することができる。
具体的に、例えば、描画命令ソート実行部203は、ソート済中間データ圧縮部231と、ソート済中間データ生成部232と、を有する。
ソート済中間データ圧縮部231は、ソート済中間データ生成部232によるソート済中間データの生成を制御する。ソート済中間データ圧縮部231は、継続数埋め込み部235と、開始番号判定部233と、削除スイッチ234と、を有する。
開始番号判定部233は、ラインセットLごとに、開始番号バッファLsbを参照して、冗長なソート前中間データか否かを判断する。開始番号判定部233は、冗長でないと判定された場合、継続数埋め込み部235を駆動して継続数埋め込み部235により継続数バッファLcbからラインセット継続数を読み出させる。具体的には、開始番号判定部233は、例えば、Lcb読み出し指示信号を継続数埋め込み部235へ出力する。冗長であると判定された場合、削除スイッチ234を駆動して削除スイッチ234によりソート済中間データを削除させる。具体的には、開始番号判定部233は、例えば、判定結果信号を削除スイッチ234へ出力する。
継続数埋め込み部235は、開始番号判定部233の制御により、継続数バッファLcbからラインセット継続数を読み出し、ソート済中間データ生成部232に受け渡す。
削除スイッチ234は、開始番号判定部233の制御により、ソート済中間データ生成部232によって冗長な中間データを削除したソート済中間データを生成させる。
ソート済中間データ生成部232は、継続数埋め込み部235からラインセット継続数データを受け付けた場合、ラインセットスタート命令と、ラインセット継続数Lciと、ラインスタートを示す領域情報と、描画命令Iと、を関連付けて生成する。ソート済中間データ生成部232は、削除スイッチ234から削除指示信号を受け付けた場合、描画命令Iを生成しない。
ここでは、ソート済中間データの生成例の詳細については、生成例1と生成例2を用いて説明する。図2Bに示す描画実行部204は、生成例1の機能ブロック例である。生成例2の機能ブロック例については、省略する。
<生成例1>
描画命令ソート実行部203は、例えば、複数のラインセットLの各々を生成順に対象とする。描画命令ソート実行部203は、対象のラインセットLに対応する開始番号バッファLsbの値を読み出す。描画命令ソート実行部203は、読み出した開始番号と、対象のラインセットLの番号と、が一致しない場合、描画命令Iを生成しない。描画命令ソート実行部203は、読み出した開始番号と、対象のラインセットLの番号と、が一致した場合、継続数バッファLcbの値を読み出す。描画命令ソート実行部203は、読み出した値が0である場合、描画命令Iを生成しない。描画命令ソート実行部203は、読み出した値が1である場合、描画命令Iを生成する。描画命令ソート実行部203は、読み出した値が2以上である場合、描画命令Iを生成し、生成順において対象のラインセットLのつぎのラインセットLから(読み出した値−1)後のラインセットLまでの描画命令Iを生成しない。
図17は、ソート済中間データ生成例1を示す説明図である。ここでは、理解の容易化のために、上述した更新例1によって確定された継続数バッファLcbおよび開始番号バッファLsbを例に挙げる。kは対象のラインセットLを決定するための識別子である。
kが0の場合、描画命令ソート実行部203は、開始番号バッファLsb[0]の値がkであり、継続数バッファLcb[0]の値が0であるため、描画命令Iを生成しないと判定する。kが1の場合、描画命令ソート実行部203は、開始番号バッファLsb[1]の値がkであり、継続数バッファLcb[1]の値が2以上であるため、描画命令Iを生成すると判定する。描画命令ソート実行部203は、ラインスタート命令と、継続数バッファLcb[1]の値と、ラインセットLの番号と、を関連付けて内蔵SRAM201に記憶させる。そして、描画命令ソート実行部203は、図形1の描画命令群を、内蔵SRAM201のうち、関連付けて記憶した記憶領域に連続する記憶領域に記憶させる。
kが2の場合、描画命令ソート実行部203は、開始番号バッファLsb[2]の値がkでないため、描画命令Iを生成しないと判定する。kが3の場合、描画命令ソート実行部203は、開始番号バッファLsb[3]の値がkであり、継続数バッファLcb[3]の値が2以上であるため、描画命令Iを生成すると判定する。描画命令ソート実行部203は、ラインスタート命令と、継続数バッファLcb[3]の値と、ラインセットLの番号と、を関連付けて内蔵SRAM201に記憶させる。そして、描画命令ソート実行部203は、図形1の描画命令群および図形2の描画命令群を、内蔵SRAM201のうち、関連付けて記憶した記憶領域に連続する記憶領域に記憶させる。
kが4の場合、描画命令ソート実行部203は、開始番号バッファLsb[4]の値がkでないため、描画命令Iを生成しないと判定する。kが5の場合、描画命令ソート実行部203は、開始番号バッファLsb[5]の値がkでないため、描画命令Iを生成しないと判定する。kが6の場合、描画命令ソート実行部203は、開始番号バッファLsb[6]の値がkであり、継続数バッファLcb[6]の値が2以上であるため、描画命令Iを生成すると判定する。描画命令ソート実行部203は、ラインスタート命令と、継続数バッファLcb[6]の値と、ラインセットLの番号と、を関連付けて内蔵SRAM201に記憶させる。そして、描画命令ソート実行部203は、図形2の描画命令群を、内蔵SRAM201のうち、関連付けて記憶した記憶領域に連続する記憶領域に記憶させる。
最後に、kが7の場合、描画命令ソート実行部203は、開始番号バッファLsb[7]の値が=kでないため、描画命令Iを生成しないと判定する。
<生成例2>
まず、描画命令ソート実行部203は、例えば、複数のラインセットLの各々を生成順に対象とする。描画命令ソート実行部203は、対象のラインセットLに対応する継続数バッファLcbの値を読み出す。描画命令ソート実行部203は、読み出した値が0の場合、描画命令Iを生成せずに、生成順が対象のラインセットLの直後のラインセットLに対応する継続数バッファLcbを読み出す。一方、描画命令ソート実行部203は、読み出した値が1であり、かつ生成順が対象のラインセットLの直前のラインセットLに対応する継続数バッファLcbの値が1または0である場合、対象のラインセットLについての描画命令Iを生成する。また、描画命令ソート実行部203は、読み出した値が2以上であり、かつ生成順が対象のラインセットLの直前のラインセットLに対応する継続数バッファLcbの値が1または0である場合、対象のラインセットLについての描画命令Iを生成する。そして、描画命令ソート実行部203は、生成順において対象のラインセットLの直後のラインセットLから読み出した値後のラインセットLまでの描画命令Iを生成しない。
図18は、ソート済中間データ生成例2を示す説明図である。ここでは、理解の容易化のために、上述した更新例1によって確定された継続数バッファLcbおよび開始番号バッファLsbを例に挙げる。kは対象のラインセットLを決定するための識別子である。kが0の場合、継続数バッファLcb[0]の値が0であるため、描画命令ソート実行部203は、描画命令Iを生成しないと判定する。
kが1の場合、継続数バッファLcb[1]の値が2であり、生成順が直前のラインセットLに対応する継続数バッファLcb[0]の値が0であるため、描画命令ソート実行部203は、描画命令Iを生成すると判定する。ここで、生成順が直前のラインセットLに対応する継続数バッファLcbを省略して直前の継続数バッファLcbと称する。描画命令ソート実行部203は、ラインスタート命令と、継続数バッファLcb[1]の値と、ラインセットLの番号と、を関連付けて内蔵SRAM201に記憶させる。そして、描画命令ソート実行部203は、図形1の描画命令群を、内蔵SRAM201のうち、関連付けて記憶した記憶領域に連続する記憶領域に記憶させる。
kが2の場合、継続数バッファLcb[2]の値が1であり、直前の継続数バッファLcb[1]の値が2であるため、描画命令ソート実行部203は、描画命令Iを生成しないと判定する。kが3の場合、継続数バッファLcb[3]の値が3であり、直前の継続数バッファLcb[2]の値が1であるため、描画命令ソート実行部203は、描画命令Iを生成すると判定する。描画命令ソート実行部203は、ラインスタート命令と、継続数バッファLcb[3]の値と、ラインセットLの番号と、を関連付けて内蔵SRAM201に記憶させる。そして、描画命令ソート実行部203は、図形1の描画命令群および図形2の描画命令群を、内蔵SRAM201のうち、関連付けて記憶した記憶領域に連続する記憶領域に記憶させる。
kが4の場合、継続数バッファLcb[4]の値が2であり、直前の継続数バッファLcb[3]の値が3であるため、描画命令ソート実行部203は、生成しないと判定する。kが5の場合、継続数バッファLcb[5]の値が1であり、直前の継続数バッファLcb[4]の値が2であるため、描画命令ソート実行部203は、生成しないと判定する。
kが6の場合、継続数バッファLcb[6]の値が2であり、直前の継続数バッファLcb[5]の値が1であるため、描画命令ソート実行部203は、描画命令Iを生成すると判定する。描画命令ソート実行部203は、ラインスタート命令と、継続数バッファLcb[6]の値と、ラインセットLの番号と、を関連付けて内蔵SRAM201に記憶させる。そして、描画命令ソート実行部203は、図形2の描画命令群を、内蔵SRAM201のうち、関連付けて記憶した記憶領域に連続する記憶領域に記憶させる。
最後に、kが7の場合、継続数バッファLcb[7]の値が1、直前の継続数バッファLcb[6]の値が2であるため、描画命令ソート実行部203は、生成しないと判定する。
図19は、図3に示す図形例に関するソート済中間データ例を示す説明図である。ソート済中間データ1900は、継続数とラインセットLの番号とが埋め込まれたラインセットスタート命令と、描画命令群と、がグループごとに並べられてある。ソート済中間データ1900は、内蔵SRAM201内のソート済中間データ領域214に記憶される。ラインセットスタート命令と、継続数と、ラインセットLの番号と、によって、ラインスタート命令に後続する描画命令群が使用するラインセットLが特定可能である。
図20は、ラインセットLごとのソート済中間データ例と本発明のソート済中間データ例との比較を示す説明図である。例えば、ラインセットLごとのソート済中間データ例では、ラインセットL[1]とラインセットL[2]との各値が同一であるため、冗長であるが、本発明のソート済中間データ1900では、冗長な描画命令が1つに纏められてある。
つぎに、描画実行部204は、取得した領域情報が示す分割領域の各々について、ラインセットLが示す領域情報に関連付けられて記憶部に記憶された描画命令Iに基づいて、ラインセットL内の各画素を示す画像データを生成する。上述したように、記憶部は、内蔵SRAM201である。
また、描画実行部204は、分類したグループの各々を対象とし、対象のグループについて記憶部に記憶された描画命令Iを特定し、特定した描画命令Iに基づいて、対象のグループに分類された分割領域の各々について画像データを生成する生成部である。このように、対象のグループごとに描画命令Iが内蔵SRAM201から検索されることにより、検索回数を減少させることができる。また、描画命令ソート実行部203は、記憶部のうち特定した描画命令Iが記憶された記憶領域を示すアドレスを第2記憶部に記憶させる。そして、描画命令ソート実行部203は、第2記憶部に記憶されたアドレスが示す記憶領域に記憶された前記描画命令Iに基づいて、対象のグループに分類された分割領域の各々について画像データを生成する。このように、描画命令Iのアドレスのみを記憶させておくことにより、少ない情報量によって検索に係る時間を短縮させることができる。ここで、第2記憶部は、例えば、ソート済中間データ開始アドレスレジスタ245である。
具体的には、描画実行部204は、ソート済中間データ復元部241と、第2描画命令デコーダ242と、描画部243と、ラインバッファlbufと、を有する。ソート済中間データ復元部241は、内蔵SRAM201に記憶されたソート済中間データを復元した復元済中間データを第2描画命令デコーダ242に渡す。ソート済中間データ復元部241は、例えば、継続数読み取り部244と、描画用継続数カウンタLccdと、ソート済中間データ再生部246と、ソート済中間データ開始アドレスレジスタ245と、を有する。
継続数読み取り部244は、ソート済中間データのラインスタート命令に埋め込まれたラインセット継続数を読み取り、描画用継続数カウンタLccdにセットする。描画用継続数カウンタLccdは、継続数読み取り部244によってセットされたラインセット継続数を初期値とし、生成の対象となるラインセットLが移行する都度、カウントダウンする。描画用継続数カウンタLccdにより、現在の中間データを使い回す処理が終了するラインセットLが判別可能である。
つぎに、ソート済中間データ開始アドレスレジスタ245は、対象のラインセットLの番号がラインセットスタート命令に埋め込まれた番号と一致している場合、ラインセットスタート命令のつぎに記憶された描画命令Iの記憶領域のアドレスを保持する。
ソート済中間データ再生部246は、ソート済中間データ開始アドレスレジスタ245に記憶されたアドレスが示すソート済中間データを内蔵SRAM201から読み出すことにより、ソート済中間データを復元する。そして、ソート済中間データ再生部246は、復元済中間データを第2描画命令デコーダ242へ渡す。
第2描画命令デコーダ242は、復元済中間データに含まれる各図形の描画命令群をデコードし、デコード後の描画命令群を描画部243に受け渡す。さらに、第2描画命令デコーダ242は、デコード中に頂点データを取得するトリガとなる命令を検出した際に、頂点データ取得指示信号を描画部243に送る。そして、描画部243は、当該頂点データ取得指示信号を受けて、内蔵SRAM201上の頂点データ領域212から頂点データを読み出し、描画を実行してラインセットLの各画素の画像データを生成する。
図21は、描画データ復元例を示す説明図である。ここでは、理解の容易化のために、簡単なソート済中間データを例に挙げて説明する。kは描画対象となるラインセットLを示す識別子である。描画実行部204は、描画用継続数カウンタLccdを0にリセットする。そして、描画実行部204は、ソート済中間データを先頭から順に読み出す。kが0の場合、描画実行部204は、ラインセットスタート命令に埋め込まれたラインセットLの番号がkと異なるため、kをインクリメントする。
kが1の場合、描画実行部204は、ラインセットスタート命令に埋め込まれたラインセットLの番号がkと一致するため、ラインセットスタート命令に埋め込まれたラインセット継続数を読み取る。そして、描画実行部204は、ラインセットスタート命令のつぎに記憶された描画命令Iの記憶領域のアドレスADDR2をソート済中間データ開始アドレスレジスタ245に記憶させる。描画実行部204は、ソート済中間データ開始アドレスレジスタ245に記憶されたアドレスADDR2が示す描画命令群I1からつぎのラインセットスタート命令の直前の描画命令群I3までの描画命令群をすべて抽出する。これにより、抽出された描画命令群が、復元済中間データとなる。
つぎに、kが2の場合、描画実行部204は、描画用継続数カウンタLccdの値が1以上であるため、描画用継続数カウンタLccdをカウントダウンする。そして、描画実行部204は、ソート済中間データ開始アドレスレジスタ245に記憶されたアドレスADDR2が示す描画命令群からつぎのラインセットスタート命令の直前の描画命令群までの描画命令群をすべて抽出する。これにより、抽出された描画命令群が復元済中間データとなる。このように、描画実行部204は、ラインセットLごとに復元済中間データを生成することにより、ラインセットLごとに画像データを生成することができる。これにより、記憶領域に描画命令Iを全てのラインセットLごとに重複して記憶せずに済むため、省メモリ化を図ることができる。
(画像処理装置100による画像処理手順例)
図22および図23は、画像処理装置による画像処理手順例を示すフローチャートである。画像処理装置100は、第1描画命令デコーダ223によって、描画命令Iから、対象となる図形の描画命令Iを取得する(ステップS2201)。画像処理装置100は、第1描画命令デコーダ223によって、取得した描画命令Iを解釈する(ステップS2202)。そして、画像処理装置100は、第1描画命令デコーダ223によって、頂点データ取得指示を出力する(ステップS2203)。画像処理装置100は、第1描画命令デコーダ223によって、描画命令Iを転送する(ステップS2204)。
つぎに、画像処理装置100は、描画範囲算出部224によって、開始番号Ls,継続数Lcを算出する(ステップS2205)。画像処理装置100は、描画範囲算出部224によって、開始番号Ls,継続数Lcを分類部222とソート前中間データ生成部225とへ転送する(ステップS2206)。ステップS2206のつぎに、ステップS2207とステップS2209へ移行する。
そして、画像処理装置100は、ソート前中間データ生成部225によって、描画範囲通知命令を追加する(ステップS2207)。つぎに、画像処理装置100は、ソート前中間データ生成部225によって、描画範囲通知命令に開始番号Ls,継続数Lcを埋め込む(ステップS2208)。なお、描画範囲通知命令とは、例えば上述のラインセットスタート命令である。画像処理装置100は、分類部222によって、各バッファを更新し最終値を確定する(ステップS2209)。
ステップS2208およびステップS2209のつぎに、画像処理装置100は、描画命令ソート前処理部202によって、全図形が対象の図形となりソート前中間データの生成を完了したか否かを判断する(ステップS2210)。完了していないと判断された場合(ステップS2210:No)、画像処理装置100は、ステップS2201へ戻る。一方、完了したと判断された場合(ステップS2210:Yes)、画像処理装置100は、ソート済中間データ圧縮部231によって、対象となるラインセットLについての冗長中間データを削除する制御を行う(ステップS2211)。
そして、画像処理装置100は、ソート前中間データをラインセット番号順にソートする(ステップS2212)。そして、画像処理装置100は、全ラインセットLが対象のラインセットLとなり冗長中間データの削除を完了したか否かを判断する(ステップS2213)。完了していないと判断された場合(ステップS2213:No)、画像処理装置100は、ステップS2211へ戻る。
一方、完了したと判断された場合(ステップS2213:Yes)、画像処理装置100は、ソート済中間データ復元部241によって、対象のラインセットLについての圧縮中間データの制御を行う(ステップS2301)。そして、画像処理装置100は、ソート済中間データを取得する(ステップS2302)。画像処理装置100は、ソート済中間データ復元部241によって、ソート済中間データを解釈する(ステップS2303)。そして、画像処理装置100は、ソート済中間データ復元部241によって、頂点データ取得指示を出力する(ステップS2304)。画像処理装置100は、ソート済中間データ復元部241によって、描画命令Iを転送する(ステップS2305)。そして、画像処理装置100は、描画部243により、ソート済中間データ復元部241によって転送された描画命令Iを実行する(ステップS2306)。そして、画像処理装置100は、ラインバッファlbufへの対象のラインセットLについての画像データを生成する(ステップS2307)。画像処理装置100は、全ラインセットLが対象のラインセットLとして画像データの生成が完了したか否かを判断する(ステップS2308)。
画像データの生成が完了したと判断された場合(ステップS2308:Yes)、画像処理装置100は、一連の処理を終了する。画像データの生成が完了していないと判断された場合(ステップS2308:No)、画像処理装置100は、ステップS2301へ戻る。
図24は、画像処理装置によるソート前処理手順例を示すフローチャートである。ここでは、上述したステップS2201からステップS2210までの詳細な処理手順について説明する。画像処理装置100は、分類部222によって、継続数バッファLcbを初期化する(ステップS2401)。そして、画像処理装置100は、分類部222によって、開始番号バッファLsbを初期化する(ステップS2402)。画像処理装置100は、対象となる図形の描画命令Iを取得する(ステップS2403)。画像処理装置100は、第1描画命令デコーダ223によって、取得した描画命令Iを解釈する(ステップS2404)。そして、画像処理装置100は、第1描画命令デコーダ223によって、頂点データ取得指示を出力する(ステップS2405)。画像処理装置100は、第1描画命令デコーダ223によって、描画命令Iを転送する(ステップS2406)。
つぎに、画像処理装置100は、描画範囲算出部224によって、開始番号Ls,継続数Lcを算出する(ステップS2407)。画像処理装置100は、描画範囲算出部224によって、開始番号Ls,継続数Lcを分類部222とソート前中間データ生成部225とへ転送する(ステップS2408)。ステップS2408のつぎに、ステップS2409およびステップS2411へ移行する。
つぎに、画像処理装置100は、ソート前中間データ生成部225によって、描画範囲通知命令を追加する(ステップS2409)。そして、画像処理装置100は、ソート前中間データ生成部225によって、描画範囲通知命令に開始番号Ls,継続数Lcを埋め込み(ステップS2410)、ステップS2414へ移行する。一方、画像処理装置100は、分類部222によって、第1バッファ更新処理を行う(ステップS2411)。
つぎに、画像処理装置100は、分類部222によって、第2バッファ更新処理を行う(ステップS2412)。そして、画像処理装置100は、分類部222によって、第3バッファ更新処理を行う(ステップS2413)。つぎに、画像処理装置100は、全図形が対象となってソート前中間データの生成が完了したかを判断する(ステップS2414)。完了していないと判断された場合(ステップS2414:No)、画像処理装置100は、ステップS2403へ戻る。一方、完了したと判断された場合(ステップS2414:Yes)、画像処理装置100は、一連の処理を終了する。
図25は、第1更新処理手順例を示すフローチャートである。画像処理装置100は、継続数比較部226によって、前処理用継続数カウンタLccpを0にリセットする(ステップS2501)。例えば、画像処理装置100は、Lccp=0にする。つぎに、画像処理装置100は、継続数比較部226によって、カウンタリセットフラグをリセットする(ステップS2502)。そして、画像処理装置100は、k=Ls+Lc−1とする(ステップS2503)。ここで、kはLs+Lc−1からLsに遡る。kが降順となるのは、複数の図形が同一のラインセットを部分的に占める場合、省略可能なラインセット継続数が最大公約数的に減少するのを、前処理用継続数カウンタLccpの値が1からカウントアップすることにより処理するためである。
画像処理装置100は、継続数比較部226によって、Lccp=Lccp+1とする(ステップS2504)。そして、画像処理装置100は、継続数比較部226によって、Lcb[k]>Lccpであるか否かを判断する(ステップS2505)。Lcb[k]>Lccpである場合(ステップS2505:Yes)、画像処理装置100は、ステップS2511へ移行する。
Lcb[k]>Lccpでない場合(ステップS2505:No)、画像処理装置100は、継続数比較部226によって、Lcb[k]==0であるか否かを判断する(ステップS2506)。ここで、記号==は、プログラミング言語Cの文法に倣い、等価であることを意味する。Lcb[k]==0でない場合(ステップS2506:No)、画像処理装置100は、ステップS2512へ移行する。Lcb[k]==0であると判断された場合(ステップS2506:Yes)、画像処理装置100は、継続数比較部226によって、Lcb[k+1]>0であるか否かを判断する(ステップS2507)。
Lcb[k+1]>0でないと判断された場合(ステップS2507:No)、画像処理装置100は、ステップS2511へ移行する。Lcb[k+1]>0であると判断された場合(ステップS2507:Yes)、画像処理装置100は、継続数比較部226によって、カウンタリセットフラグが立っているか否かを判断する(ステップS2508)。カウンタリセットフラグが立っているとは、イネーブル状態になっていることを示す。カウンタリセットフラグが立っていると判断された場合(ステップS2508:Yes)、画像処理装置100は、ステップS2511へ移行する。カウンタリセットフラグが立っている場合に、継続数バッファLcb[k+1]が0より大きいのは、つぎのラインセット[k+1]において、現在対象の図形によりLcb[k+1]が更新されたことを意味する。現在対象の図形と、以前対象となった図形と、の重複によって発生する継続数バッファ[k+1]の更新ではないため、現在の前処理用継続数カウンタLccpが継続数バッファLcb[k]の値として適切であることになる。そのため、ステップS2508においてYesの場合、ステップS2511へ移行することになる。
カウンタリセットフラグが立っていないと判断された場合(ステップS2508:No)、画像処理装置100は、継続数比較部226によって、前処理用継続数カウンタLccpを1にリセットする(ステップS2509)。ここでは、画像処理装置100は、Lccp=1とする。そして、画像処理装置100は、継続数比較部226によって、カウンタリセットフラグを立てる(ステップS2510)。つぎに、画像処理装置100は、継続数比較部226によって、継続数バッファLcb[k]を前処理用継続数カウンタLccpにより更新する(ステップS2511)。例えば、画像処理装置100は、Lcb[k]=Lccpとする。カウンタリセットフラグが立っていない場合に、継続数バッファLcb[k+1]が0より大きいのは、つぎのラインセット[k+1]が以前対象となった図形と現在対象の図形との、重複によって更新されたことを意味する。そして、つぎのラインセット[k+1]はラインセットの継続区間の上端であることを意味する。そのため、現在の対象のラインセット[k]からkの値が小さい方向にあらたなラインセット継続区間ができる。そのため、ステップS2508においてNoの場合、処理手順が経路5のようになることにより、現在の前処理用継続数カウンタLccpが1にリセットされ、継続数バッファLcb[k]も1によって更新される。また、つぎの対象のラインセットについての処理手順に備えてカウンタリセットフラグが立てられる。
そして、画像処理装置100は、分類部222によって、k≦Lsであるか否かを判断する(ステップS2512)。k≦Lsでないと判断された場合(ステップS2512:No)、画像処理装置100は、k=k−1とし(ステップS2513)、ステップS2504へ戻る。k≦Lsであると判断された場合(ステップS2512:Yes)、画像処理装置100は、一連の処理を終了する。
図26は、第2更新処理手順例を示すフローチャートである。画像処理装置100は、継続数比較部226によって、Lcb[Ls−1]>1であるか否かを判断する(ステップS2601)。Lcb[Ls−1]>1であると判断された場合(ステップS2601:Yes)、画像処理装置100は、継続数比較部226によって、前処理用継続数カウンタLccpを0にリセットする(ステップS2602)。例えば、画像処理装置100は、Lccp=0とする。画像処理装置100は、k=Ls−1とする(ステップS2603)。
つぎに、画像処理装置100は、継続数比較部226によって、Lccp=Lccp+1とする(ステップS2604)とする。画像処理装置100は、継続数比較部226によって、継続数Lcbバッファ[k]をLccpにより更新する(ステップS2605)。例えば、画像処理装置100は、Lcb[k]=Lccpとする。
そして、画像処理装置100は、Lccpを0にリセットする(ステップS2606)。画像処理装置100は、継続数比較部226によって、Lcb[k−1]≦1であるか否かを判断する(ステップS2607)。Lcb[k−1]≦1であると判断された場合(ステップS2607:Yes)、画像処理装置100は、一連の処理を終了する。Lcb[k−1]≦1でないと判断された場合(ステップS2608:No)、画像処理装置100は、k=k−1とし(ステップS2608)、ステップS2605へ戻る。
図27は、第3更新処理手順例を示すフローチャートである。画像処理装置100は、開始番号参照更新部227によって、ラインセット開始番号一時バッファLstを開始番号バッファLsb[Ls]にリセットする(ステップS2701)。画像処理装置100は、Lst=Lsb[Ls]とする。
画像処理装置100は、継続数比較部226によって、継続数前置バッファLcpを継続数バッファLcb[Ls]にリセットする(ステップS2702)。画像処理装置100は、Lcp=Lcb[Ls]とする。つぎに、画像処理装置100は、k=Lsとする(ステップS2703)。そして、画像処理装置100は、継続数比較部226によって、Lcb[k]>Lcpであるか否かを判断する(ステップS2704)。Lcb[k]>Lcpでないと判断された場合(ステップS2704:No)、画像処理装置100は、ステップS2707へ移行する。Lcb[k]>Lcpであると判断された場合(ステップS2704:Yes)、画像処理装置100は、開始番号参照更新部227によって、開始番号一時バッファLstをkにリセットする(ステップS2705)。例えば、画像処理装置100は、Lst=kとする。
画像処理装置100は、継続数比較部226によって、LcpをLcb[k]にリセットする(ステップS2706)。例えば、画像処理装置100は、Lcp=Lcb[k]とする。画像処理装置100は、開始番号参照更新部227によりLsb[k]=Lstとする(ステップS2707)。画像処理装置100は、継続数前置バッファLcpをデクリメントする(ステップS2708)。画像処理装置100は、例えば、Lcp=Lcp−1とする。
画像処理装置100は、継続数比較部226によって、k≧Ls+Lcであるか否かを判断する(ステップS2709)。k≧Ls+Lcでない場合(ステップS2709:No)、画像処理装置100は、k=k+1とし(ステップS2710)、ステップS2704へ移行する。k≧Ls+Lcである場合(ステップS2709:Yes)、画像処理装置100は、一連の処理を終了する。
図28は、ソート処理手順例1を示すフローチャートである。ここでは、上述したステップS2211,S2212の詳細なソート処理手順を示す。画像処理装置100は、描画命令ソート実行部203により、k=0とする(ステップS2801)。画像処理装置100は、ラインセット番号kを埋め込んだラインセットスタート命令を生成する(ステップS2802)。そして、画像処理装置100は、開始番号判定部233によって、Lsb[k]==kであるか否かを判断する(ステップS2803)。Lsb[k]==kでないと判断された場合(ステップS2803:No)、画像処理装置100は、削除スイッチ234により、削除を行い(ステップS2804)、ステップS2811へ移行する。
Lsb[k]==kであると判断された場合(ステップS2803:Yes)、画像処理装置100は、Lcb[k]==0であるか否かを判断する(ステップS2805)。Lcb[k]==0である場合(ステップS2805:Yes)、画像処理装置100は、ステップS2804へ移行する。Lcb[k]==0でない場合(ステップS2805:No)、画像処理装置100は、ラインセット番号kが埋め込まれたラインセットスタート命令中のラインセット継続数フィールドLciに継続数バッファLcb[k]の値を埋め込む(ステップS2806)。
そして、画像処理装置100は、ラインセット番号kが埋め込まれたラインセットスタート命令を内蔵SRAM201に書き込む(ステップS2807)。そして、画像処理装置100は、複数の図形のうちの対象の図形はラインセットL[k]に属するか否かを判断する(ステップS2808)。ここで、対象の図形はラインセットL[k]に属するとは、対象の図形の少なくとも一部がラインセットL[k]に描画されることを示す。
属すると判断された場合(ステップS2808:Yes)、画像処理装置100は、ソート前中間データをソート済中間データとして内蔵SRAM201に書き込み(ステップS2809)、ステップS2810へ移行する。属さないと判断された場合(ステップS2808:No)、画像処理装置100は、ステップS2810へ移行する。
つぎに、画像処理装置100は、全図形が対象の図形としてソート済中間データの書き込み処理が完了したか否かを判断する(ステップS2810)。完了していないと判断された場合(ステップS2810:No)、画像処理装置100は、ステップS2808へ戻る。完了したと判断された場合(ステップS2810:Yes)、画像処理装置100は、全ラインセットLが対象のラインセットLとしてソート処理が完了したか否かを判断する(ステップS2811)。完了していないと判断された場合(ステップS2811:No)、画像処理装置100は、k=k+1とし(ステップS2812)、ステップS2802へ戻る。完了したと判断された場合(ステップS2811:Yes)、画像処理装置100は、一連の処理を終了する。
図29は、ソート処理手順例2を示すフローチャートである。ここでは、上述したステップS2211,S2212の詳細なソート処理手順を示す。画像処理装置100は、k=0とする(ステップS2901)。つぎに、画像処理装置100は、ラインセット番号kを埋め込んだラインセットスタート命令を生成する(ステップS2902)。画像処理装置100は、Lcb[k]==0であるか否かを判断する(ステップS2903)。
Lcb[k]==0であると判断された場合(ステップS2903:Yes)、画像処理装置100は、削除スイッチ234により、ソート前中間データの削除を行う(ステップS2904)。Lcb[k]==0でないと判断された場合(ステップS2903:No)、画像処理装置100は、k==0であるか否かを判断する(ステップS2905)。k==0である場合(ステップS2905:Yes)、画像処理装置100は、ステップS2907へ移行する。k==0でない場合(ステップS2905:No)、画像処理装置100は、Lcb[k−1]==1または0、かつLcb[k]≧1であるか否かを判断する(ステップS2906)。Lcb[k−1]==1または0でない、またはLcb[k]≧1でない場合(ステップS2906:No)、画像処理装置100は、ステップS2904へ移行する。
Lcb[k−1]==1または0、かつLcb[k]≧1である場合(ステップS2906:Yes)、ラインセット番号kが埋め込まれたラインセットスタート命令中のラインセット継続数フィールドLciに継続数バッファLcb[k]を埋め込む(ステップS2907)。例えば、画像処理装置100は、Lci=Lcb[k]とする。
つぎに、画像処理装置100は、ラインセット番号kが埋め込まれラインセットスタート命令を内蔵SRAM201に書き出す(ステップS2908)。そして、画像処理装置100は、対象の図形はラインセットL[k]に属するか否かを判断する(ステップS2909)。対象の図形はラインセットL[k]に属する場合(ステップS2909:Yes)、画像処理装置100は、ソート前中間データをソート済中間データとして内蔵SRAM201に書き出す(ステップS2910)。
そして、画像処理装置100は、全図形が対象の図形としてソート済中間データの書き込み処理を完了したか否かを判断する(ステップS2911)。完了していないと判断された場合(ステップS2911:No)、画像処理装置100は、ステップS2909へ戻る。完了したと判断された場合(ステップS2911:Yes)、画像処理装置100は、全ラインセットLが対象のラインセットLとしてソート処理が完了したか否かを判断する(ステップS2912)。完了していないと判断された場合(ステップS2912:No)、画像処理装置100は、k=k+1とし(ステップS2913)、ステップS2902へ戻る。完了したと判断された場合(ステップS2912:Yes)、画像処理装置100は、一連の処理を終了する。
図30は、画像データ生成処理手順例を示すフローチャートである。ここでは、上述したS2301〜S2308の詳細な画像データ生成処理手順について説明する。画像処理装置100は、ソート済中間データ復元部241によって、描画用継続数カウンタLccdを0によりリセットする(ステップS3001)。画像処理装置100は、k=0とする(ステップS3002)。画像処理装置100は、ソート済中間データ復元部241によって、ラインセット番号kが埋め込まれたラインセットスタート命令を検出したか否かを判断する(ステップS3003)。
検出したと判断された場合(ステップS3003:Yes)、画像処理装置100は、埋め込まれたラインセット継続数Lciを読み取り、描画用継続数カウンタLccdにセットする(ステップS3004)。例えば、画像処理装置100は、Lccd=Lciとする。画像処理装置100は、継続数読み取り部244によって、描画命令Iの先頭のアドレスをソート済中間データ開始アドレスレジスタ245に退避させ(ステップS3005)、ステップS3009へ移行する。
一方、検出していないと判断された場合(ステップS3003:No)、画像処理装置100は、ソート済中間データ復元部241によって、Lccd>1であるか否かを判断する(ステップS3006)。ステップS3003におけるNoの場合、ラインセットL[k]に属する中間データが省略または存在しない場合である。Lccd>1でないと判断された場合(ステップS3006:No)、画像処理装置100は、ステップS3012へ移行する。Lccd>1であると判断された場合(ステップS3006:Yes)、画像処理装置100は、描画用継続数カウンタLccdをカウントダウンする(ステップS3007)。例えば、画像処理装置100は、Lccd=Lccd−1とする。ステップS3006において、Yesの場合、対象のラインセットLに対応するソート済中間データは省略されている。
画像処理装置100は、ソート済中間データ再生部246によって、ソート済中間データ開始アドレスレジスタ245に設定されたアドレスに基づきソート済中間データを内蔵SRAM201から読み出し(ステップS3008)、ステップS3009へ移行する。
そして、画像処理装置100は、第2描画命令デコーダ242によって、ソート済中間データを解釈し、描画部243に送る(ステップS3009)。そして、画像処理装置100は、描画部243により、描画を実行する(ステップS3010)。また、画像処理装置100は、画像データを生成する(ステップS3011)。最後に、全ラインセットLが対象のラインセットLとして画像データの生成処理が完了したか否かを判断する(ステップS3012)。いずれかのラインセットLが完了していないと判断された場合(ステップS3012:No)、画像処理装置100は、k=k+1とし(ステップS3013)、ステップS3003へ戻る。全ラインセットLが完了していると判断された場合(ステップS3012:Yes)、画像処理装置100は、一連の処理を終了する。
図31は、画像処理装置を利用したシステム例を示す説明図である。システム3100としては、自動車を例に挙げる。システム3100は、各種センサー3101と、グラフィックスSoC(System on a Chip)3102と、メータクラスターディスプレイ3103と、各種入力装置3104と、を有する。各種センサー3101としては、車速、エンジン回転数、などをチェックする。グラフィックスSoC3102は、画像処理装置100を有する専用のプロセッサである。そして、グラフィックスSoC3102は、メータクラスターディスプレイ3103に表示させるための画像データをラインセットL単位で生成する。各種入力装置3104は、ウィンカーレバーなどである。例えば、グラフィックスSoC3102は、例えば、図2Aに示したCPU251、GPU252、ROM253、ディスクドライブ255、ディスク256などを有していてもよい。
また、画像処理装置を利用したシステムとしては、PC(Personal Computer)、テレビ、携帯端末装置などのディスプレイを有する装置であったり、プリンタなどであってもよい。
以上説明したように、本実施の形態にかかる画像処理装置100は、描画される図形の組み合わせごとに分割領域をグループ分けし、グループごとに描画命令Iを記憶部に記憶させる。これにより、分割領域ごとの画像データを生成するために記憶される描画命令の削減を図ることができる。例えば記憶先の記憶部は、例えば、画像処理装置100の外部のメモリであってもよいし、内部のメモリであってもよい。外部のメモリである場合、記憶される描画命令を削減することにより、他の装置と画像処理装置100とによる記憶領域の競合の発生を抑止することができる。内部のメモリであると、メモリ量に制約があるため、制約内に記憶格納データ量を収めるための画像処理装置100による処理が複雑化する。そのため、画像データの精度や中間データの精度が低下する場合がある。これに対して、上述したように本実施の形態にかかる画像処理装置100によれば、記憶される描画命令の削減を図ることができるため、データの精度が低下することを抑止することができる。
また、画像処理装置100は、複数の図形のうちの少なくとも一部が描画される図形が同一であり、かつ画像データを生成する処理における画像データの生成順が連続する各分割領域が同一のグループとなるように分類する。このように、生成順にグループ化されるため、同一の描画命令が連続して使用されるようになり、同一の描画命令を使い回すための制御を容易化させることができる。
また、グループに分類された分割領域を示す領域情報は、グループに分類された分割領域のうち生成順が先頭または末尾の分割領域を示す領域情報と、前記グループに分類された分割領域の数を示す情報と、によって表される。このように、ビット幅を合わせることにより、記憶される描画命令の削減を図ることができる。
また、画像処理装置100は、分類したグループの各々を対象とし、対象のグループについて記憶部に記憶された描画命令Iを特定し、特定した描画命令Iに基づいて、対象のグループに分類された分割領域の各々について画像データを生成する。これにより、グループごとに記憶部を1回検索するだけで、画像データを生成することができるため、検索に要する時間を短縮することが可能となる。
また、画像処理装置100は、特定した描画命令Iが記憶された記憶領域を示すアドレスを第2記憶部に記憶させる。そして、画像処理装置100は、第2記憶部に記憶されたアドレスが示す記憶領域に記憶された描画命令Iに基づいて、対象のグループに分類された分割領域の各々について画像データを生成する。このように、特定した描画命令Iを記憶させるレジスタを持たずに、描画命令Iが格納された記憶領域のアドレスをレジスタに記憶させておくことにより、記憶部からの描画命令Iの特定が容易となり、特定に要する時間の短縮化を図ることができる。
また、複数の分割領域の各々のサイズは、ラインバッファのサイズである。そのため、分割領域ごとに画像データを作成する際に、分割領域のサイズとラインバッファのサイズとが同じであれば、分割領域について生成した画像データをそのままラインバッファに記憶させることができる。
なお、本実施の形態で説明した画像処理方法は、予め用意された画像処理プログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本画像処理プログラムは、磁気ディスク、光ディスク、USB(Universal Serial Bus)フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、画像処理プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)画像処理装置が、
描画領域に描画される複数の図形の各々について、前記図形を前記描画領域に描画させる描画命令と、前記描画領域を分割した複数の分割領域のうちの前記図形の少なくとも一部が描画される分割領域を示す領域情報と、を取得し、
取得した前記領域情報が示す分割領域の各々について、前記複数の図形のうちの少なくとも一部が描画される図形が同一の各分割領域が同じグループとなるように分類し、
分類した前記グループの各々について、前記グループに分類された分割領域を示す領域情報と、前記グループに分類された分割領域に少なくとも一部が描画される図形について取得した前記描画命令と、を関連付けて第1記憶部に記憶させ、
取得した前記領域情報が示す分割領域の各々について、前記分割領域が示す領域情報に関連付けられて前記第1記憶部に記憶された前記描画命令に基づいて、前記分割領域内の各画素を示す画像データを生成する、
処理を実行することを特徴とする画像処理方法。
(付記2)前記分類する処理では、前記複数の図形のうちの少なくとも一部が描画される図形が同一であり、かつ前記画像データを生成する処理における前記画像データの生成順が連続する各分割領域が同一のグループとなるように分類することを特徴とする付記1に記載の画像処理方法。
(付記3)前記グループに分類された分割領域を示す領域情報は、前記グループに分類された分割領域のうち前記生成順が先頭または末尾の分割領域を示す領域情報と、前記グループに分類された分割領域の数を示す情報と、によって表されることを特徴とする付記2に記載の画像処理方法。
(付記4)前記生成する処理では、分類した前記グループの各々を対象とし、対象のグループについて前記第1記憶部に記憶された前記描画命令を特定し、特定した前記描画命令に基づいて、前記対象のグループに分類された前記分割領域の各々について前記画像データを生成することを特徴とする付記1〜3のいずれか一つに記載の画像処理方法。
(付記5)前記生成する処理では、前記第1記憶部のうち特定した前記描画命令が記憶された記憶領域を示すアドレスを第2記憶部に記憶させ、前記第2記憶部に記憶された前記アドレスが示す記憶領域に記憶された前記描画命令に基づいて、前記対象のグループに分類された前記分割領域の各々について前記画像データを生成することを特徴とする付記4に記載の画像処理方法。
(付記6)前記複数の分割領域の各々のサイズは、ラインバッファのサイズであることを特徴とする付記1〜5のいずれか一つに記載の画像処理方法。
(付記7)描画領域に描画される複数の図形の各々について、前記図形を前記描画領域に描画させる描画命令と、前記描画領域を分割した複数の分割領域のうちの前記図形の少なくとも一部が描画される分割領域を示す領域情報と、を取得する取得部と、
前記取得部が取得した前記領域情報が示す分割領域の各々について、前記複数の図形のうちの少なくとも一部が描画される図形が同一の各分割領域が同じグループとなるように分類する分類部と、
前記分類部が分類した前記グループの各々について、前記グループに分類された分割領域を示す領域情報と、前記グループに分類された分割領域に少なくとも一部が描画される図形について取得した前記描画命令と、を関連付けて記憶部に記憶させる関連付け部と、
取得した前記領域情報が示す分割領域の各々について、前記分割領域が示す領域情報に前記関連付け部によって関連付けられて前記記憶部に記憶された前記描画命令に基づいて、前記分割領域内の各画素を示す画像データを生成する生成部と、
を有することを特徴とする画像処理装置。