(57)【特許請求の範囲】
【請求項１】
下記を備える方法：
３次元（３Ｄ）グラフィックス処理ユニット（ＧＰＵ）を用いて、レンダリングすべき２次元（２Ｄ）パラメトリック曲線上にある複数の頂点ポイントにおける、ある頂点ポイントの順序位置を示すインデックス値を得ること；
前記ＧＰＵを用いて、レンダリングすべき前記２Ｄパラメトリック曲線を表す１つまたは複数の数式と、前記インデックス値に応じて計算された１つまたは複数の変数とを使用して、前記複数の頂点ポイントのうちの２つ以上の頂点ポイントについての位置座標を判断すること；
前記ＧＰＵを用いて、前記２つ以上の頂点ポイントの前記位置座標を分析すること、ここにおいて、前記分析することは、前記２つ以上の頂点ポイントの前記位置座標のそれぞれを、対応する前の頂点ポイントの位置座標とそれぞれ比較することを同時に行うことを備える；および、
前記ＧＰＵを用いて、前記分析に基づいて前記２つ以上の頂点ポイントのうちの少なくとも１つを廃棄すること。
【請求項２】
請求項１に記載の方法、ただし、
前記２つ以上の頂点ポイントの前記位置座標を分析することは、前記２つ以上の頂点ポイントのうちの第１の頂点ポイントの第１の位置座標を前記２つ以上の頂点ポイントのうちの第２の頂点ポイントの第２の位置座標と比較することを備え、ただし、前記第１の頂点ポイントが前記第２の頂点ポイントの直前にあり、
前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することは、前記第１および第２の位置座標が同じであるとき、前記第２の頂点ポイントを廃棄することを備える。
【請求項３】
請求項２に記載の方法、ただし、
前記２つ以上の頂点ポイントの前記位置座標を分析することは、前記２つ以上の頂点ポイントのうちの第３の頂点ポイントの第３の位置座標を前記第２の位置座標と比較することをさらに備え、ただし、前記第２の頂点ポイントが前記第３の頂点ポイントの直前にあり、
前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することは、前記第２および第３の位置座標が同じであるとき、前記第３の頂点ポイントを廃棄することを備える。
【請求項４】
下記をさらに備える、請求項３に記載の方法：
前記第１および第２の位置座標が同じでないとき、前記第２の頂点ポイントの前記位置座標を出力すること；および、
前記第２および第３の位置座標が同じでないとき、前記第３の頂点ポイントの前記位置座標を同時に出力すること。
【請求項５】
前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することが、前の頂点ポイントと後続の頂点ポイントとによって形成される直線上にある少なくとも１つの頂点ポイントを廃棄することを備える、請求項１に記載の方法。
【請求項６】
請求項１に記載の方法、ただし、
前記２つ以上の頂点ポイントの前記位置座標を分析することが、下記を備える：
第１の頂点ポイントの位置座標と第２の頂点ポイントの位置座標との間の第１の傾きを計算すること；および、
前記第２の頂点ポイントの前記位置座標と第３の頂点ポイントの位置座標との間の第２の傾きを計算すること、
なお、前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することは、前記第１および第２の計算された傾きが同じであるとき、前記第２の頂点ポイントを廃棄することを備える。
【請求項７】
請求項６に記載の方法、ただし、
前記２つ以上の頂点ポイントの前記位置座標を分析することは、前記第１の頂点ポイントの前記位置座標を前記第２の頂点ポイントの前記位置座標と比較することをさらに備え、
前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することは、前記第１および第２の位置座標が同じであるとき、前記第２の頂点ポイントを廃棄することを備える。
【請求項８】
前記位置座標を判断することが、前記２つ以上の頂点ポイントについてディスプレイ座標空間における前記位置座標を前記判断することを備える、請求項１に記載の方法。
【請求項９】
前記インデックス値を得ることが、前記インデックス値を前記ＧＰＵのカウンタから得ることを備える、請求項１に記載の方法。
【請求項１０】
前記ＧＰＵを用いて、前記２Ｄパラメトリック曲線をディスプレイに提示するために前記２Ｄパラメトリック曲線をレンダリングすることをさらに備える、請求項１に記載の方法。
【請求項１１】
請求項１に記載の方法、ただし、
前記ＧＰＵは３次元（３Ｄ）ＧＰＵを備え、
前記２つ以上の頂点ポイントの前記位置座標を分析することは、前記３Ｄ  ＧＰＵの頂点シェーダを用いて、前記２つ以上の頂点ポイントの前記位置座標を分析することを備え、
前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することは、前記３Ｄ  ＧＰＵの前記頂点シェーダを用いて、前記分析に基づいて前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することを備える。
【請求項１２】
前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することが、前記２つ以上の頂点ポイントのうちの少なくとも１つの他の頂点ポイントと同じピクセル位置にマッピングする、前記２つ以上の頂点ポイントのうちの少なくとも１つを廃棄することを備える、請求項１に記載の方法。
【請求項１３】
下記を含む、３次元（３Ｄ）グラフィックス処理ユニット（ＧＰＵ）を備えるデバイス：
レンダリングすべき２次元（２Ｄ）パラメトリック曲線上にある複数の頂点ポイントにおける、ある頂点ポイントの順序位置を示すインデックス値を得ることと、レンダリングすべき前記２Ｄパラメトリック曲線を表す１つまたは複数の数式と、前記インデックス値に応じて計算された１つまたは複数の変数とを使用して、前記複数の頂点ポイントのうちの２つ以上の頂点ポイントについての位置座標を判断することとを実行する位置座標計算モジュール；および、
前記２つ以上の頂点ポイントの前記位置座標を分析し、前記分析に基づいて前記２つ以上の頂点ポイントのうちの少なくとも１つを廃棄する頂点廃棄モジュール、ここにおいて、前記分析することは、前記２つ以上の頂点ポイントの前記位置座標のそれぞれを、対応する前の頂点ポイントの位置座標とそれぞれ比較することを同時に行うことを備える。
【請求項１４】
前記頂点廃棄モジュールが下記を実行する請求項１３に記載のデバイス：
前記２つ以上の頂点ポイントのうちの第１の頂点ポイントの第１の位置座標を前記２つ以上の頂点ポイントのうちの第２の頂点ポイントの第２の位置座標と比較すること、ただし、前記第１の頂点ポイントが前記第２の頂点ポイントの直前にある；および、
前記第１および第２の位置座標が同じであるとき、前記第２の頂点ポイントを廃棄すること。
【請求項１５】
前記頂点廃棄モジュールが下記を実行する請求項１４に記載のデバイス：
前記２つ以上の頂点ポイントのうちの第３の頂点ポイントの第３の位置座標を前記第２の位置座標と比較すること、ただし、前記第２の頂点ポイントが前記第３の頂点ポイントの直前にある；および、
前記第２および第３の位置座標が同じであるとき、前記第３の頂点ポイントを廃棄すること。
【請求項１６】
前記頂点廃棄モジュールが下記を実行する請求項１５に記載のデバイス：
前記第１および第２の位置座標が同じでないとき、前記第２の頂点ポイントの前記位置座標を出力すること；および、
前記第２および第３の位置座標が同じでないとき、前記第３の頂点ポイントの前記位置座標を同時に出力すること。
【請求項１７】
前記頂点廃棄モジュールが、前の頂点ポイントと後続の頂点ポイントとによって形成される直線上にある少なくとも１つの頂点ポイントを廃棄する、請求項１３に記載のデバイス。
【請求項１８】
前記頂点廃棄モジュールが下記を実行する請求項１３に記載のデバイス：
第１の頂点ポイントの位置座標と第２の頂点ポイントの位置座標との間の第１の傾きを計算すること；
前記第２の頂点ポイントの前記位置座標と第３の頂点ポイントの位置座標との間の第２の傾きを計算すること；および、
前記第１および第２の計算された傾きが同じであるとき、前記第２の頂点ポイントを廃棄すること。
【請求項１９】
前記頂点廃棄モジュールが下記を実行する請求項１８に記載のデバイス：
前記第１の頂点ポイントの前記位置座標を前記第２の頂点ポイントの前記位置座標と比較すること；および、
前記第１および第２の位置座標が同じであるとき、前記第２の頂点ポイントを廃棄すること。
【請求項２０】
前記処理ユニットが、前記２つ以上の頂点ポイントについてディスプレイ座標空間における前記位置座標を判断する、請求項１３に記載のデバイス。
【請求項２１】
前記ＧＰＵが、前記インデックス値を発生するカウンタを含む、請求項１３に記載のデバイス。
【請求項２２】
前記ＧＰＵが、前記２Ｄパラメトリック曲線をディスプレイに提示するために前記２Ｄパラメトリック曲線をレンダリングする、請求項１３に記載のデバイス。
【請求項２３】
前記ＧＰＵが３次元（３Ｄ）ＧＰＵを備える、請求項１３に記載のデバイス。
【請求項２４】
前記ＧＰＵが、前記位置座標計算モジュールと前記頂点廃棄モジュールとを含む頂点シェーダを備える３次元（３Ｄ）ＧＰＵを備える、請求項１３に記載のデバイス。
【請求項２５】
前記デバイスがワイヤレス通信デバイスを備える、請求項１３に記載のデバイス。
【請求項２６】
前記デバイスが集積回路デバイスを備える、請求項１３に記載のデバイス。
【請求項２７】
前記頂点廃棄モジュールが、前記２つ以上の頂点ポイントのうちの少なくとも１つの他の頂点ポイントと同じピクセル位置にマッピングする、前記２つ以上の頂点ポイントのうちの少なくとも１つを廃棄する、請求項１３に記載のデバイス。
【請求項２８】
実行されたときに、３次元（３Ｄ）ＧＰＵ内の少なくとも１つのプロセッサに下記動作を実行させる命令を備えるコンピュータ可読媒体：
前記ＧＰＵを用いて、レンダリングすべき２次元（２Ｄ）パラメトリック曲線上にある複数の頂点ポイントにおける、ある頂点ポイントの順序位置を示すインデックス値を得ること；
前記ＧＰＵを用いて、レンダリングすべき前記２Ｄパラメトリック曲線を表す１つまたは複数の数式と、前記インデックス値に応じて計算された１つまたは複数の変数とを使用して、前記複数の頂点ポイントのうちの２つ以上の頂点ポイントについての位置座標を判断すること；
前記ＧＰＵを用いて、前記２つ以上の頂点ポイントの前記位置座標を分析すること、ここにおいて、前記分析することは、前記２つ以上の頂点ポイントの前記位置座標のそれぞれを、対応する前の頂点ポイントの位置座標とそれぞれ比較することを同時に行うことを備える：および、
前記ＧＰＵを用いて、前記分析に基づいて前記２つ以上の頂点ポイントのうちの少なくとも１つを廃棄すること。
【請求項２９】
前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することを前記プロセッサに実行させる前記命令が、前記２つ以上の頂点ポイントのうちの少なくとも１つの他の頂点ポイントと同じピクセル位置にマッピングする、前記２つ以上の頂点ポイントのうちの少なくとも１つを廃棄することを前記プロセッサに実行させる命令を備える、請求項２８に記載のコンピュータ可読媒体。
【請求項３０】
請求項２８に記載のコンピュータ可読媒体、ただし、
前記２つ以上の頂点ポイントの前記位置座標を分析することを前記プロセッサに実行させる前記命令は、前記２つ以上の頂点ポイントのうちの第１の頂点ポイントの第１の位置座標を前記２つ以上の頂点ポイントのうちの第２の頂点ポイントの第２の位置座標と比較することを前記プロセッサに実行させる命令を備え、ただし、前記第１の頂点ポイントが前記第２の頂点ポイントの直前にあり、
前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することを前記プロセッサに実行させる前記命令は、前記第１および第２の位置座標が同じであるとき、前記第２の頂点ポイントを廃棄することを前記プロセッサに実行させる命令を備える。
【請求項３１】
請求項２８に記載のコンピュータ可読媒体、ただし、
前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することを前記プロセッサに実行させる前記命令は、前の頂点ポイントと後続の頂点ポイントとによって形成される直線上にある少なくとも１つの頂点ポイントを廃棄することを前記プロセッサに実行させる命令を備える。
【請求項３２】
請求項２８に記載のコンピュータ可読媒体、ただし、
前記２つ以上の頂点ポイントの前記位置座標を分析することを前記プロセッサに実行させる前記命令は、下記を前記プロセッサに実行させる命令を備える：
第１の頂点ポイントの位置座標と第２の頂点ポイントの位置座標との間の第１の傾きを計算すること；および、
前記第２の頂点ポイントの前記位置座標と第３の頂点ポイントの位置座標との間の第２の傾きを計算すること、
なお、前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することを前記プロセッサに実行させる前記命令は、前記第１および第２の計算された傾きが同じであるとき、前記第２の頂点ポイントを廃棄することを前記プロセッサに実行させる命令を備える。
【請求項３３】
請求項３２に記載のコンピュータ可読媒体、ただし、
前記２つ以上の頂点ポイントの前記位置座標を分析することを前記プロセッサに実行させる前記命令は、前記第１の頂点ポイントの前記位置座標を前記第２の頂点ポイントの前記位置座標と比較することを前記プロセッサに実行させる命令をさらに備え、
前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することを前記プロセッサに実行させる前記命令は、前記第１および第２の位置座標が同じであるとき、前記第２の頂点ポイントを廃棄することを前記プロセッサに実行させる命令を備える。
【請求項３４】
請求項２８に記載のコンピュータ可読媒体、ただし、
前記位置座標を判断することを前記プロセッサに実行させる前記命令は、前記２つ以上の頂点ポイントについてディスプレイ座標空間における前記位置座標を判断することを前記プロセッサに実行させる命令を備える。
【請求項３５】
請求項２８に記載のコンピュータ可読媒体、ただし、
前記インデックス値を得ることを前記プロセッサに実行させる前記命令は、前記インデックス値を前記ＧＰＵのカウンタから得ることを前記プロセッサに実行させる命令を備える。
【請求項３６】
前記２Ｄパラメトリック曲線をディスプレイに提示するために前記２Ｄパラメトリック曲線をレンダリングすることを前記プロセッサに実行させる命令をさらに備える、請求項２８に記載のコンピュータ可読媒体。
【請求項３７】
請求項２８に記載のコンピュータ可読媒体、ただし、
前記ＧＰＵは３次元（３Ｄ）ＧＰＵを備え、
前記２つ以上の頂点ポイントの前記位置座標を分析することを前記プロセッサに実行させる前記命令は、前記３Ｄ  ＧＰＵの頂点シェーダを用いて、前記２つ以上の頂点ポイントの前記位置座標を分析することを前記プロセッサに実行させる命令を備え、
前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することを前記プロセッサに実行させる前記命令は、前記３Ｄ  ＧＰＵの前記頂点シェーダを用いて、前記分析に基づいて前記２つ以上の頂点ポイントのうちの前記少なくとも１つを廃棄することを前記プロセッサに実行させる命令を備える。
【請求項３８】
下記手段を備える、３次元（３Ｄ）グラフィックス処理ユニット（ＧＰＵ）を備えるデバイス：
レンダリングすべき２次元（２Ｄ）パラメトリック曲線上にある複数の頂点ポイントにおける、ある頂点ポイントの順序位置を示すインデックス値を得るための手段；
レンダリングすべき前記２Ｄパラメトリック曲線を表す１つまたは複数の数式と、前記インデックス値に応じて計算された１つまたは複数の変数とを使用して、前記複数の頂点ポイントのうちの２つ以上の頂点ポイントについての位置座標を判断するための手段；  前記２つ以上の頂点ポイントの前記位置座標を分析するための手段、ここにおいて、前記分析手段は、前記２つ以上の頂点ポイントの前記位置座標のそれぞれを、対応する前の頂点ポイントの位置座標とそれぞれ比較することを同時に行う；および、
前記分析に基づいて前記２つ以上の頂点ポイントのうちの少なくとも１つを廃棄するための手段。
【請求項３９】
請求項３８に記載のデバイス、ただし、
前記分析手段は、前記２つ以上の頂点ポイントのうちの第１の頂点ポイントの第１の位置座標を前記２つ以上の頂点ポイントのうちの第２の頂点ポイントの第２の位置座標と比較し、前記第１の頂点ポイントが前記第２の頂点ポイントの直前にあり、
前記廃棄手段は、前記第１および第２の位置座標が同じであるとき、前記第２の頂点ポイントを廃棄する。
【請求項４０】
請求項３９に記載のデバイス、ただし、
前記分析手段は、前記２つ以上の頂点ポイントのうちの第３の頂点ポイントの第３の位置座標を前記第２の位置座標と比較し、前記第２の頂点ポイントが前記第３の頂点ポイントの直前にあり、
前記廃棄手段は、前記第２および第３の位置座標が同じであるとき、前記第３の頂点ポイントを廃棄する。
【請求項４１】
前記第１および第２の位置座標が同じでないとき、前記第２の頂点ポイントの前記位置座標を出力するための手段をさらに備え、
前記出力するための手段は、前記第２および第３の位置座標が同じでないとき、前記第３の頂点ポイントの前記位置座標を同時に出力する、
請求項４０に記載のデバイス。
【請求項４２】
前記廃棄するための手段が、前の頂点ポイントと後続の頂点ポイントとによって形成される直線上にある少なくとも１つの頂点ポイントを廃棄する、請求項３８に記載のデバイス。
【請求項４３】
請求項３８に記載のデバイス、ただし、
前記分析手段は、第１の頂点ポイントの位置座標と第２の頂点ポイントの位置座標との間の第１の傾きを計算し、前記第２の頂点ポイントの前記位置座標と第３の頂点ポイントの位置座標との間の第２の傾きを計算し、
前記廃棄手段は、前記第１および第２の計算された傾きが等しいとき、前記第２の頂点ポイントを廃棄する。
【請求項４４】
請求項４３に記載のデバイス、ただし、
前記分析手段は、前記第１の頂点ポイントの前記位置座標を前記第２の頂点ポイントの前記位置座標と比較し、
前記廃棄手段は、前記第１および第２の位置座標が同じであるとき、前記第２の頂点ポイントを廃棄する。
【請求項４５】
前記判断手段が、前記２つ以上の頂点ポイントについてディスプレイ座標空間における前記位置座標を判断する、請求項３８に記載のデバイス。
【請求項４６】
前記インデックス値を前記ＧＰＵ内で発生するための手段をさらに備える、請求項３８に記載のデバイス。
【請求項４７】
前記２Ｄパラメトリック曲線をディスプレイに提示するために前記２Ｄパラメトリック曲線をレンダリングするための手段をさらに備える、請求項３８に記載のデバイス。
【請求項４８】
前記ＧＰＵが３次元（３Ｄ）ＧＰＵを備え、前記廃棄手段が前記３Ｄ  ＧＰＵの頂点シェーダを備える、請求項３８に記載のデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コンピューティングデバイスに関し、より詳細には、コンピューティングデバイスによるグラフィックスレンダリングに関する。
【背景技術】
【０００２】
コンピューティングデバイスでは、しばしば、２次元（２Ｄ）曲線をディスプレイにレンダリングする必要がある。コンピューティングデバイスでは、文書を、たとえば、Ｐｏｒｔａｂｌｅ  Ｄｏｃｕｍｅｎｔ  Ｆｏｒｍａｔ（ＰＤＦ）にレンダリングするために２Ｄ曲線をレンダリングする必要があることがある。コンピューティングデバイスではまた、たとえば、円、楕円、角丸長方形など、様々な幾何学的形状の解像度独立表現のために２Ｄ曲線をレンダリングする必要があることがある。そのような形状はユーザインターフェースメニューおよびウェブサイトにおいて普及している。パラメトリック曲線による２Ｄ形状のレンダリングは、Ａｄｏｂｅ  ＦｌａｓｈおよびＭｉｃｒｏｓｏｆｔ  Ｓｉｌｖｅｒｌｉｇｈｔなどのウェブアニメーションフォーマットにおいて使用されることがある。
【０００３】
ビデオゲーム、キャラクタアニメーションなどのために、３次元（３Ｄ）グラフィックスでのグラフィックスの需要が増加しているので、コンピューティングデバイスは、しばしば、専用３Ｄグラフィックスハードウェアを含む。しかしながら、従来の３Ｄグラフィックスハードウェアは、２Ｄ曲線をレンダリングするための直接的なサポートを行わない。したがって、コンピューティングデバイスは、２Ｄ曲線および３Ｄ曲線をレンダリングするために別々のグラフィックスハードウェアを含むことがある。別々のグラフィックスハードウェアを維持しなければならないことは、シリコン面積と電力消費量の両方においてコストがかかる。携帯情報端末（ＰＤＡ）、ワイヤレス通信デバイス、全地球測位デバイスなどのモバイルコンピューティングデバイスに関して、面積または電力消費量の増加は、デバイスの大型化、バッテリー時間の短縮などをもたらすので望ましくない。
【発明の概要】
【０００４】
本開示では、３Ｄグラフィックスハードウェアを使用して２Ｄ曲線をレンダリングするための技法について説明する。説明する技法によれば、コンピューティングデバイスが、３Ｄグラフィックスハードウェアを使用して２Ｄグラフィックスレンダリング中に１つまたは複数の頂点ポイントを除去することができる。一例として、コンピュータグラフィックスをディスプレイ上に表示するためにグラフィックスレンダリング演算を実行するための専用のグラフィックスハードウェアである、グラフィックス処理ユニット（ＧＰＵ）が、繰返しの（すなわち、冗長な）頂点ポイントを除去することができる。繰返しの、すなわち冗長な頂点ポイントは、ディスプレイ座標空間において実質的に同じ位置座標を有する頂点ポイントである。たとえば、２つの頂点ポイントが互いから１／８ピクセル以内にある場合、すなわち、それらの座標が０．１２５未満だけ異なる場合、その２つの頂点ポイントを繰返しの、すなわち冗長な頂点ポイントと見なすことができる。グラフィックスパイプラインから冗長な頂点ポイントを除去するために、ＧＰＵは、各頂点ポイントの位置座標の各々を前の頂点ポイントの位置座標と比較し、ディスプレイ座標空間において前の頂点ポイントと実質的に同じ位置座標を有する頂点ポイントを廃棄することができる。
【０００５】
代替または追加として、ＧＰＵは、直線上にある１つまたは複数の頂点ポイントを選択的に除去することができる。そのような状況は、たとえば、３つ以上の頂点ポイントで表される曲線の部分がほとんどまたはまったく曲率を有しないときに起こり得る。そのような場合、第１の頂点ポイントから最後の頂点ポイントまでの一連の直線セグメント代わりに、第１の頂点ポイント、たとえば、エンドポイントから、最後の頂点ポイント、エンドポイントまでの直線を使用して、曲線の直線部分を等しく十分に表すことができる。ほとんどまたはまったく曲率をもたない曲線の部分の第１の頂点ポイントと最後の頂点ポイントとの間の１つまたは複数の頂点ポイントを除去するために、ＧＰＵは一連のラインセグメントの傾きを比較することができる。その傾きが実質的に同じであるとき、たとえば、許容しきい値内であるとき、ＧＰＵは、ほとんどまたはまったく曲率をもたないその曲線の部分の第１の頂点ポイントと最後の頂点ポイントとの間の１つまたは複数の中間頂点ポイントを除去することができる。冗長な頂点ポイントまたは直線上にある頂点ポイントを除去することは、３Ｄまたは他のより高い次元用に設計されたＧＰＵのハードウェアリソースのより効率的な利用を可能にし、ＧＰＵが画像を表示のためにレンダリングする速度を増加させることができる。
【０００６】
一態様では、方法が、レンダリングすべき曲線上にある複数の頂点ポイントの各々についての位置座標を判断することと、複数の頂点ポイントの少なくとも一部分の位置座標を分析することと、その分析に基づいて複数の頂点ポイントのうちの少なくとも１つを廃棄することとを備える。
【０００７】
別の態様では、デバイスが、レンダリングすべき曲線上にある複数の頂点ポイントの各々についての位置座標を判断することと、複数の頂点ポイントの少なくとも一部分の位置座標を分析することと、その分析に基づいて複数の頂点ポイントのうちの少なくとも１つを廃棄することとを行う処理ユニットを備える。
【０００８】
別の態様では、デバイスが、レンダリングすべき曲線上にある複数の頂点ポイントの各々についての位置座標を判断するための手段と、複数の頂点ポイントの少なくとも一部分の位置座標を分析するための手段と、その分析に基づいて複数の頂点ポイントのうちの少なくとも１つを廃棄するための手段とを備える。
【０００９】
本開示で説明する技法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装できる。ソフトウェアで実装された場合、ソフトウェアは、マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、またはデジタル信号プロセッサ（ＤＳＰ）、あるいは他の等価な集積または個別論理回路など、１つまたは複数のプロセッサを指すことがあるプロセッサで実行できる。本技法を実行する命令を備えるソフトウェアは、最初にコンピュータ可読媒体に記憶し、プロセッサによってロードして実行できる。したがって、本開示はまた、プロセッサに、本開示で説明する様々な技法のいずれかを実行させる命令を備えるコンピュータ可読媒体を企図する。
【００１０】
たとえば、いくつかの態様では、本開示は、実行されたときに、レンダリングすべき曲線上にある複数の頂点ポイントの各々についての位置座標を判断することと、複数の頂点ポイントの少なくとも一部分の位置座標を分析することと、その分析に基づいて複数の頂点ポイントのうちの少なくとも１つを廃棄することとを少なくとも１つのプロセッサに行わせる命令を備えるコンピュータ可読媒体を提供する。
【００１１】
本開示で説明する技法の１つまたは複数の態様の詳細を添付の図面および以下の説明に示す。本技法の他の特徴、目的、および利点は、その説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００１２】
【図１】本開示で説明する技法に従ってテッセレーションを実行する例示的なコンピューティングデバイスを示すブロック図。
【図２】グラフィックス処理ユニットをさらに詳細に示すブロック図。
【図３】本開示の技法に従って１つまたは複数の頂点ポイントを廃棄する例示的な頂点シェーダのブロック図。
【図４】本開示の一態様による、複数の頂点ポイントを出力する例示的な頂点シェーダのブロック図。
【図５】ディスプレイ座標空間において繰返しの頂点ポイントを廃棄する頂点シェーダの例示的な動作を示す流れ図。
【図６】ディスプレイ座標空間において直線上にある少なくともいくつかの頂点ポイントを廃棄する頂点シェーダの例示的な動作を示す流れ図。
【発明を実施するための形態】
【００１３】
図１は、本開示で説明する技法に従ってテッセレーションを実行する例示的なコンピューティングデバイス２を示すブロック図である。コンピューティングデバイス２は、グラフィカル情報を出力する任意のワイヤードまたはワイヤレスデバイスを備えることができる。たとえば、コンピューティングデバイス２は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、セルラーまたは衛星電話、インターネット電話、ポータブルビデオゲームデバイスまたは携帯情報端末（ＰＤＡ）などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、テレビジョン、あるいはグラフィカル情報を出力する別のタイプのデバイスを備えることができる。
【００１４】
図１の例に示すように、コンピューティングデバイス２は、ユーザ入力インターフェース４と、ＣＰＵ６と、デバイスメモリ８と、ＧＰＵ１０と、ＧＰＵメモリ１２と、ディスプレイインターフェース１４と、ディスプレイ１６とを含む。ユーザ入力インターフェース４、ＣＰＵ６、デバイスメモリ８、ＧＰＵ１０およびディスプレイインターフェース１４は、バス１８を使用して通信することができる。バス１８は、第３世代バス（たとえば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔバスまたはＩｎｆｉｎｉＢａｎｄバス）、第２世代バス（たとえば、Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔバス、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）Ｅｘｐｒｅｓｓバス、またはＡｄｖａｎｃｅｄ  ｅＸｅｎｔｉｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ（ＡＸＩ）バス）、あるいは別のタイプのバスまたはデバイス相互接続など、様々なバス構造のいずれかとすることができる。
【００１５】
ＣＰＵ６は、コンピューティングデバイス２の動作を制御する汎用または専用プロセッサを備えることができる。ＣＰＵ６に１つまたは複数のソフトウェアアプリケーションを実行させるために、ユーザがコンピューティングデバイス２に入力を与えることができる。ＣＰＵ６上で実行されるそれらのソフトウェアアプリケーションは、ワードプロセッサアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーションまたは別のエンドユーザプログラムを含むことができる。ユーザは、ユーザ入力インターフェース４を介してコンピューティングデバイス２に結合される、キーボード、マウス、マイクロフォン、タッチパッドまたは別の入力デバイスなどの、１つまたは複数の入力デバイス（図示せず）を介してコンピューティングデバイス２に入力を与えることができる。
【００１６】
デバイスメモリ８は、スタートアップまたはリセット時にコンピューティングデバイス２を構成するために使用できるデバイス構成情報を記憶することができる。デバイスメモリはまた、ＣＰＵ６によって直ちにアクセス可能であり、および／または現在作用されているデータおよび／またはプログラムモジュールを記憶することができる。デバイスメモリ８は、ＧＰＵ１０によって出力された情報など、コンピューティングデバイス２の他の構成要素からの情報をさらに記憶することができる。デバイスメモリ８は、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体または光記憶媒体など、１つまたは複数の揮発性または不揮発性のメモリまたは記憶デバイスとすることができる。
【００１７】
ＧＰＵ１０は、ディスプレイ１６上にコンピュータグラフィックスをレンダリングするためのグラフィックス演算を実行することに専用のものとするができる。したがって、ＣＰＵ６上で実行されるソフトウェアアプリケーションの１つがグラフィックス処理を必要とするとき、ＣＰＵ６は、ディスプレイ１６にレンダリングするためにグラフィックス情報をＧＰＵ１０に供給する。ＧＰＵ１０は、いくつかの例では、複雑なグラフィックス関係の演算についてＣＰＵ６よりも効率的な処理を行う並列構造を用いて構築できる。たとえば、ＧＰＵ１０は、完全に並列に複数の頂点ポイントに作用する複数のグラフィックスパイプラインを含むことができる。ＧＰＵ１０の高度並列性質により、いくつかの例では、ＧＰＵ１０は、ＣＰＵ６を用いて複雑な２Ｄまたは３Ｄ画像をディスプレイ１６に直接描画するよりも迅速に、それらの画像をディスプレイ１６上で作成することができる。いくつかの例では、ＧＰＵ１０は、３Ｄグラフィックスをディスプレイ１６にレンダリングするように設計できる。ただし、ＧＰＵ１０は、２Ｄ曲線のハードウェアアクセラレーテッドレンダリングを実行するために使用できる。本開示の技法は、３Ｄグラフィックスハードウェア、たとえば、ＧＰＵ１０を使用して２Ｄ曲線をレンダリングすることの効率を改善するために使用できる。
【００１８】
いくつかの例では、ＧＰＵ１０は、コンピューティングデバイス２のマザーボード（図示せず）に統合できる。他の例では、ＧＰＵ１０は、コンピューティングデバイス２のマザーボードにおけるポートに設置されるグラフィックスカード上に存在するか、または場合によってはコンピューティングデバイス２と相互運用するように構成された周辺デバイス内に組み込むことができる。ＧＰＵ１０は、１つまたは複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、あるいは他の等価な集積または個別論理回路など、１つまたは複数のプロセッサとすることができる。
【００１９】
ＧＰＵ１０はＧＰＵメモリ１２に直接結合できる。したがって、ＧＰＵ１０は、バス１８を使用することなしに、ＧＰＵメモリ１２からデータを読み取り、ＧＰＵメモリ１２にデータを書き込むことができる。言い換えれば、ＧＰＵ１０は、オフチップメモリの代わりに、ローカルストレージを使用してデータをローカルで処理することができる。これにより、ＧＰＵ１０は、大量のバストラフィックを受けることがある、バス１８を介したデータの読取りおよび書込みの必要がなくなるので、より効率的な方法で動作できるようになる。ただし、いくつかの例では、ＧＰＵ１０は、別個のメモリを含まず、代わりにバス１８を介してデバイスメモリ８を利用することがある。ＧＰＵメモリ１２は、ＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、磁気データ媒体または光記憶媒体など、１つまたは複数の揮発性または不揮発性メモリまたは記憶デバイスとすることができる。
【００２０】
ＣＰＵ６および／またはＧＰＵ１０は、ディスプレイ１６を介した提示のために、画像情報をディスプレイインターフェース１４に供給することができる。複雑な２Ｄおよび３Ｄグラフィックスの場合、一般に、画像情報はディスプレイ１６のためにＧＰＵ１０によって発生される。ディスプレイ１６は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイパネル、発光ダイオード（ＬＥＤ）アレイ、陰極線管ディスプレイ、電子ペーパー、表面伝導型電子放出素子ディスプレイ（ＳＥＤ）、レーザテレビジョンディスプレイ、ナノ結晶ディスプレイまたは別のタイプのディスプレイユニットを備えることができる。ディスプレイ１６はコンピューティングデバイス２内で統合できる。たとえば、ディスプレイ１６は、携帯電話または他のワイヤレス通信デバイスのスクリーンとすることができる。代替的に、ディスプレイ１６は、ワイヤードまたはワイヤレス通信リンクを介してコンピュータデバイス２に結合されるスタンドアロンデバイスとすることができる。たとえば、ディスプレイ１６は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されるコンピュータモニタまたはフラットパネルディスプレイとすることができる。
【００２１】
ＣＰＵ６上で実行されるソフトウェアアプリケーションの１つが、複雑な２Ｄグラフィックス画像を提示することを望むとき、ＣＰＵ６およびＧＰＵ１０は、グラフィックスをディスプレイ１６にレンダリングするように一緒に動作することができる。たとえば、ワードプロセシングアプリケーションの場合、ソフトウェアアプリケーションは、パラメトリック曲線を文書、たとえば、ＰＤＦ文書にレンダリングすることを望むことがある。別の例として、ソフトウェアアプリケーションは、様々な幾何学的形状を使用して、たとえば、スケーラブルベクターグラフィックス（ＳＶＧ）規格に従ってユーザインターフェースをディスプレイ１６上に提示するためのソフトウェアアプリケーションとすることができる。さらなる一例では、ソフトウェアアプリケーションは、Ａｄｏｂｅ  ＦｌａｓｈおよびＭｉｃｒｏｓｏｆｔ  Ｓｉｌｖｅｒｌｉｇｈｔなどのウェブアニメーションフォーマットのためにパラメトリック曲線によって２Ｄ形状をレンダリングすることを望むことがある。ソフトウェアアプリケーションは、表示すべきグラフィックス画像を形成する１つまたは複数の２Ｄ曲線を定義するコマンドを含む。たとえば、ＰＤＦ文書の場合、そのアプリケーションは、様々な文字および／または数字のグラフィックス画像の曲線を定義するコマンドを含むことができる。ユーザインターフェースの場合、そのアプリケーションは、円、楕円、角丸長方形などのグラフィックス画像の曲線を定義するコマンドを含むことができる。そのコマンドは、たとえば、グラフィカル画像の境界を画定するいくつかの曲線を定義することができる。言い換えれば、そのコマンドによって定義された曲線は、文字、数字または形状の曲率を近似することができる。
【００２２】
一例では、ソフトウェアアプリケーションは、２００５年７月２８日の文献「OpenVG Specification, Version 1.0」に定義されるように、ＯｐｅｎＶＧに従って複数の経路、すなわち、曲線を定義するコマンドを含むことができる。ＯｐｅｎＶＧは、１つまたは複数のセグメントコマンドを使用して２Ｄのグラフィックス画像の仕様を可能にするコマンドのセットを定義する。ＯｐｅｎＶＧ仕様に従って、セグメントコマンドは、直線セグメント、ベジエ曲線セグメントまたは楕円弧セグメントを定義することができる。ＯｐｅｎＶＧの拡張では、他のタイプのセグメントを指定することができる。したがって、本開示の技法は、ＯｐｅｎＶＧ仕様に現在定義されているセグメントコマンドに限定されない。その上、本開示の技法についてＯｐｅｎＶＧに関して説明するが、本技法は、ＳＶＧ、Ａｄｏｂｅ  Ｉｌｌｕｓｔｒａｔｏｒ、ＣｏｒｅＩＤＲＡＷ、Ａｄｏｂｅ  Ｆｌａｓｈ、Ｍｉｃｒｏｓｏｆｔ  Ｓｉｌｖｅｒｌｉｇｈｔ、または２Ｄグラフィックスを使用した他のグラフィックス演算規格など、他の２Ｄグラフィックスオーサリング規格に関して使用できる。
【００２３】
上記で説明したように３Ｄ画像をレンダリングするように設計できるＧＰＵ１０を使用して２Ｄ曲線をディスプレイ１６にレンダリングするために、ＣＰＵ６は、その曲線に関連する１つまたは複数の頂点ポイントをＧＰＵ１０に供給することができる。特に、ＣＰＵ６は、曲線の制御ポイントを表す１つまたは複数の頂点ポイントを計算することができる。頂点ポイントの各々はいくつかの頂点の属性情報によって表すことができ、それらの頂点の属性情報は、オブジェクト空間における曲線上のその頂点ポイントのロケーションを表す位置座標（たとえば、２Ｄ曲線の場合は（ｘ，ｙ）座標）を含むことができる。ＣＰＵ６は、たとえば、グラフィックスオーサリング仕様（たとえば、ＯｐｅｎＶＧ）で指定できる、特定のコマンドセグメントに対応する数学的表現を使用して１つまたは複数の頂点ポイントを発生することができる。制御ポイントに加えて、ＣＰＵ６は、レンダリングすべき曲線のタイプ、たとえば、ＯｐｅｎＶＧの場合は、直線セグメント、ベジエ曲線セグメントまたは楕円弧セグメント、および場合によっては、インデックス番号をＧＰＵ１０に示すことができる。
【００２４】
ＣＰＵ６は、発生された頂点ポイントを描画プリミティブのための頂点ポイントの少なくとも一部分として使用して、描画プリミティブのリストを発生することができる。ＣＰＵ６は、ポイント、ラインストリップ、ラインループ、別々のライン、三角形ストリップ、三角形ファン、別々の三角形、四辺形ストリップ、別々の四辺形、または他のタイプの多角形を含むいくつかの描画プリミティブのいずれかを発生することができる。ＣＰＵ６は描画プリミティブのリストをデバイスメモリ８に記憶することができる。
【００２５】
ＣＰＵ６は、一連の頂点ポイントまたは頂点ポイントの特性を定義する属性情報として描画プリミティブのリストをＧＰＵ１０に通信することができる。たとえば、ＣＰＵ６は、グラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）を呼び出して、ＧＰＵドライバを介して描画プリミティブのリストをＧＰＵ１０に通信することができる。グラフィックスＡＰＩは、ＣＰＵ６とＧＰＵ１０との間にインターフェースを与えるソフトウェア命令のセットを備えることができる。グラフィックスＡＰＩは、ＧＰＵ１０に、描画プリミティブを、表示可能なグラフィックス情報にレンダリングさせる、１つまたは複数のコマンドを作成し、発行することをＧＰＵドライバに行わせることができる。そのコマンドは、レンダリングなど、プリミティブに対して実行すべき演算を指定することができる。さらに、そのコマンドは、プリミティブの頂点ポイントの位置座標、プリミティブの各頂点ポイントに関連するカラー情報、プリミティブの各頂点ポイントに関連するテクスチャ情報、プリミティブのためのスケーリング情報、プリミティブのための回転情報などを含むことができる。プリミティブの頂点ポイントに関連する情報は「頂点の属性情報」と呼ばれることがある。頂点の属性情報をコマンド内に含める代わりに、コマンドは、頂点の属性情報が記憶され得るデバイスメモリ８内のアドレスを指定することができる。
【００２６】
ＧＰＵ１０は、ＣＰＵ６からコマンドを受信し、ＧＰＵ１０の１つまたは複数の処理要素を、コマンドにおいて指定された演算を実行するように構成する。ＧＰＵ１０のグラフィックスパイプラインの各々は、それぞれの頂点ポイントに対していくつかのグラフィックス演算を実行することができる。たとえば、グラフィックスパイプラインの各々は、ユーザ空間またはオブジェクト空間としても知られるモデル空間においてレンダリングすべき曲線に沿った頂点ポイントの位置座標を計算するように構成できる。ＧＰＵ１０は、たとえば、ＣＰＵ６によって指定された曲線のタイプと制御ポイントとに関連する数式を使用してモデル空間における頂点ポイントを計算するように構成できる。別の例として、グラフィックスパイプラインの各々は、曲線、または曲線上の頂点ポイントの位置座標（または位置の属性情報）を異なる座標系に変換するように構成できる。特に、ＧＰＵ１０は、曲線、または曲線上の頂点ポイントの位置座標（または属性情報）をモデルまたはユーザ座標空間から（デバイス座標空間と呼ばれることがある）ディスプレイまたは表面座標空間に変換することができる。モデル座標空間は、グラフィックス処理を利用するソフトウェアアプリケーションの命令によってグラフィックス画像がどのように定義されるかを表す。一般に、入力頂点ポイントの位置座標は、浮動小数点数を使用してモデル座標空間において表すことができる。一方、ディスプレイ座標空間は、グラフィックス画像がデバイス、たとえば、ディスプレイ１６上でどのように表示されるかを表すことができる。変換された頂点ポイントの位置座標は、ディスプレイ１６上のピクセルロケーションに対応する整数を使用してディスプレイ座標空間において表すことができる。ただし、変換された頂点ポイントの位置座標は、浮動小数点数を使用してディスプレイ座標空間において表すことができる。
【００２７】
いくつかの例では、モデル座標空間における２つ以上の入力頂点ポイントの位置座標は、ディスプレイ座標空間における実質的に同じ位置座標に対応することがある。したがって、ＧＰＵ１０は、ディスプレイ座標空間において繰返しである頂点ポイントを発生することがある。この問題は、ＧＰＵ１０の並列構造によって悪化することがある。言い換えれば、ＧＰＵ１０が完全に並列に複数の入力頂点ポイントに作用するので、ディスプレイ座標系における繰返しの頂点ポイントはグラフィックスパイプラインを介して処理されることがある。これにより、利用可能なハードウェアの使用が非効率的になり、ならびに画像がディスプレイ１６にレンダリングされる速度が低減する。
【００２８】
本開示の一態様によれば、ＧＰＵ１０は、ＧＰＵ１０のハードウェアリソースをより効率的に利用し、画像がディスプレイ１６にレンダリングされる速度を増加させるために、１つまたは複数の頂点ポイントをグラフィックスパイプラインから除去することができる。たとえば、ＧＰＵ１０は、繰返しの（すなわち、冗長な）頂点ポイント、たとえば、ディスプレイ座標空間において実質的に同じ位置座標を有する頂点ポイントを除去することができる。たとえば、２つの頂点ポイントが互いから１／８ピクセル以内にある場合、すなわち、ディスプレイ座標空間におけるそれらの位置座標が０．１２５未満だけ異なる場合、その２つの頂点ポイントを繰返しの、すなわち冗長な、頂点ポイントと見なすことができる。グラフィックスパイプラインから冗長な頂点ポイントを除去するために、ＧＰＵ１０は、各頂点ポイントの位置座標の各々を前の頂点ポイントの位置座標と比較し、ディスプレイ座標空間において前の頂点ポイントと実質的に同じ位置座標を有する頂点ポイントを廃棄することができ、たとえば、位置座標間の差が０．１２５などのしきい値未満であるとき、頂点ポイントを廃棄することができる。このようにして、ＧＰＵ１０は、プリミティブをレンダリングするのに不要である冗長な情報の処理を省略することができる。
【００２９】
代替または追加として、ＧＰＵ１０は、直線上にある、ディスプレイ座標空間における位置座標を有する選択された頂点ポイントを除去することができる。そのような状況は、３つ以上の頂点ポイントで表される曲線の部分がほとんどまたはまったく曲率を有しないときに起こる。そのような場合、曲線の部分に沿った各中間頂点ポイント間の一連の直線セグメントとしてではなく、曲線の部分の第１の頂点ポイントから曲線の部分の最後の頂点ポイントまでの直線を使用して、曲線の直線部分を等しく十分に表すことができる。言い換えれば、直線の頂点ポイントのセットのわずか２つの頂点ポイントを使用して、直線を等しく十分に確立することができる。中間または余分の頂点ポイントは除去できる。
【００３０】
曲線の直線部分が３つの頂点ポイントを含む場合、一連の２つの直線セグメント、たとえば、第１の頂点ポイントから第２の頂点ポイントまでの第１の直線セグメント、および第２の頂点ポイントから第３の頂点ポイントまでの第２の直線セグメントとしてではなく、曲線の部分の第１の頂点ポイントから第３の頂点ポイントまでの直線を使用して、曲線の直線部分を等しく十分に表すことができる。ＧＰＵ１０は、たとえば、連続する頂点ポイントによって形成される第１および第２のラインセグメントの傾きを比較し、傾きが実質的に同じであるとき、たとえば、許容しきい値内であるとき、中間（第２の）頂点ポイントを除去することができる。
【００３１】
変換された頂点ポイントを廃棄した後、ＧＰＵ１０は、残りの変換された頂点ポイントを使用してプリミティブを形成する。一例では、ＧＰＵ１０は、廃棄された頂点ポイントが決して利用できないかのように、残りの変換された頂点ポイントを使用してプリミティブを形成することができる。プリミティブを発生した後、ＧＰＵ１０は、画像をディスプレイ１６にレンダリングするためにプリミティブに対して追加のグラフィックス演算を実行することができる。
【００３２】
上記で説明したように、ＣＰＵ６およびＧＰＵ１０は、曲線をディスプレイ１６にレンダリングするように互いに機能することができる。上記で説明した例では、ＣＰＵ６は曲線をセグメントにテッセレーションし、ＧＰＵ１０は、それらのセグメントをディスプレイ１６にレンダリングするためにそれらのセグメントに対して演算を実行する。しかしながら、他の例では、レンダリング機能は、ＣＰＵ６とＧＰＵ１０との間で別様に割り振ることができる。たとえば、ＧＰＵ１０は、他の演算に加えてテッセレーションを実行することができる。レンダリング機能は、ＣＰＵ６の処理負荷、ＧＰＵ１０の処理負荷などに基づいて、ＣＰＵ６とＧＰＵ１０との間で割り振ることができる。
【００３３】
さらに、コンピューティングデバイス２はいくつかの他の要素を含むことができる。たとえば、コンピューティングデバイス２は、符号化ビデオの送信および受信のために適切な変調、復調、周波数変換、フィルタ処理、および増幅器構成要素を含み、適用可能な場合、ワイヤレス通信をサポートするのに十分な無線周波（ＲＦ）ワイヤレス構成要素およびアンテナを含むことができる。したがって、コンピューティングデバイス２はハンドヘルドワイヤレス通信デバイスを備えることができる。ただし、説明を簡単にするために、これらの追加の要素は、図１には特に示していない。むしろ、図１に示すアーキテクチャは例にすぎない。本開示で説明する技法は、様々な他のアーキテクチャを用いて実装できる。
【００３４】
図２は、図１のＧＰＵ１０をさらに詳細に示すブロック図である。ＧＰＵ１０は、制御ユニット２１と、頂点シェーダ２２と、プリミティブセットアップユニット２４と、ピクセルシェーダ２６とを含むグラフィックスパイプライン２０を含む。上記で説明したように、ＧＰＵ１０は、複雑なグラフィックス関係の演算のより効率的な処理を行う高度並列構造を有することができる。したがって、図２にはただ１つのグラフィックスパイプライン２０が示されているが、ＧＰＵ１０は、頂点ポイントの複数のセット（たとえば、プリミティブ）に並列に作用する複数の同様のグラフィックスパイプラインを含むことができる。言い換えれば、ＧＰＵ１０は、完全に並列にいくつかのデータプリミティブに作用することができる、複数の頂点シェーダ２２と、プリミティブセットアップユニット２４と、ピクセルシェーダ２６とを含むことができる。ＧＰＵ１０の高度並列性質により、いくつかの例では、ＧＰＵ１０は、ＣＰＵ６を用いて複雑な２Ｄまたは３Ｄグラフィックス画像をディスプレイ１６に直接描画するよりも迅速に、それらの画像をディスプレイ１６上で作成することができる。一例では、ＧＰＵ１０は、３Ｄグラフィックスをレンダリングするように設計できる。
【００３５】
ＧＰＵ１０は、２Ｄまたは３Ｄグラフィック画像を表示のためにレンダリングするようにＣＰＵ６とともに動作することができる。ＧＰＵ１０の制御ユニット２１は、プリミティブを定義する１つまたは複数の頂点ポイントに対して演算を実行するようにＧＰＵ１０に命令するコマンドをＣＰＵ６から受信する。制御ユニット２１は、そのコマンドを復号し、ＧＰＵ１０の１つまたは複数の処理要素を、そのコマンドにおいて指定された演算を実行するように構成する。制御ユニット２１は、さらに、コマンド内に含まれる情報（たとえば、プリミティブまたは頂点の情報）をＧＰＵメモリ１２（図１）に、またはＧＰＵ１０内の１つまたは複数のバッファ（図示せず）内に、またはＧＰＵ１０の処理要素内に、記憶することができる。制御ユニット２１は、ＧＰＵ１０の処理要素に特定のグラフィックス処理演算を実行させる命令のセットを、ＧＰＵ１０の処理要素の各々にロードすることができる。図２に示す例では、ＧＰＵ１０の処理要素には、頂点シェーダ２２、プリミティブセットアップユニット２４、およびピクセルシェーダ２６がある。他の処理要素をＧＰＵ１０中に含めることもできるが、説明を簡単で容易にするために図２には特に示していない。
【００３６】
頂点シェーダ２２、プリミティブセットアップユニット２４、およびピクセルシェーダ２６は、パイプラインとして動作することができる。パイプラインとして動作するとき、頂点シェーダ２２は、入力データの第１のセットに対して１つまたは複数のグラフィックス演算の第１のセットを実行し、中間結果の第１のセットを出力する。プリミティブセットアップユニット２４は、頂点シェーダ２２によって出力された中間結果に対して１つまたは複数のグラフィックス演算の第２のセットを実行し、中間結果の第２のセットを出力する。初期入力データの第２のセットに対して、頂点シェーダ２２はグラフィックス演算の第１のセットを実行し、プリミティブセットアップユニット２４はグラフィックス演算の第２のセットを実行する。表示のためにグラフィックス画像が発生されるまで、グラフィックス処理は同様の方法で続く。
【００３７】
頂点シェーダ２２は、ＣＰＵ６によって発生された１つまたは複数の頂点ポイントを定義する頂点の属性情報のシーケンスを得るように構成できる。頂点シェーダ２２は、頂点の属性情報のシーケンスをデバイスメモリ８（図１）から取り出すことができる。ＣＰＵ６から受信したコマンドは、頂点の属性情報が記憶されたデバイスメモリ８内のロケーションを示すことができる。代替的に、ＣＰＵ６は、頂点の属性情報をそのコマンド内に、または１つまたは複数の後続のコマンドに含めることができる。
【００３８】
頂点の属性情報は、位置の属性情報、１つまたは複数のカラー属性情報、１つまたは複数のテクスチャ属性情報、１つまたは複数のライティング属性情報、１つまたは複数の透明度の属性情報などを含むことができる。位置の属性情報は、頂点ポイントのシーケンスにおける現在の頂点ポイントの順序位置を示すインデックス番号とすることができる。たとえば、曲線がＮ個の頂点ポイントを有するとき、インデックス番号は０からＮまでの整数を備える。代替的に、頂点ポイントの位置の属性情報は、モデル空間における曲線上にあるポイントのロケーションを表す位置座標、たとえば、２Ｄの場合は（ｘo，ｙo）座標とすることができる。頂点ポイントの位置の属性情報は、たとえば、グラフィックスオーサリング仕様（たとえば、ＯｐｅｎＶＧ）で指定できる、特定のコマンドセグメントに対応する数学的表現を使用してＣＰＵ６によって計算できる。たとえば、ＯｐｅｎＶＧを使用して楕円弧曲線として定義される曲線の場合、次式を使用して頂点ポイントの位置の属性情報を計算することができる。
【数１】
0005270004.tif 000002
【００３９】
上式で、（ｘo，ｙo）はモデル空間における曲線上の頂点ポイントの位置座標であり、ａは楕円の半長軸であり、ｂは楕円の半短軸であり、０≦θ≦２πである。式（１）および式（２）とともに、ＣＰＵ６は、変数ａ、ｂ、およびθをＧＰＵ１０に送信することができる。上記で説明したように、モデル座標空間は、一般に浮動小数点数を使用して、グラフィックス処理を利用するソフトウェアアプリケーションの命令によってグラフィックス画像がどのように定義されるかを表す。
【００４０】
位置の属性情報に基づいて、頂点シェーダ２２はディスプレイ座標空間における位置座標を判断する。（ユーザまたはデバイス座標空間と呼ばれることがある）ディスプレイ座標空間は、グラフィックス画像がデバイス、たとえば、ディスプレイ上でどのように表示されるかを表す。ディスプレイ１６は整数個の物理ピクセルのアレイからなるので、デバイス座標空間における位置座標（ｘ，ｙ）は、ディスプレイ１６上のピクセルロケーションにマッピングする。頂点シェーダ２２は、以下でさらに詳細に説明するように、グラフィカルソフトウェアアプリケーションによって定義された曲線を表す同じ数式を使用して、ただしディスプレイ座標空間に変換される変数（または制御ポイント）を用いて、頂点ポイントの位置座標を計算することができる。
【００４１】
頂点シェーダ２２は、他の入力頂点の属性情報に対していくつかの他の演算を実行することができる。頂点シェーダ２２は、頂点ポイントのカラー属性情報、テクスチャ属性情報、ライティング属性情報、または透明度の属性情報のうちの１つまたは複数を変更するために、１つまたは複数の演算を実行することができる。簡単のために、本開示では、頂点ポイントの位置座標の変換のみについて説明する。ただし、頂点シェーダ２２は他の頂点の属性情報に対して他の演算を実行することができることを理解されたい。
【００４２】
ＧＰＵ１０のハードウェアリソースをより効率的に利用し、画像がディスプレイ１６にレンダリングされる速度を増加させるために、頂点シェーダ２２は１つまたは複数の頂点ポイントを除去することができる。頂点シェーダ２２は、たとえば、空間的繰返しの（すなわち、冗長な）頂点ポイントを除去するか、直線上にある余分の頂点ポイントを除去するか、または両方を行うことができる。
【００４３】
ディスプレイ座標空間における位置座標はピクセルロケーションの整数に対応するので、２つ以上の頂点ポイントが、いくつかの例では、同じピクセルロケーションにマッピングすることがある。言い換えれば、２つ以上の頂点ポイントが、ディスプレイ座標空間において実質的に同じ位置座標を有することがある。たとえば、モデル座標空間における、または２つの連続するインデックス番号で表される、２つ以上の頂点ポイントは、頂点シェーダ２２によって変換されると、ディスプレイ座標空間における実質的に同じ位置座標に対応することがある。したがって、ＧＰＵ１０は、特定のピクセルロケーションと対応する２つ以上の頂点ポイントを発生することがある。このようにして、ＧＰＵ１０はディスプレイ座標空間において繰返しの頂点ポイントを発生することがある。ディスプレイ座標空間における頂点ポイントは、プリミティブをレンダリングするのに不要である冗長な情報と見なすことができる。
【００４４】
ＧＰＵ１０の並列構造により、ＧＰＵ１０の処理要素は、プリミティブをレンダリングする際に必要とされる頂点ポイントと並列に、プリミティブをレンダリングするのに不要である頂点ポイントに作用することがある。たとえば、ＧＰＵ１０は、直線上にある繰返しの頂点ポイントまたは余分の頂点ポイントに作用することがあり、それにより、利用可能なハードウェアの使用が非効率的になり、ならびに画像がディスプレイ１６にレンダリングされる速度が低減する。繰返しの、または場合によっては余分の頂点ポイントに作用する代わりに、ＧＰＵ１０が、繰返しの頂点ポイント、たとえば、ディスプレイ座標空間における実質的に同じ位置座標に対応する頂点ポイントを廃棄すればより効率的となり、それによって、ＧＰＵ１０は、非繰返しの頂点ポイントに作用するためのＧＰＵ１０のハードウェアリソースを利用することができるようになる。
【００４５】
この目的で、頂点シェーダ２２は、本開示の一態様によれば、１つまたは複数の頂点ポイントを除去することができる。一例では、頂点シェーダ２２は、ＧＰＵ１０のハードウェアリソースをより効率的に利用し、画像がディスプレイ１６にレンダリングされる速度を増加させるために、たとえば、ディスプレイ座標空間において同じまたは実質的に同じ位置座標を有する、冗長である頂点ポイントをグラフィックスパイプラインから除去することができる。一態様では、頂点シェーダ２２は、現在の頂点ポイントについての位置座標、ならびに少なくとも１つの前の頂点ポイントについての位置座標を計算することができる。頂点シェーダ２２は、現在のおよび前の頂点ポイントの位置座標（すなわち、ディスプレイ座標空間における位置座標）を比較し、現在のおよび前の頂点ポイントの位置座標が実質的に同じであるとき、現在の頂点ポイントを廃棄する。現在の頂点ポイントが頂点シェーダ２２によって廃棄されたとき、頂点シェーダ２２は、いかなる出力をも与えないことがある。代替的に、頂点シェーダ２２は、現在の頂点ポイントが廃棄されたことを示す信号を出力することがある。その信号により、パイプラインの次の処理段は、その処理段が頂点ポイントを受信しないことを知ることができ得、リソースは他の演算のために解放できる。
【００４６】
ディスプレイ座標空間における現在のおよび前の頂点ポイントの位置座標が実質的に同じでないとき、頂点シェーダ２２は、現在の頂点ポイントの、ディスプレイ座標空間における位置座標を含む、頂点の属性情報を出力する。この場合、少なくとも１つの前の頂点ポイントの位置座標は、現在の頂点ポイントが冗長であるかどうかを判断するために使用される。ＧＰＵ１０は、すべてのＮ＋１個の頂点に対して同様のプロセスを並列に実行することができる。
【００４７】
頂点シェーダ２２を構成する際に、制御ユニット２１は、頂点シェーダ２２に上記で説明した機能を実行させる命令のセットを頂点シェーダ２２にロードすることができる。以下でさらに詳細に説明するように、モデル空間および／またはディスプレイ座標空間において曲線の位置座標を計算するための数式、ならびにその位置座標を計算する際に必要な任意の変数を定義する、命令を頂点シェーダ２２にロードすることができる。以下は、頂点シェーダ２２にロードでき、繰返しの頂点ポイントを除去するために使用できる例示的な擬似コードである。
【数２】
0005270004.tif 000003
【００４８】
上記の例示的な擬似コードでは、頂点シェーダ２２は、インデックスまたはシーケンス番号を表す位置の属性情報（ｉｎｄｅｘ）を使用して現在のおよび前の頂点ポイントの位置座標を頂点シェーダ２２に得させる命令とともに構成される。その例示的な擬似コードでは、頂点シェーダ２２は、開始角が０である１ラジアンの円弧についての位置座標を計算するように構成される。特に、頂点シェーダ２２は、円弧の半径、最大インデックス値Ｎ、グラフィカルソフトウェアアプリケーションによって定義された曲線についてのモデル空間におけるｘおよびｙの位置座標を定義する数式、すなわち、それぞれ、ｘ＝ｒａｄｉｕｓ＊ｃｏｓ（ｔ）およびｙ＝ｒａｄｉｕｓ＊ｓｉｎ（ｔ）とともに構成される。
【００４９】
頂点シェーダ２２は、位置の属性情報（ｉｎｄｅｘ）および最大インデックス値（Ｎ）に基づいて浮動小数点値ｔを計算する。頂点シェーダ２２はまた、変数ｔのステップサイズ（ｄｅｌｔａ）を１／Ｎであるものとして計算し、それは均一なステップサイズを表す。他の例では、ステップサイズは、曲線の曲率に基づいて適応するものとすることができる。計算された浮動小数点値ｔを使用して、頂点シェーダ２２は、ディスプレイ座標空間におけるｘ軸位置座標（ｘ＿ｃｕｒｒ）とディスプレイ座標空間におけるｙ軸位置座標（ｙ＿ｃｕｒｒ）とを計算する。特に、頂点シェーダ２２は、ｘ＿ｃｕｒｒをｒａｄｉｕｓ＊ｃｏｓ（ｔ）の整数値として計算し、ただし、ｔはｉｎｄｅｘ／Ｎの浮動小数点値に等しい。言い換えれば、頂点シェーダ２２は、式ｒａｄｉｕｓ＊ｃｏｓ（ｔ）によって出力された値を最も近い整数値に丸める。同様に、頂点シェーダ２２は、式ｒａｄｉｕｓ＊ｓｉｎ（ｔ）によって出力された値を最も近い整数値に丸めることによってｙ＿ｃｕｒｒを計算する。このようにして、頂点シェーダ２２は、モデル座標空間における位置座標を最も近い整数値に丸めることによって、モデル座標空間における位置座標をディスプレイ座標空間における位置座標に変換する。
【００５０】
さらに、頂点シェーダ２２は、前の頂点ポイントについてディスプレイ座標空間における位置座標（ｘ＿ｐｒｅｖ，ｙ＿ｐｒｅｖ）を同様に計算することができる。特に、頂点シェーダ２２は、式ｒａｄｉｕｓ＊ｃｏｓ（ｔ−ｄｅｌｔａ）によって出力された値を最も近い整数値に丸めることによってｘ＿ｐｒｅｖを計算し、式ｒａｄｉｕｓ＊ｓｉｎ（ｔ−ｄｅｌｔａ）によって出力された値を最も近い整数値に丸めることによってｙ＿ｐｒｅｖを計算する。上記の例示的な擬似コードでは、頂点シェーダ２２が、モデル座標空間における位置座標を最も近い整数値に丸めることによってモデル座標空間における位置座標をディスプレイ座標空間における位置座標に変換するが、頂点シェーダ２２は、ディスプレイ座標空間における位置座標を浮動小数点数として保持することができる。さらに、頂点シェーダ２２は、変換プロセス中に、スケーリング、回転など、他の変換演算を実行することができる。この場合、浮動小数点値を最も近い整数値に丸めることに加えて、他の数学演算が実行できる。
【００５１】
頂点シェーダ２２は、現在の頂点ポイントの計算された位置座標を前の頂点ポイントの計算された位置座標と比較し、位置座標がディスプレイ座標系において同じであるとき、現在の頂点ポイントを廃棄する。言い換えれば、頂点シェーダ２２は、両方のｘ軸位置座標が同じであり（ｘ＿ｃｕｒｒ＝ｘ＿ｐｒｅｖ）、両方のｙ軸位置座標が同じである（ｙ＿ｃｕｒｒ＝ｙ＿ｐｒｅｖ）とき、現在の頂点ポイントを廃棄する。ｇｌ＿Ｐｏｓｉｔｉｏｎ．ｘは、頂点のｘ座標の位置に等しい値をとる浮動小数点値であり、ｇｌ＿Ｐｏｓｉｔｉｏｎ．ｙは、頂点のｙ座標の位置に等しい値をとる浮動小数点値である。ｇｌ＿Ｐｏｓｉｔｉｏｎ．ｘおよびｇｌ＿Ｐｏｓｉｔｉｏｎ．ｙにより、頂点シェーダ２２は、その頂点位置が配置される固有のレジスタを指定することができる。ディスプレイ座標空間における位置座標が浮動小数点数として表される場合は、２つの頂点ポイントの値の差が、互いから１／８ピクセル以内であるとき、すなわち、ディスプレイ座標空間における２つの頂点ポイントの位置座標が、両方の次元（たとえば、ｘ次元とｙ次元）で０．１２５未満だけ異なるとき、現在の頂点ポイントを廃棄する。上記ではディスプレイ座標空間において行われるものとして説明したが、頂点シェーダ２２は、モデルまたはユーザ座標空間においてその比較を実行することによって頂点ポイントを廃棄することができる。
【００５２】
上記の例では、頂点シェーダ２２は、頂点位置の属性情報として現在の頂点ポイントのインデックス値を入力する。そのインデックス値は０からＮまでの整数値をとることができ、各後続の頂点ポイントはシーケンスの次のインデックス値を有する。言い換えれば、現在の頂点ポイントのインデックス値が「２」である場合、前の頂点ポイントのインデックス値は「１」であり、後続の頂点ポイントのインデックス値は「３」であり、以下同様である。本開示の技法の一態様では、ＧＰＵ１０は、この属性情報をデバイスメモリ８から読み取る代わりに、またはその属性情報を含むコマンドをＣＰＵ６から受信する代わりに、整数のこのシーケンスを発生することができる。ＧＰＵ１０内で整数のシーケンスを発生することにより、バス１８上で使用される帯域幅の量を低減することができる。
【００５３】
制御ユニット２１は、たとえば、０からＮまでの処理された頂点ポイントをカウントするために使用されるカウンタ２８を維持することができる。したがって、頂点ポイントの頂点の属性情報が頂点シェーダ２２にロードされたとき、制御ユニット２１は一般にカウンタ２８を増分する。いくつかの態様では、制御ユニット２１は、カウンタ２８をインデックス属性情報のソースとして使用することができる。たとえば、制御ユニット２１は、カウンタ２８の値を現在の頂点ポイントについてのインデックス属性情報として与え、現在のインデックス値を頂点シェーダ２２にロードしたときに、カウンタ２８の値を１だけ増分することができる。これにより、デバイスメモリ８またはＣＰＵ６から位置頂点の属性情報をロードする必要がなくなるので、バス１８上での着信帯域幅消費の量が減少する。
【００５４】
頂点シェーダ２２は、いくつかの例では、実質的直線上にある余分の頂点ポイントを除去することによって、ＣＰＵ６から受信した頂点ポイントのセットから頂点ポイントの数を低減することができる。言い換えれば、頂点シェーダ２２は、前の頂点ポイントおよび後続の頂点ポイントを使用して確立される直線上に実質的にある中間頂点ポイントを除去することができる。本開示で説明するように、直線上にある中間または余分の頂点ポイントは、プリミティブをレンダリングするのに不要であることがある。頂点シェーダ２２は、冗長な頂点ポイントを除去することなしに、または冗長な頂点ポイントを除去することに加えて、実質的直線上にある余分のまたは中間頂点ポイントを除去することができる。
【００５５】
直線上の余分のまたは中間頂点ポイントを除去するために、頂点シェーダ２２は、３つの頂点ポイントをもつ直線セグメントの場合、現在の頂点ポイントについて、ならびに前の頂点ポイントおよび後続の頂点ポイントについて、ディスプレイ座標空間における位置座標を計算することができる。同様の技法は、４つ以上の頂点ポイントをもつ直線セグメントで使用できる。頂点シェーダ２２は、上記で詳細に説明したように、それらの頂点ポイントの位置座標を同様に計算することができる。一例として、頂点シェーダ２２は、上記の例示的な擬似コードにおいて説明したように、ディスプレイ座標空間における、現在の頂点ポイントについての位置座標（ｘ＿ｃｕｒｒ，ｙ＿ｃｕｒｒ）および前の頂点ポイントについての位置座標（ｘ＿ｐｒｅｖ，ｙ＿ｐｒｅｖ）を計算し、さらに、ｔ＝ｔ＋ｄｅｌｔａを使用して後続の頂点ポイントの変換された位置座標（ｘ＿ｓｕｂｓ，ｙ＿ｓｕｂｓ）を計算することができる。
【００５６】
前の頂点ポイント、現在の頂点ポイントおよび後続の頂点ポイントについて変換された位置頂点ポイントを計算した後、頂点シェーダ２２は、それらの変換された位置頂点ポイントが実質的直線上にあるかどうかを判断する。そうするために、頂点シェーダ２２は、現在の頂点ポイントと前の頂点ポイントとの位置座標を接続するラインセグメントの傾きを、後続の頂点ポイントと現在の頂点ポイントとの位置座標を接続するラインセグメントの傾きと比較することができる。両方のラインセグメントの傾きが実質的に等しい（たとえば、許容差、または以下の式（３）中の「ＴＨＲ」以内である）とき、頂点シェーダ２２は、それらの頂点ポイントが実質的直線上にあると判断する。頂点シェーダ２２は、たとえば、次式が満たされたとき、変換された位置頂点ポイントが直線上にあると判断することができる。
【数３】
0005270004.tif 000004
【００５７】
頂点シェーダ２２は、頂点ポイントの変換された位置座標が実質的直線上にある（すなわち、ＴＨＲ以下である）と判断したとき、現在の頂点ポイントを廃棄する。いくつかの例では、頂点シェーダ２２は、頂点ポイントが直線上にあるかどうかを判断する際に、特定の程度の誤りを許容することができる。
【００５８】
いくつかの例では、ＧＰＵ１０は、曲線の高次導関数を計算し、頂点ポイントを廃棄すべきかどうかを判断する際にその高次導関数を使用することができる。たとえば、ＧＰＵ１０は、曲線の曲率（たとえば、傾き）を表す２次導関数を計算し、頂点ポイントのロケーションにおける曲線の曲率に基づいて、頂点ポイントを廃棄すべきかどうかを判断することができる。たとえば、曲線の曲率が頂点ポイントのロケーションにおいて高い値を有する場合、ＧＰＵ１０は、その頂点ポイントを廃棄しないことを判断することができる。
【００５９】
頂点シェーダ２２が、現在の頂点ポイントを保持することを判断したとき、たとえば、その頂点ポイントが、重複または冗長な頂点ポイントでないか、あるいは隣接頂点ポイントをもつ直線上にないとき、頂点シェーダ２２は、変換された頂点ポイント、また変換された頂点ポイントを定義する属性情報を出力する。一例では、頂点シェーダ２２は、その出力された頂点ポイント、または変換された頂点ポイントを定義する属性情報を、グラフィックスパイプライン２０における次の段、たとえば、プリミティブセットアップユニット２４に直接供給することができる。他の例では、頂点シェーダ２２は、変換された頂点ポイント、または変換された頂点ポイントを定義する属性情報をＧＰＵメモリ１２またはデバイスメモリ８などのメモリに記憶することができる。
【００６０】
上記で説明した例では、頂点シェーダ２２は、前のおよび／または後続の頂点ポイントを使用して、現在の頂点ポイントに関する判断を行う。言い換えれば、頂点シェーダ２２は、前のおよび／または後続の頂点ポイントの位置座標を計算して、頂点が、前の頂点ポイントの重複であるかどうか、または前の頂点ポイントおよび後続の頂点ポイントをもつ直線上にあるかどうかを判断する。したがって、曲線上の各頂点ポイントについて、頂点シェーダ２２は、現在の頂点ポイントを変換するために、２つ以上の追加の「オーバーヘッド」計算を実行する。たとえば、現在の頂点ポイントの位置座標が前の頂点ポイントの位置座標と実質的に同じであるかどうかを判断するために、頂点シェーダ２２は、現在の頂点ポイントの位置座標を変換することに加えて、前の頂点ポイントの位置座標を変換する。このことは、実行されたであろう唯一の演算が現在の頂点ポイントの位置座標を変換することであると仮定すると、オーバーヘッド計算の１００％の増加（たとえば、実行される演算の数の１００％の増加）をもたらすことがある。別の例として、現在の頂点ポイントの位置座標が、前のおよび後続の頂点ポイントをもつ直線上にあるかどうかを判断するために、頂点シェーダ２２は、前の頂点ポイントと、現在の頂点ポイントと、後続の頂点ポイントとの位置座標を変換する。このことは、実行されたであろう唯一の演算が現在の頂点ポイントの位置座標を変換することであると仮定すると、オーバーヘッド計算の２００％の増加をもたらすことがある。しかしながら、これらのオーバーヘッド計算は、グラフィックスパイプライン２０において後で実行されるいくつかの他のより複雑な計算をなくすことができる。
【００６１】
いくつかの例では、頂点シェーダ２２は、複数の頂点ポイントを変換することによって、このオーバーヘッド計算を低減するように構成できる。一例として、頂点シェーダ２２は、４つの頂点ポイントを同時に変換するように構成できる。この例では、頂点シェーダ２２は、インデックス値（ｉ）を得て、５つの頂点ポイント、たとえば、インデックス値ｉ−１、ｉ、ｉ＋１、ｉ＋２、およびｉ＋３に対応する頂点ポイントについての位置座標を計算することができる。頂点シェーダ２２は、頂点ｉ、ｉ＋１、ｉ＋２、およびｉ＋３の各々の位置座標を、それぞれ、インデックス値ｉ−１、ｉ、ｉ＋１、およびｉ＋２と対応する、前の頂点ポイントの各々の位置座標と比較して、それらの頂点ポイントのいずれかが重複であるかどうかを判断することができる。頂点シェーダ２２は、（いずれも重複でない場合は）最高４つの変換された頂点ポイントを出力することができる。このようにして、頂点シェーダ２２は、計算オーバーヘッドを１００％（入力頂点ポイントごとに１回のオーバーヘッド計算）から２５％（４つの入力頂点ポイントごとに１回のオーバーヘッド計算）に低減することができる。
【００６２】
プリミティブセットアップユニット２４は、変換された頂点ポイントを使用してプリミティブを発生する。プリミティブセットアップユニット２４は、たとえば、３つの変換された頂点ポイントのセットを使用して、三角形プリミティブ、たとえば、三角形ストリップ、三角形ファン、または別々の三角形を発生することができる。ただし、他の例では、プリミティブセットアップユニット２４は、３つ未満の変換された頂点ポイントまたは４つ以上の変換された頂点ポイントを使用して、他のタイプのプリミティブを発生することができる。たとえば、プリミティブセットアップユニット２４によって発生できる他のプリミティブには、ポイント、ラインストリップ、ラインループ、別々のライン、四辺形ストリップ、別々の四辺形、または他のタイプの多角形がある。例示のために、本開示では、三角形ファンプリミティブを発生するものとしてプリミティブセットアップユニット２４について説明する。ただし、本明細書で広く説明する技法は、三角形ファンプリミティブに限定されるべきではなく、むしろ任意のタイプのプリミティブに使用できる。
【００６３】
三角形ファンは一連の接続された三角形である。三角形ファンの接続された三角形の各々は、各隣接三角形と２つの共通頂点ポイント、すなわち、ルート頂点ポイントと少なくとも１つの他の頂点ポイントとを共有する。たとえば、三角形ファンプリミティブを発生するために、プリミティブセットアップユニット２４はルート頂点ポイントを定義する。たいていの場合、プリミティブセットアップユニット２４によって発生されたルート頂点ポイントは、オブジェクトを定義する曲線上に位置しない。代わりに、ルート頂点は、オブジェクトを定義する曲線の凹部分に隣接して位置することができる。三角形ファンプリミティブを発生するために、プリミティブセットアップユニット２４は、ルート頂点ポイントを、オブジェクトを定義する曲線上にある２つの頂点ポイントと接続する。このようにして、プリミティブセットアップユニット２４によって発生された三角形プリミティブの各々は、ルート頂点ポイントと、オブジェクトを定義する曲線上にある少なくとも１つの頂点ポイントとを共有する。したがって、プリミティブセットアップユニット２４は、わずかＮ＋２個の頂点ポイントを使用して、Ｎ個の三角形プリミティブをもつ三角形ファンを発生することができる。
【００６４】
通常、頂点ポイントが廃棄されたとき、プリミティブセットアップユニット２４は、廃棄された頂点ポイントを含んでいるすべてのプリミティブを廃棄する。たとえば、三角形ファンの場合、プリミティブセットアップユニット２４は、廃棄された頂点ポイントごとに２つの隣接する三角形プリミティブを廃棄する。ピクセルが繰返しであるために、または現在の頂点ポイントが、隣接頂点ポイントを接続する直線上にあるために、そのピクセルが廃棄されたときなど、いくつかの例では、廃棄されたピクセルを含んでいるすべてのプリミティブを廃棄することは望ましくないことがある。したがって、プリミティブセットアップユニット２４は、廃棄された頂点ポイントを含むすべてのプリミティブを廃棄するわけではないことがある。代わりに、プリミティブセットアップユニット２４は、廃棄された頂点ポイントが決して頂点ポイントでないかのように、プリミティブをセットアップすることができる。たとえば、三角形ファンの場合、プリミティブセットアップユニット２４は、三角形ファンのルート頂点と、前の廃棄されていない頂点ポイントと、廃棄された頂点ポイントの後に来る最初の廃棄されていない頂点とを使用して、三角形プリミティブを発生することができる。したがって、廃棄された頂点ポイントを含む２つの隣接する三角形プリミティブを廃棄するのではなく、プリミティブセットアップユニット２４は、２つの隣接する三角形プリミティブの代わりに単一の三角形プリミティブを形成する。
【００６５】
ピクセルシェーダ２６は、頂点の属性情報に基づいて、プリミティブセットアップユニット２４によって出力されたプリミティブをピクセルに変換する。ピクセルシェーダ２６は、たとえば、プリミティブに対してクリッピング演算を実行し、スクリーン中のピクセルのうちのどのピクセルがオブジェクトのジオメトリ内にあり、したがって描画される必要があるかを判断することができる。さらに、ピクセルシェーダ２６は、ピクセルデータを発生するために、プリミティブの頂点ポイントの頂点の属性情報の補間を実行することができる。ピクセルシェーダ２６は、さらに、各ピクセルロケーションにおいて表示するカラー値を発生するために、ピクセルごとのテクスチャ化、フォグ演算および着色演算を実行することができる。
【００６６】
本開示で説明する技法は様々な他のアーキテクチャで実装できるので、図２に示すアーキテクチャは例にすぎない。たとえば、ＧＰＵ１０は、頂点シェーダ２２およびピクセルシェーダ２６に起因する機能を実行することができる単一のシェーダコアを利用することができる。単一のシェーダコアは、たとえば、グラフィックス演算があるパイプラインの段に基づいて、頂点シェーダ２２またはピクセルシェーダ２６として機能するように、制御ユニット２１によって構成できる。さらに、図１に示す機能は、ハードウェアおよび／またはソフトウェア構成要素の任意の適切な組合せによって実現できる。
【００６７】
図３は、本開示の技法に従って１つまたは複数の頂点ポイントを廃棄する例示的な頂点シェーダ２２Ａのブロック図である。頂点シェーダ２２Ａは、たとえば、図２の頂点シェーダ２２と対応することがある。頂点シェーダ２２Ａは、現在の頂点ポイントおよび少なくとも１つの追加の頂点ポイントについてディスプレイ座標空間における位置座標を計算する位置座標計算モジュール３０と、計算された頂点ポイントのいずれかを廃棄すべきかどうかを判断する頂点廃棄モジュール３２とを含む。
【００６８】
位置座標計算モジュール３０は、少なくとも１つの頂点ポイントを表す１つまたは複数の頂点の属性情報を得る。図３の例では、位置座標計算モジュール３０は、他の頂点ポイントの中の上記頂点ポイントの位置を示すインデックス属性情報ｉを得る。位置座標計算モジュール３０は、そのインデックス属性情報に関連する頂点ポイント、すなわち、現在の頂点ポイントについてディスプレイ座標空間における位置座標を計算する。位置座標計算モジュール３０はまた、少なくとも１つの他の頂点ポイント、たとえば、前の頂点ポイントについてディスプレイ座標空間における位置座標を計算する。図２に関して上記で詳細に説明したように、位置座標計算モジュール３０は、グラフィカルソフトウェアアプリケーションによって定義された曲線を表す数式と、インデックス属性情報ｉに応じて計算された変数とを使用して、その位置座標を計算することができる。図３では、現在の頂点ポイントの位置座標と前の頂点ポイントの位置座標は、それぞれ、（ｘ＿ｃｕｒｒ，ｙ＿ｃｕｒｒ）と（ｘ＿ｐｒｅｖ，ｙ＿ｐｒｅｖ）として表されている。
【００６９】
頂点廃棄モジュール３２は、現在のおよび前の頂点ポイントの計算された位置座標を受信する。頂点廃棄モジュール３２は、現在の頂点ポイントの計算された位置座標を前の頂点ポイントの計算された位置座標と比較し、ディスプレイ座標空間における位置座標が実質的に同じであるとき、現在の頂点ポイントを廃棄する。言い換えれば、頂点廃棄モジュール３２は、ｘ＿ｃｕｒｒ＝ｘ＿ｐｒｅｖおよびｙ＿ｃｕｒｒ＝ｙ＿ｐｒｅｖであるとき、現在の頂点ポイントを廃棄する。このようにして、頂点シェーダ２２Ａはディスプレイ座標空間において冗長な頂点ポイントを除去する。
【００７０】
現在の頂点ポイントを廃棄すると、頂点廃棄モジュール３２は、現在の頂点ポイントが廃棄されたことを示す廃棄信号を出力することがある。代替的に、頂点廃棄モジュール３２は、現在の頂点ポイントが廃棄されたとき、いかなる信号をも出力しないことがある。頂点廃棄モジュール３２が現在の頂点ポイントを廃棄しないとき、すなわち、ディスプレイ座標空間における現在のおよび前の頂点ポイントの位置座標が異なるとき、頂点廃棄モジュール３２は現在の頂点ポイントの位置座標（ｘ＿ｃｕｒｒ，ｙ＿ｃｕｒｒ）を出力する。
【００７１】
位置座標計算モジュール３０について、受信したインデックス属性情報に基づいて現在のおよび前の頂点ポイントについての位置座標を計算することに関して説明するが、位置座標計算モジュール３０は、ディスプレイ座標空間における現在のおよび前の頂点ポイントについての位置座標を計算する際に使用する他の位置の属性情報を受信することができる。たとえば、位置座標計算モジュール３０は、モデル座標空間における現在のおよび前の頂点ポイントの位置座標を受信し、変換式を使用してディスプレイ座標空間における現在のおよび前の頂点ポイントの位置座標を計算することができる。さらに別の例では、位置座標計算モジュール３０は、ディスプレイ座標空間における現在の頂点ポイントの位置座標のみを計算することができる。この場合、位置座標計算モジュール３０は、比較のために、ディスプレイ座標空間における前の頂点ポイントの前に計算された位置座標を受信することができる。
【００７２】
図４は、本開示の一態様による、複数の頂点ポイントを出力する例示的な頂点シェーダ２２Ｂのブロック図である。頂点シェーダ２２Ｂは、たとえば、図２の頂点シェーダ２２と対応することがある。頂点シェーダ２２Ｂは、複数の頂点ポイントについてディスプレイ座標空間における位置座標を計算する位置座標計算モジュール４０と、計算された頂点ポイントのいずれかを廃棄すべきかどうかを判断する頂点廃棄モジュール４２とを含む。
【００７３】
位置座標計算モジュール４０は、少なくとも１つの頂点ポイントを表す１つまたは複数の頂点の属性情報を得る。図４の例では、位置座標計算モジュール３０は、頂点ポイントのシーケンスにおける位置を示すインデックス属性情報ｉを得る。位置座標計算モジュール４０は、複数の頂点ポイントについてディスプレイ座標空間における位置座標を計算する。図４の例では、位置座標計算モジュール４０は、５つの頂点ポイントのピクセル座標、（ｘ１，ｙ１）、（ｘ２，ｙ２）、（ｘ３，ｙ３）、（ｘ４，ｙ４）および（ｘ５，ｙ５）を計算する。図２に関して上記で詳細に説明したように、位置座標計算モジュール４０は、グラフィカルソフトウェアアプリケーションによって定義された曲線を表す数式と、インデックス属性情報ｉに応じて計算された変数とを使用して、その位置座標を計算することができる。
【００７４】
頂点廃棄モジュール４２は、複数の頂点ポイントの計算された位置座標を受信し、それらの頂点ポイントのいずれかを廃棄すべきかどうかを判断する。頂点廃棄モジュール４２は、たとえば、頂点ポイントの計算された位置座標（ｘ２，ｙ２）〜（ｘ５，ｙ５）の各々を、それぞれ、前の頂点ポイントの位置座標（ｘ１，ｙ１）〜（ｘ４，ｙ４）と比較することができる。頂点廃棄モジュール４２は、対応する前の頂点ポイントと実質的に同じである、ディスプレイ座標空間における位置座標を有する頂点ポイントを廃棄する。このようにして、頂点シェーダ２２Ｂはディスプレイ座標空間において冗長な頂点ポイントを除去する。
【００７５】
頂点廃棄モジュール４２は、さらに、頂点ポイントのうちの少なくともいくつかが、隣接する頂点ポイントをもつ直線上にあるかどうかを判断することができる。図４の例では、頂点廃棄モジュール４２は、頂点ポイントの位置座標（ｘ２，ｙ２）〜（ｘ４，ｙ４）が直線上にあるかどうかを判断することができる。そうするために、頂点廃棄モジュール４２は、頂点ポイントの位置座標（ｘ２，ｙ２）と前の頂点ポイントの位置座標（ｘ１，ｙ１）とを接続するラインセグメントの傾きを、後続の頂点ポイントの位置座標（ｘ３，ｙ３）と頂点ポイントの位置座標（ｘ２，ｙ２）とを接続するラインセグメントの傾きと比較することができる。両方のラインセグメントの傾きが実質的に等しい（たとえば、許容差以内である）とき、頂点廃棄モジュール４２は、それらの頂点ポイントが実質的直線上にあると判断し、頂点ポイント（ｘ２，ｙ２）を廃棄する。頂点廃棄モジュール４２は、頂点ポイントの位置座標（ｘ３，ｙ３）および（ｘ４，ｙ４）の同じ分析を実行する。（ｘ１，ｙ１）の前には、ラインセグメントの傾きを計算するために使用する、前の頂点ポイントについての位置座標がなく、（ｘ５，ｙ５）の後には、ラインセグメントの傾きを計算するために使用する、後続の頂点ポイントについての位置座標がないので、頂点廃棄モジュール４２は、頂点ポイントの位置座標（ｘ１，ｙ１）および（ｘ５，ｙ５）に対してライン分析を実行しないことがある。
【００７６】
廃棄された頂点ポイントがない場合、頂点廃棄モジュール４２は、最高４つの頂点ポイントについての位置座標を出力することができる。図４に示す例では、たとえば、頂点ポイントの位置座標（ｘ３，ｙ３）が、重複であるか、またはその隣接頂点ポイントをもつ直線上にあるので、頂点廃棄モジュール４２は頂点ポイントの位置座標（ｘ３，ｙ３）を廃棄する。したがって、頂点廃棄モジュール４２は３つの頂点ポイントの位置座標を出力する。複数の頂点ポイントの位置座標を計算し、出力することによって、頂点シェーダ２２Ｂは計算オーバーヘッドを低減することができる。たとえば、頂点シェーダ２２Ｂが、最高４つの頂点ポイントについての位置座標を出力することができるとき、頂点シェーダ２２Ｂは、計算オーバーヘッドを１００％（入力頂点ポイントごとに１回のオーバーヘッド計算）から２５％（４つの入力頂点ポイントごとに１回のオーバーヘッド計算）に低減することができる。図４で説明する例では、頂点シェーダ２２Ｂは、最高４つの頂点ポイントについての位置座標を出力することができるが、頂点シェーダ２２Ｂは、任意の数の頂点ポイントについての位置座標を出力するように構成できる。たとえば、頂点シェーダ２２Ｂは、４つよりも多いまたは少ない頂点ポイントについての位置座標を出力するように構成できる。
【００７７】
図５は、ディスプレイ座標空間において繰返しの頂点ポイントを廃棄する頂点シェーダ２２の例示的な動作を示す流れ図である。頂点シェーダ２２は、レンダリングすべき曲線上にある少なくとも１つの頂点ポイントを定義する１つまたは複数の頂点の属性情報を得る（５０）。頂点の属性情報は、頂点ポイントのシーケンスにおける現在の頂点ポイントの位置を示す、現在の頂点ポイントに関連するインデックス番号などの、位置の属性情報を含む。別の例では、位置の属性情報は、２Ｄ曲線の場合は（ｘ，ｙ）座標、または３Ｄ曲線の場合は（ｘ，ｙ，ｚ）座標などの、位置座標とすることができる。頂点の属性情報は、さらに、１つまたは複数のカラー属性情報、１つまたは複数のテクスチャ属性情報、１つまたは複数のライティング属性情報など、頂点ポイントに関連する他の情報を含むことができる。頂点シェーダ２２は、頂点の属性情報のシーケンスをデバイスメモリ８から得るか、ＣＰＵ６からのコマンドから得るか、またはインデックス番号の場合は、ＧＰＵ１０内のカウンタ２８から得ることができる。
【００７８】
頂点シェーダ２２は、ディスプレイ座標空間における現在の頂点ポイントの位置座標を計算する（５２）。現在の頂点ポイントは、頂点シェーダ２２が現在作用している頂点ポイントである。頂点シェーダ２２は、ディスプレイ座標空間における前の頂点ポイントの位置座標をも計算する（５４）。前の頂点ポイントは、現在の頂点ポイントの直前にくる頂点ポイントとすることができる。たとえば、インデックス属性情報の場合、頂点シェーダ２２は、たとえば、図２の擬似コードに関して示し、説明したように、グラフィカルソフトウェアアプリケーションによって定義された曲線を表す数式と、インデックス属性情報ｉに応じて計算された変数とを使用して、その位置座標を計算することができる。現在のおよび前の頂点ポイントの位置座標は、ディスプレイ上のロケーション、たとえば、ディスプレイ上に曲線を提示するために使用される、ピクセルのアレイの中でのピクセルロケーションを表すことができる。
【００７９】
頂点シェーダ２２は、現在のおよび前の頂点ポイントのディスプレイ位置座標が実質的に同じであるかどうかを判断する（５６）。たとえば、頂点シェーダ２２は、現在の頂点ポイントの計算されたディスプレイ位置座標を前の頂点ポイントの計算されたディスプレイ位置座標と比較して、それらのディスプレイ位置座標が実質的に同じであるかどうか、たとえば、許容しきい値以内であるかどうかを判断することができる。それらのディスプレイ位置座標が実質的に同じであるとき、頂点シェーダ２２は現在の頂点ポイントを廃棄する（５７）。いくつかの例では、頂点シェーダ２２は、現在の頂点ポイントが廃棄されたことを示す廃棄信号を出力することがある。代替的に、頂点シェーダ２２は何も出力しないことがあり、たとえば、頂点ポイントが廃棄されたことを他のモジュールまたは要素に示すことなしに頂点ポイントを廃棄することがある。このようにして、頂点シェーダ２２はディスプレイ座標空間において冗長な頂点ポイントを除去する。
【００８０】
頂点シェーダ２２は、それらのディスプレイ位置座標が実質的に同じでないと判断したとき、ディスプレイ座標空間における現在の頂点ポイントの位置座標を出力する（５８）。図５の流れ図では、頂点シェーダ２２が、単一の頂点ポイントを廃棄すべきか否かに関する判断を行うことについて説明するが、頂点シェーダは、上記で詳細に説明したように、２つ以上の頂点ポイントについて同時にそのような判断を行うように構成できる。たとえば、頂点シェーダ２２は、Ｎ個の頂点ポイントについての位置座標、ならびにＮ個の頂点ポイントの直前にある１つの頂点ポイントの位置座標を計算することによって、Ｎ個の頂点ポイントを廃棄すべきかどうかを同時に判断するように構成できる。頂点シェーダ２２は、Ｎ個の頂点ポイントの各々の位置座標を、対応する前の頂点ポイントの位置座標と比較して、Ｎ個の頂点ポイントのいずれかが重複であるかどうかを判断することができる。頂点シェーダ２２は、（いずれも重複でない場合は）最高Ｎ個の頂点ポイントを出力することができる。このようにして、頂点シェーダ２２は、計算オーバーヘッドを１００％（入力頂点ポイントごとに１回のオーバーヘッド計算）から２５％（４つの入力頂点ポイントごとに１回のオーバーヘッド計算）に低減することができる。
【００８１】
図６は、ディスプレイ座標空間において直線上にある少なくともいくつかの頂点ポイントを廃棄する頂点シェーダ２２の例示的な動作を示す流れ図である。頂点シェーダ２２は、レンダリングすべき曲線上にある少なくとも１つの頂点ポイントを定義する１つまたは複数の頂点の属性情報を得る（６０）。頂点の属性情報は、頂点ポイントのシーケンスにおける現在の頂点ポイントの位置を示す、現在の頂点ポイントに関連するインデックス番号などの、位置の属性情報を含む。別の例では、位置の属性情報は、２Ｄ曲線の場合は（ｘ，ｙ）座標、または３Ｄ曲線の場合は（ｘ，ｙ，ｚ）座標などの、位置座標とすることができる。頂点の属性情報は、さらに、法線属性情報、１つまたは複数のカラー属性情報、１つまたは複数のテクスチャ属性情報、１つまたは複数のライティング属性情報など、頂点ポイントに関連する他の情報を含むことができる。頂点シェーダ２２は、頂点の属性情報のシーケンスをデバイスメモリ８から得るか、ＣＰＵ６からのコマンドから得るか、またはインデックス番号の場合は、ＧＰＵ１０内から得ることができる。
【００８２】
頂点シェーダ２２は、ディスプレイ座標空間における現在の頂点ポイントの位置座標を計算する（６２）。現在の頂点ポイントは、頂点シェーダ２２が現在作用している頂点ポイントである。頂点シェーダ２２は、ディスプレイ座標空間における前の頂点ポイントの位置座標をも計算する（６４）。前の頂点ポイントは、現在の頂点ポイントの直前にくる頂点ポイントとすることができる。頂点シェーダ２２は、ディスプレイ座標空間における後続の頂点ポイントの位置座標をも計算する（６６）。後続の頂点ポイントは、現在の頂点ポイントの直後にくる頂点ポイントとすることができる。たとえば、インデックス属性情報の場合、頂点シェーダ２２は、たとえば、図２の擬似コードに関して示し、説明したように、グラフィカルソフトウェアアプリケーションによって定義された曲線を表す数式と、インデックス属性情報ｉに応じて計算された変数とを使用して、その位置座標を計算することができる。
【００８３】
頂点シェーダ２２は、それらの頂点ポイントが実質的直線上にあるかどうかを判断する（６８）。たとえば、頂点シェーダ２２は、現在の頂点ポイントと前の頂点ポイントとの位置座標を接続するラインセグメントの傾きを、後続の頂点ポイントと現在の頂点ポイントとの位置座標を接続するラインセグメントの傾きと比較することができる。両方のラインセグメントの傾きが実質的に等しい（たとえば、許容差以内である）とき、頂点シェーダ２２は、それらの頂点ポイントが実質的直線上にあると判断する。
【００８４】
頂点シェーダ２２は、それらの頂点ポイントが実質的直線上にあると判断したとき、現在の頂点ポイントを廃棄する（７０）。前の頂点ポイントと後続の頂点ポイントとを接続するラインセグメントは、前の頂点ポイントと現在の頂点ポイントとを接続し、現在の頂点ポイントと後続の頂点ポイントとを接続する、ラインセグメントと同じであるので、現在の頂点ポイントを廃棄することは、ディスプレイにレンダリングされる画像に影響を及ぼさない。頂点シェーダ２２は、それらの頂点ポイントが実質的直線上にあると判断したとき、ディスプレイ座標空間における現在の頂点ポイントの位置座標を出力する（７２）。頂点シェーダ２２は、図５に関して説明したように、冗長な頂点ポイントを除去することなしに、または冗長な頂点ポイントを除去することに加えて、実質的直線上にある頂点ポイントを除去することができる。
【００８５】
本明細書で説明した技法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装できる。モジュールまたは構成要素として説明する機能は、集積論理デバイスに一緒に、または個別であるが相互運用可能な論理デバイスとして別々に実装できる。場合によっては、様々な特徴は、集積回路チップまたはチップセットなどの集積回路デバイスとして実装できる。ソフトウェアで実装した場合、本技法は、実行されたときに、上記で説明した方法の１つまたは複数を実行する命令を備えるコンピュータ可読媒体によって少なくとも部分的に実現できる。コンピュータ可読媒体は、パッケージング材料を含むことができる、コンピュータプログラム製品の一部をなすことができる。コンピュータ可読媒体は、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、電気的消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気または光学データ記憶媒体などを備えることができる。本技法は、追加または代替として、命令またはデータ構造の形態でコードを搬送または伝達し、コンピュータによってアクセス、読取り、および／または実行できるコンピュータ可読通信媒体によって、少なくとも部分的に実現できる。
【００８６】
コードは、１つまたは複数のＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、フィールドプログラマブル論理アレイＦＰＧＡ、あるいは他の等価な集積または個別論理回路など、１つまたは複数のプロセッサによって実行できる。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明する機能を、グラフィックス画像をテッセレーションするように構成された、専用のソフトウェアアプリケーションまたはハードウェアモジュールの内部に与えることができる。したがって、本開示はまた、本開示で説明した技法の１つまたは複数を実装する回路を含む様々な集積回路デバイスのいずれかを企図する。そのような回路は、単一の集積回路チップまたは複数の相互運用可能な集積回路チップで提供できる。
【００８７】
様々な態様について説明した。これらおよび他の態様は添付した本願の特許請求の範囲内に入る。なお、本願の出願当初の請求項と同一の記載を「その他の実施例」として、以下に付記する。
[その他の実施例１]
下記を備える方法：
レンダリングすべき曲線上にある複数の頂点ポイントの各々についての位置座標を判断すること；
前記複数の頂点ポイントの少なくとも一部の前記位置座標を分析すること；および、
前記分析に基づいて前記複数の頂点ポイントのうちの少なくとも１つを廃棄すること。
[その他の実施例２]
前記複数の頂点ポイントの各々の前記位置座標を分析することが、前記複数の頂点ポイントのうちの第１の頂点ポイントの第１の位置座標を前記複数の頂点ポイントのうちの第２の頂点ポイントの第２の位置座標と比較することを備え、ただし、前記第１の頂点ポイントが前記第２の頂点ポイントの直前にあり、
少なくとも１つの頂点ポイントを廃棄することは、前記第１および第２の位置座標が実質的に同じであるとき、前記第２の頂点ポイントを廃棄することを備える、
その他の実施例１に記載の方法。
[その他の実施例３]
前記複数の頂点ポイントの各々の前記位置座標を分析することが、前記複数の頂点ポイントのうちの第３の頂点ポイントの第３の位置座標を前記第２の位置座標と比較することをさらに備え、ただし、前記第２の頂点ポイントが前記第３の頂点ポイントの直前にあり、
少なくとも１つの頂点ポイントを廃棄することは、前記第２および第３の位置座標が実質的に同じであるとき、前記第３の頂点ポイントを廃棄することを備える、
その他の実施例２に記載の方法。
[その他の実施例４]
下記をさらに備える、その他の実施例３に記載の方法：
前記第１および第２の位置座標が実質的に同じでないとき、前記第２の頂点ポイントの前記位置座標を出力すること；および、
前記第２および第３の位置座標が実質的に同じでないとき、前記第３の頂点ポイントの前記位置座標を同時に出力すること。
[その他の実施例５]
少なくとも１つの頂点ポイントを廃棄することが、前の頂点ポイントと後続の頂点ポイントとによって形成される直線上に実質的にある少なくとも１つの頂点ポイントを廃棄することを備える、その他の実施例１に記載の方法。
[その他の実施例６]
前記複数の頂点ポイントの各々の前記位置座標を分析することが、
第１の頂点ポイントの位置座標と第２の頂点ポイントの位置座標との間の第１の傾きを計算することと、
前記第２の頂点ポイントの前記位置座標と第３の頂点ポイントの位置座標との間の第２の傾きを計算することと
を備え、
少なくとも１つの頂点ポイントを廃棄することは、前記第１および第２の計算された傾きが実質的に同じであるとき、前記第２の頂点ポイントを廃棄することを備える、
その他の実施例１に記載の方法。
[その他の実施例７]
前記複数の頂点ポイントの各々の前記位置座標を分析することが、前記第１の頂点ポイントの前記位置座標を前記第２の頂点ポイントの前記位置座標と比較することをさらに備え、
少なくとも１つの頂点ポイントを廃棄することは、前記第１および第２の位置座標が実質的に同じであるとき、前記第２の頂点ポイントを廃棄することを備える、
その他の実施例６に記載の方法。
[その他の実施例８]
前記複数の頂点ポイントにおける現在の頂点ポイントの順序位置を示すインデックス値を得ることをさらに備え、前記位置座標を前記判断することが、前記インデックス値に応じて複数の頂点ポイントの各々についてディスプレイ座標空間における位置座標を判断することを備える、その他の実施例１に記載の方法。
[その他の実施例９]
前記インデックス値を得ることが、前記インデックス値をグラフィックス処理ユニット（ＧＰＵ）のカウンタから得ることを備える、その他の実施例８に記載の方法。
[その他の実施例１０]
前記曲線をディスプレイに表示するために前記曲線をレンダリングすることをさらに備える、その他の実施例１に記載の方法。
[その他の実施例１１]
前記頂点ポイントが２次元曲線上にあり、
前記複数の頂点ポイントの各々の前記位置座標を分析することが、３次元（３Ｄ）グラフィックス処理ユニット（ＧＰＵ）の頂点シェーダを用いて、前記複数の頂点ポイントの各々の前記位置座標を分析することを備え、
前記複数の頂点ポイントのうちの少なくとも１つを廃棄することが、前記３Ｄ  ＧＰＵの前記頂点シェーダを用いて、前記分析に基づいて前記複数の頂点ポイントのうちの少なくとも１つを廃棄することを備える、その他の実施例１に記載の方法。
[その他の実施例１２]
前記複数の頂点ポイントのうちの少なくとも１つを廃棄することが、前記複数の頂点ポイントのうちの少なくとも１つの他の頂点ポイントと同じピクセル位置にマッピングする、前記複数の頂点ポイントのうちの少なくとも１つを廃棄することを備える、その他の実施例１に記載の方法。
[その他の実施例１３]
下記を実行する処理ユニットを備えるデバイス：
レンダリングすべき曲線上にある複数の頂点ポイントの各々についての位置座標を判断すること；
前記複数の頂点ポイントの少なくとも一部の前記位置座標を分析すること；および、
前記分析に基づいて前記複数の頂点ポイントのうちの少なくとも１つを廃棄すること。
[その他の実施例１４]
前記処理ユニットが下記を実行するその他の実施例１３に記載のデバイス：
前記複数の頂点ポイントのうちの第１の頂点ポイントの第１の位置座標を前記複数の頂点ポイントのうちの第２の頂点ポイントの第２の位置座標と比較すること、ただし、前記第１の頂点ポイントが前記第２の頂点ポイントの直前にある；および、
前記第１および第２の位置座標が実質的に同じであるとき、前記第２の頂点ポイントを廃棄すること。
[その他の実施例１５]
前記処理ユニットが下記を実行するその他の実施例１４に記載のデバイス：
前記複数の頂点ポイントのうちの第３の頂点ポイントの第３の位置座標を前記第２の位置座標と比較すること、ただし、前記第２の頂点ポイントが前記第３の頂点ポイントの直前にある；および、
前記第２および第３の位置座標が実質的に同じであるとき、前記第３の頂点ポイントを廃棄すること。
[その他の実施例１６]
前記処理ユニットが下記を実行するその他の実施例１５に記載のデバイス：
前記第１および第２の位置座標が実質的に同じでないとき、前記第２の頂点ポイントの前記位置座標を出力すること；および、
前記第２および第３の位置座標が実質的に同じでないとき、前記第３の頂点ポイントの前記位置座標を同時に出力すること。
[その他の実施例１７]
前記処理ユニットが、前の頂点ポイントと後続の頂点ポイントとによって形成される直線上に実質的にある少なくとも１つの頂点ポイントを廃棄する、その他の実施例１３に記載のデバイス。
[その他の実施例１８]
前記処理ユニットが下記を実行するその他の実施例１３に記載のデバイス：
第１の頂点ポイントの位置座標と第２の頂点ポイントの位置座標との間の第１の傾きを計算すること；
前記第２の頂点ポイントの前記位置座標と第３の頂点ポイントの位置座標との間の第２の傾きを計算すること；および、
前記第１および第２の計算された傾きが実質的に同じであるとき、前記第２の頂点ポイントを廃棄すること。
[その他の実施例１９]
前記処理ユニットが下記を実行するその他の実施例１８に記載のデバイス：
前記第１の頂点ポイントの前記位置座標を前記第２の頂点ポイントの前記位置座標と比較すること；および、
前記第１および第２の位置座標が実質的に同じであるとき、前記第２の頂点ポイントを廃棄すること。
[その他の実施例２０]
前記処理ユニットが下記を実行するその他の実施例１３に記載のデバイス：
前記複数の頂点ポイントにおける現在の頂点ポイントの順序位置を示すインデックス値を得ること；および、
前記インデックス値に応じて複数の頂点ポイントの各々についてディスプレイ座標空間における位置座標を判断すること。
[その他の実施例２１]
前記処理ユニットが、前記インデックス値を発生するカウンタを含む、その他の実施例２０に記載のデバイス。
[その他の実施例２２]
前記処理ユニットが、前記曲線をディスプレイに提示するために前記曲線をレンダリングする、その他の実施例１３に記載のデバイス。
[その他の実施例２３]
前記頂点ポイントが２次元曲線上にあり、前記処理ユニットが３次元（３Ｄ）グラフィックス処理ユニット（ＧＰＵ）を備える、その他の実施例１３に記載のデバイス。
[その他の実施例２４]
その他の実施例１３に記載のデバイス、ただし、前記処理ユニットが３次元（３Ｄ）グラフィックス処理ユニット（ＧＰＵ）の頂点シェーダを備え、前記頂点シェーダが下記をさらに備える：
レンダリングすべき曲線上にある複数の頂点ポイントの各々についてディスプレイ座標空間における位置座標を判断する位置座標計算モジュール；
前記複数の頂点ポイントの各々の前記位置座標を分析し、前記分析に基づいて前記複数の頂点ポイントのうちの少なくとも１つを廃棄する頂点廃棄モジュール。
[その他の実施例２５]
前記デバイスがワイヤレス通信デバイスを備える、その他の実施例１３に記載のデバイス。
[その他の実施例２６]
前記デバイスが集積回路デバイスを備える、その他の実施例１３に記載のデバイス。
[その他の実施例２７]
前記複数の頂点ポイントのうちの少なくとも１つを廃棄することが、前記複数の頂点ポイントのうちの少なくとも１つの他の頂点ポイントと同じピクセル位置にマッピングする、前記複数の頂点ポイントのうちの少なくとも１つを廃棄することを備える、その他の実施例１３に記載のデバイス。
[その他の実施例２８]
実行された際に、下記動作を少なくとも１つのプロセッサに実行させる命令を備えるコンピュータ可読媒体：
レンダリングすべき曲線上にある複数の頂点ポイントの各々についての位置座標を判断すること；
前記複数の頂点ポイントの少なくとも一部分の前記位置座標を分析すること；および、
前記分析に基づいて前記複数の頂点ポイントのうちの少なくとも１つを廃棄すること。
[その他の実施例２９]
前記複数の頂点ポイントのうちの少なくとも１つを廃棄することが、前記複数の頂点ポイントのうちの少なくとも１つの他の頂点ポイントと同じピクセル位置にマッピングする、前記複数の頂点ポイントのうちの少なくとも１つを廃棄することを備える、その他の実施例２８に記載のデバイス。
[その他の実施例３０]
その他の実施例２８に記載のコンピュータ可読媒体、ただし、
前記複数の頂点ポイントの各々の前記位置座標を分析することを前記プロセッサに行わせる命令が、前記複数の頂点ポイントのうちの第１の頂点ポイントの第１の位置座標を前記複数の頂点ポイントのうちの第２の頂点ポイントの第２の位置座標と比較することを前記プロセッサに行わせる命令を備え、ただし、前記第１の頂点ポイントが前記第２の頂点ポイントの直前にあり、
少なくとも１つの頂点ポイントを廃棄することを前記プロセッサに実行させる命令は、前記第１および第２の位置座標が実質的に同じであるとき、前記第２の頂点ポイントを廃棄することを前記プロセッサに行わせる命令を備える。
[その他の実施例３１]
少なくとも１つの頂点ポイントを廃棄することを前記プロセッサに行わせる命令が、前の頂点ポイントと後続の頂点ポイントとによって形成される直線上に実質的にある少なくとも１つの頂点ポイントを廃棄することを前記プロセッサに行わせる命令を備える、その他の実施例２８に記載のコンピュータ可読媒体。
[その他の実施例３２]
その他の実施例２８に記載のコンピュータ可読媒体、ただし、前記複数の頂点ポイントの各々の前記位置座標を分析することを前記プロセッサに実行させる命令が、下記動作を前記プロセッサに実行させる命令を備える：
第１の頂点ポイントの位置座標と第２の頂点ポイントの位置座標との間の第１の傾きを計算すること；および、
前記第２の頂点ポイントの前記位置座標と第３の頂点ポイントの位置座標との間の第２の傾きを計算すること、
なお、少なくとも１つの頂点ポイントを廃棄することを前記プロセッサに実行させる命令は、前記第１および第２の計算された傾きが実質的に同じであるとき、前記第２の頂点ポイントを廃棄することを前記プロセッサに行わせる命令を備える。
[その他の実施例３３]
その他の実施例３２に記載のコンピュータ可読媒体、ただし、
前記複数の頂点ポイントの各々の前記位置座標を分析することを前記プロセッサに実行させる命令は、前記第１の頂点ポイントの前記位置座標を前記第２の頂点ポイントの前記位置座標と比較することを前記プロセッサに実行させる命令をさらに備え、
少なくとも１つの頂点ポイントを廃棄することを前記プロセッサに行わせる命令は、前記第１および第２の位置座標が実質的に同じであるとき、前記第２の頂点ポイントを廃棄することを前記プロセッサに実行させる命令を備える。
[その他の実施例３４]
前記複数の頂点ポイントにおける現在の頂点ポイントの順序位置を示すインデックス値を得ることを前記プロセッサに実行させる命令をさらに備え、前記位置座標を前記判断することを前記プロセッサに実行させる命令が、前記インデックス値に応じて複数の頂点ポイントの各々についてディスプレイ座標空間における位置座標を判断することを前記プロセッサに実行させる命令を備える、その他の実施例２８に記載のコンピュータ可読媒体。
[その他の実施例３５]
前記インデックス値を得ることを前記プロセッサに実行させる命令が、前記インデックス値をグラフィックス処理ユニット（ＧＰＵ）のカウンタから得ることを前記プロセッサに実行させる命令を備える、その他の実施例３４に記載のコンピュータ可読媒体。
[その他の実施例３６]
前記曲線をディスプレイに提示するために前記曲線をレンダリングすることを前記プロセッサに実行させる命令をさらに備える、その他の実施例２８に記載のコンピュータ可読媒体。
[その他の実施例３７]
その他の実施例２８に記載のコンピュータ可読媒体、ただし、
前記複数の頂点ポイントの各々の前記位置座標を分析することを前記プロセッサに行わせる命令は、３次元（３Ｄ）グラフィックス処理ユニット（ＧＰＵ）の頂点シェーダを用いて、前記複数の頂点ポイントの各々の前記位置座標を分析することを前記プロセッサに実行させる命令を備え、
前記複数の頂点ポイントのうちの少なくとも１つを廃棄することを前記プロセッサに実行させる命令は、前記３Ｄ  ＧＰＵの前記頂点シェーダを用いて、前記分析に基づいて前記複数の頂点ポイントのうちの少なくとも１つを廃棄することを前記プロセッサに実行させる命令を備える。
[その他の実施例３８]
下記手段を備えるデバイス：
レンダリングすべき曲線上にある複数の頂点ポイントの各々についての位置座標を判断するための手段；
前記複数の頂点ポイントの少なくとも一部分の前記位置座標を分析するための手段；および、
前記分析に基づいて前記複数の頂点ポイントのうちの少なくとも１つを廃棄するための手段。
[その他の実施例３９]
その他の実施例３８に記載のデバイス、ただし、
前記分析手段は、前記複数の頂点ポイントのうちの第１の頂点ポイントの第１の位置座標を前記複数の頂点ポイントのうちの第２の頂点ポイントの第２の位置座標と比較し、前記第１の頂点ポイントが前記第２の頂点ポイントの直前にあり、
前記廃棄手段は、前記第１および第２の位置座標が実質的に同じであるとき、前記第２の頂点ポイントを廃棄する。
[その他の実施例４０]
その他の実施例３９に記載のデバイス、ただし、
前記分析手段は、前記複数の頂点ポイントのうちの第３の頂点ポイントの第３の位置座標を前記第２の位置座標と比較し、前記第２の頂点ポイントが前記第３の頂点ポイントの直前にあり、
前記廃棄手段は、前記第２および第３の位置座標が実質的に同じであるとき、前記第３の頂点ポイントを廃棄する。
[その他の実施例４１]
前記第１および第２の位置座標が実質的に同じでないとき、前記第２の頂点ポイントの前記位置座標を出力するための手段をさらに備え、
前記出力するための手段は、前記第２および第３の位置座標が実質的に同じでないとき、前記第３の頂点ポイントの前記位置座標を同時に出力する、
その他の実施例４０に記載のデバイス。
[その他の実施例４２]
前記廃棄手段が、前の頂点ポイントと後続の頂点ポイントとによって形成される直線上に実質的にある少なくとも１つの頂点ポイントを廃棄する、その他の実施例３８に記載のデバイス。
[その他の実施例４３]
その他の実施例３８に記載のデバイス、ただし、
前記分析手段は、第１の頂点ポイントの位置座標と第２の頂点ポイントの位置座標との間の第１の傾きを計算し、前記第２の頂点ポイントの前記位置座標と第３の頂点ポイントの位置座標との間の第２の傾きを計算し、
前記廃棄手段は、前記第１および第２の計算された傾きが実質的に等しいとき、前記第２の頂点ポイントを廃棄する。
[その他の実施例４４]
その他の実施例４３に記載のデバイス、ただし、
前記分析手段は、前記第１の頂点ポイントの前記位置座標を前記第２の頂点ポイントの前記位置座標と比較し、
前記廃棄手段は、前記第１および第２の位置座標が実質的に同じであるとき、前記第２の頂点ポイントを廃棄する。
[その他の実施例４５]
前記複数の頂点ポイントにおける現在の頂点ポイントの順序位置を示すインデックス値を得るための手段をさらに備え、前記判断手段が、前記インデックス値に応じて複数の頂点ポイントの各々についてディスプレイ座標空間における位置座標を判断する、その他の実施例３８に記載のデバイス。
[その他の実施例４６]
前記インデックス値をグラフィックス処理ユニット（ＧＰＵ）内で発生するための手段をさらに備える、その他の実施例４５に記載のデバイス。
[その他の実施例４７]
前記曲線をディスプレイに提示するために前記曲線をレンダリングするための手段をさらに備える、その他の実施例３８に記載のデバイス。
[その他の実施例４８]
前記曲線が２次元曲線であり、前記廃棄手段が３次元（３Ｄ）グラフィックス処理ユニット（ＧＰＵ）の頂点シェーダを備える、その他の実施例３８に記載のデバイス。
【図１】
0005270004.tif 000005
【図２】
0005270004.tif 000006
【図３】
0005270004.tif 000007
【図４】
0005270004.tif 000008
【図５】
0005270004.tif 000009
【図６】
0005270004.tif 000010