(57)【要約】一般に、本開示は、１組のレンダリングされたグラフィックス面を単一のグラフィックスフレーム上へとオーバーレイする、または組み合わせるための様々な技法を説明している。一例のデバイスは、デバイスが、レンダリングされたグラフィックス面のうちのどれかをディスプレイに対して出力することに先立って、複数のレンダリングされたグラフィックス面のおのおのについての面レベルを選択する第１のプロセッサ、を含んでいる。デバイスは、レンダリングされたグラフィックス面を取り出し、選択された面レベルのおのおのに従って、レンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイし、そしてグラフィックスフレームをディスプレイに対して出力する第２のプロセッサ、をさらに含んでいる。
2010527077.tif 000002
【特許請求の範囲】
【請求項１】
デバイスが、レンダリングされたグラフィックス面のどれかをディスプレイに対して出力することに先立って、複数の前記レンダリングされたグラフィックス面のおのおのについて面レベルを選択する第１のプロセッサと、
前記レンダリングされたグラフィックス面を取り出し、前記選択された面レベルのおのおのに従って前記レンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイし、そして前記グラフィックスフレームを前記ディスプレイに対して出力する第２のプロセッサと、
を備えるデバイス。
【請求項２】
前記第１のプロセッサと、前記第２のプロセッサとは、別々のプロセッサであり、そして
前記第１のプロセッサと前記第２のプロセッサは、おのおの、グラフィックスプロセッサ、ディスプレイプロセッサ、および制御プロセッサ、からなる群から選択される、請求項１に記載のデバイス。
【請求項３】
１つまたは複数の面バッファと、
前記レンダリングされたグラフィックス面をレンダリングし、そして前記レンダリングされたグラフィックス面を前記１つまたは複数の面バッファに記憶する第３のプロセッサと、
をさらに備え、
前記第２のプロセッサは、前記レンダリングされたグラフィックス面を前記１つまたは複数の面バッファから取り出す、
請求項１に記載のデバイス。
【請求項４】
前記第３のプロセッサは、加速された３次元（３Ｄ）グラフィックスパイプラインを備えるグラフィックスプロセッサを備え、そして
前記第１のプロセッサは、汎用処理パイプラインを備える制御プロセッサを備える、
請求項３に記載のデバイス。
【請求項５】
前記レンダリングされたグラフィックス面は、第１の組のレンダリングされたグラフィックス面を備え、
前記第１のプロセッサは、第２の組のレンダリングされたグラフィックス面をレンダリングし、そして前記デバイスが、前記レンダリングされたグラフィックス面のどれかを前記ディスプレイに対して出力することに先立って、前記第２の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のおのおのについて面レベルを選択し、そして
前記第２のプロセッサは、前記選択された面レベルに従って前記第２の組のレンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイする、
請求項３に記載のデバイス。
【請求項６】
前記第１の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のうちの少なくとも１つは、オンスクリーン面を備え、そして
前記第２の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のおのおのは、オフスクリーン面を備える、
請求項５に記載のデバイス。
【請求項７】
前記第１の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のおのおのは、３次元（３Ｄ）面を備え、そして
前記第２の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のうちの少なくとも１つは、２次元（２Ｄ）面、およびビデオ面、からなる群から選択される面を備える、
請求項５に記載のデバイス。
【請求項８】
前記第３のプロセッサは、プリミティブ上でオペレーションを実行するプリミティブ処理ユニットと、ピクセルオペレーションを実行するピクセル処理ユニットと、を備え、そして
前記第２のプロセッサは、限られた１組の前記ピクセルオペレーションを実行する、
請求項３に記載のデバイス。
【請求項９】
前記第２のプロセッサによって実行される固有のピクセルオペレーションの数は、前記ピクセル処理ユニットによって実行される固有のピクセルオペレーションの数よりも少ない、請求項８に記載のデバイス。
【請求項１０】
前記第２のプロセッサは、上書きブロックを備え、そして
前記レンダリングされたグラフィックス面が、オーバーラップするときに、前記上書きブロックは、最高の面レベルを有する前記レンダリングされたグラフィックス面のうちの１つを選択し、そして、前記レンダリングされたグラフィックス面のうちの前記選択された１つが、前記レンダリングされたグラフィックス面のうちのオーバーラップする部分について表示されるように、前記グラフィックスフレームをフォーマットする、
請求項１に記載のデバイス。
【請求項１１】
前記第２のプロセッサは、１つまたは複数の複合モードに応じて前記レンダリングされたグラフィックス面を組み合わせることにより少なくとも部分的に前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイし、前記１つまたは複数の複合モードは、一定アルファブレンディングを有するカラーキーイング、一定アルファブレンディングを有さないカラーキーイング、全面一定アルファブレンディング、または全面ピクセル毎アルファブレンディング、のうちの少なくとも１つを含む、請求項１に記載のデバイス。
【請求項１２】
前記第１のプロセッサは、複数のレイヤを有するオーバーレイスタックを生成し、そして前記オーバーレイスタック内の個々のレイヤに対して前記レンダリングされたグラフィックス面のおのおのをバインドし、
前記第２のプロセッサは、前記オーバーレイスタックに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイする、
請求項１に記載のデバイス。
【請求項１３】
前記オーバーレイスタックの中の前記レイヤのおのおのは、固有のレイヤレベルを有し、そして
前記グラフィックスフレームが、前記ディスプレイ上に表示されるときに、前記オーバーレイスタック内の第１のレイヤレベルを有するレイヤにバインドされるレンダリングされたグラフィックス面は、前記第１のレイヤレベルよりも低いレイヤレベルを有するレイヤにバインドされるレンダリングされたグラフィックス面よりも、前記ディスプレイの閲覧者に対して近くに見える、
請求項１２に記載のデバイス。
【請求項１４】
前記第１のプロセッサは、表示されるべき各グラフィックスフレームについて前記オーバーレイスタック内の個々のレイヤを選択的にイネーブルし、そしてディスエーブルし、
前記オーバーレイスタック内の第１のレイヤが、第１のグラフィックスフレームについてイネーブルされるときに、前記第２のプロセッサは、前記第１のグラフィックスフレームを生成するために前記第１のレイヤにバインドされる前記レンダリングされたグラフィックス面のおのおのを処理し、そして
前記第１のレイヤが、前記第１のグラフィックスフレームについてディスエーブルされるときは、前記第２のプロセッサは、前記第１のグラフィックスフレームを生成するために前記第１のレイヤにバインドされる任意のレンダリングされたグラフィックス面を処理しない、
請求項１２に記載のデバイス。
【請求項１５】
前記第１のプロセッサは、表示されるべき各グラフィックスフレームについて個々のレンダリングされたグラフィックス面を選択的にイネーブルし、そしてディスエーブルし、
前記複数のレンダリングされたグラフィックス面内の第１のレンダリングされたグラフィックス面が、第１のグラフィックスフレームについてイネーブルされるときに、前記第２のプロセッサは、前記第１のグラフィックスフレームを生成するために前記第１のレンダリングされたグラフィックス面を処理し、
前記第１のレンダリングされたグラフィックス面が、前記第１のグラフィックスフレームについてディスエーブルされるときは、前記第２のプロセッサは、前記第１のグラフィックスフレームを生成するために前記第１のレンダリングされたグラフィックス面を処理しない、
請求項１に記載のデバイス。
【請求項１６】
前記レンダリングされたグラフィックス面は、第１の組のレンダリングされたグラフィックス面を備え、前記デバイスは、
第１の面バッファと、
第２の面バッファと、
前記第１の組のレンダリングされたグラフィックス面を生成し、そして前記第１の組のレンダリングされたグラフィックス面を前記第１の面バッファに記憶する第１のグラフィックスプロセッサと、
第２の組のレンダリングされたグラフィックス面を生成し、そして前記第２の組のレンダリングされたグラフィックス面を前記第２の面バッファに記憶する第２のグラフィックスプロセッサと、
をさらに備え、
前記第１のプロセッサは、前記デバイスが、前記レンダリングされたグラフィックス面のどれかを前記ディスプレイに対して出力することに先立って前記第２の組のレンダリングされたグラフィックス面内の前記レンダリングされたグラフィックス面のおのおのについて面レベルを選択し、そして
前記第２のプロセッサは、前記第１の組のレンダリングされたグラフィックス面を前記第１の面バッファから取り出し、前記第２の組のレンダリングされたグラフィックス面を前記第２の面バッファから取り出し、そして前記選択された面レベルのおのおのに従って前記第１の組のレンダリングされたグラフィックス面と、前記第２の組のレンダリングされたグラフィックス面とを前記グラフィックスフレーム上へとオーバーレイする、
請求項１に記載のデバイス。
【請求項１７】
前記第１のグラフィックスプロセッサは、加速された３次元（３Ｄ）グラフィックスパイプラインを備え、そして
前記第２のグラフィックスプロセッサは、加速された２次元（２Ｄ）グラフィックスパイプラインを備える、
請求項１６に記載のデバイス。
【請求項１８】
前記デバイスはワイヤレス通信デバイスハンドセットを備える、請求項１に記載のデバイス。
【請求項１９】
前記デバイスは１つまたは複数の集積回路デバイスを備える、請求項１に記載のデバイス。
【請求項２０】
複数のレンダリングされたグラフィックス面を取り出すことと、
前記レンダリングされたグラフィックス面のどれかをディスプレイに対して出力することに先立って前記レンダリングされたグラフィックス面のおのおのについて面レベルを選択することと、
前記選択された面レベルのおのおのに従って前記レンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイすることと、
前記グラフィックスフレームを前記ディスプレイに対して出力することと、
を備える方法。
【請求項２１】
前記レンダリングされたグラフィックス面を生成することと、
前記レンダリングされたグラフィックス面を１つまたは複数の面バッファに記憶することと、
をさらに備え、
前記複数のレンダリングされたグラフィックス面を取り出すことは、前記複数のレンダリングされたグラフィックス面を前記１つまたは複数の面バッファから取り出すことを備える、
請求項２０に記載の方法。
【請求項２２】
前記レンダリングされたグラフィックス面は、第１の組のレンダリングされたグラフィックス面を備え、そして前記方法は、
第１のプロセッサを用いて前記第１の組のレンダリングされたグラフィックス面を生成することと；
第２のプロセッサを用いて第２の組のレンダリングされたグラフィックス面を生成することと、なお前記第１のプロセッサと前記第２のプロセッサとは、別々のプロセッサである；
前記第２の組のレンダリングされたグラフィックス面の中のおのおののレンダリングされたグラフィックス面について面レベルを選択することと；
前記選択された面レベルに従って前記第２の組のレンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイすることと；
をさらに備える、
請求項２０に記載の方法。
【請求項２３】
前記第１の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のうちの少なくとも１つは、オンスクリーン面を備え、そして
前記第２の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のおのおのは、オフスクリーン面を備える、
請求項２２に記載の方法。
【請求項２４】
前記第１の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のおのおのは、３次元（３Ｄ）面を備え、そして
前記第２の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のうちの少なくとも１つは、２次元（２Ｄ）面、およびビデオ面、からなる群から選択される面を備える、
請求項２２に記載の方法。
【請求項２５】
前記選択された面レベルのおのおのに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイすることは、
前記レンダリングされたグラフィックス面が、オーバーラップするときに、最高の面レベルを有する前記レンダリングされたグラフィックス面のうちの１つを選択することと、
前記レンダリングされたグラフィックス面のうちの前記選択された１つが、前記レンダリングされたグラフィックス面のオーバーラップする部分について表示されるように、前記グラフィックスフレームをフォーマットすることと、
を備える、
請求項２０に記載の方法。
【請求項２６】
前記選択された面レベルのおのおのに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイすることは、
１つまたは複数の複合モードに応じて前記レンダリングされたグラフィックス面を組み合わせることを備え、前記１つまたは複数の複合モードは、一定アルファブレンディングを有するカラーキーイング、一定アルファブレンディングを有さないカラーキーイング、全面一定アルファブレンディング、または全面ピクセル毎アルファブレンディング、のうちの少なくとも１つを含む、
請求項２０に記載の方法。
【請求項２７】
複数のレイヤを有するオーバーレイスタックを生成することと、
前記オーバーレイスタック内の個々のレイヤに対して前記レンダリングされたグラフィックス面のおのおのをバインドすることと、
前記オーバーレイスタックに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイすることと、
をさらに備える請求項２０に記載の方法。
【請求項２８】
前記オーバーレイスタックの中の前記レイヤのおのおのは、固有のレイヤレベルを有し、そして前記オーバーレイスタックに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイすることは、
前記グラフィックスフレームが、前記ディスプレイ上で表示されるときに、前記オーバーレイスタック内の第１のレイヤレベルを有するレイヤに対してバインドされるレンダリングされたグラフィックス面が、前記第１のレイヤレベルよりも低いレイヤレベルを有するレイヤにバインドされるレンダリングされたグラフィックス面よりも前記ディスプレイの閲覧者に対して近くに見えるように、前記グラフィックスフレームをフォーマットすること、を備える、
請求項２７に記載の方法。
【請求項２９】
表示されるべき各グラフィックスフレームについて前記オーバーレイスタック内の個々のレイヤを選択的にイネーブルすることと、
第１のレイヤが、第１のグラフィックスフレームについてイネーブルされるときに、前記第１のグラフィックスフレームを生成するために前記オーバーレイスタック内の前記第１のレイヤにバインドされる前記レンダリングされたグラフィックス面のおのおのを処理することと、
前記第１のレイヤが、前記第１のグラフィックスフレームについてディスエーブルされるときに、前記第１のグラフィックスフレームを生成するために前記第１のレイヤにバインドされる任意のレンダリングされたグラフィックス面を処理しないことと、
をさらに備える請求項２７に記載の方法。
【請求項３０】
表示されるべき各グラフィックスフレームについて個々のレンダリングされたグラフィックス面を選択的にイネーブルすることと、
第１のレンダリングされたグラフィックス面が、第１のグラフィックスフレームについてイネーブルされるときに、第１のグラフィックスフレームを生成するために第１のレンダリングされたグラフィックス面を処理することと、
前記第１のレンダリングされたグラフィックス面が、前記第１のグラフィックスフレームについてディスエーブルされるときに、前記第１のグラフィックスフレームを生成するために前記第１のレンダリングされたグラフィックス面を処理しないことと、
をさらに備える請求項２７に記載の方法。
【請求項３１】
前記レンダリングされたグラフィックス面は、第１の組のレンダリングされたグラフィックス面を備え、そして前記方法は、
第１のグラフィックスプロセッサを用いて前記第１の組のレンダリングされたグラフィックス面を生成することと、
第２のグラフィックスプロセッサを用いて第２の組のレンダリングされたグラフィックス面を生成することと、
前記第１の組のレンダリングされたグラフィックス面を第１の面バッファに記憶することと、
前記第２の組のレンダリングされたグラフィックス面を第２の面バッファに記憶することと、
前記レンダリングされたグラフィックス面のどれかを前記ディスプレイに対して出力することに先立って前記第２の組のレンダリングされたグラフィックス面内のおのおののレンダリングされたグラフィックス面について面レベルを選択することと、
前記第１の組のレンダリングされたグラフィックス面を前記第１の面バッファから取り出すことと、
前記第２の組のレンダリングされたグラフィックス面を前記第２の面バッファから取り出すことと、
前記選択された面レベルのおのおのに従って前記第１の組のレンダリングされたグラフィックス面と、前記第２の組のレンダリングされたグラフィックス面とを前記グラフィックスフレーム上へとオーバーレイすることと、
をさらに備える、
請求項２０に記載の方法。
【請求項３２】
前記第１のグラフィックスプロセッサは、加速された３次元（３Ｄ）グラフィックスパイプラインを備え、そして
前記第２のグラフィックスプロセッサは、加速された２次元（２Ｄ）グラフィックスパイプラインを備える、
請求項３１に記載の方法。
【請求項３３】
複数のレンダリングされたグラフィックス面を取り出すための手段と、
前記レンダリングされたグラフィックス面のどれかをディスプレイに対して出力することに先立って前記レンダリングされたグラフィックス面のおのおのについて面レベルを選択するための手段と、
前記選択された面レベルのおのおのに従って前記レンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイするための手段と、
前記グラフィックスフレームを前記ディスプレイに対して出力するための手段と、
を備えるデバイス。
【請求項３４】
前記レンダリングされたグラフィックス面を生成するための手段と、
前記レンダリングされたグラフィックス面を１つまたは複数の面バッファに記憶するための手段と、
をさらに備え、
前記複数のレンダリングされたグラフィックス面を取り出すための前記手段は、前記複数のレンダリングされたグラフィックス面を前記１つまたは複数の面バッファから取り出すための手段を備える、
請求項３３に記載のデバイス。
【請求項３５】
前記レンダリングされたグラフィックス面は、第１の組のレンダリングされたグラフィックス面を備え、そして前記デバイスは、
第１のプロセッサを用いて前記第１の組のレンダリングされたグラフィックス面を生成するための手段と；
第２のプロセッサを用いて第２の組のレンダリングされたグラフィックス面を生成するための手段と、なお前記第１のプロセッサと前記第２のプロセッサとは、別々のプロセッサである；
前記第２の組のレンダリングされたグラフィックス面の中のおのおののレンダリングされたグラフィックス面について面レベルを選択するための手段と；
前記選択された面レベルに従って前記第２の組のレンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイするための手段と；
をさらに備える、
請求項３３に記載のデバイス。
【請求項３６】
前記第１の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のうちの少なくとも１つは、オンスクリーン面を備え、そして
前記第２の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のおのおのは、オフスクリーン面を備える、
請求項３５に記載のデバイス。
【請求項３７】
前記第１の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のおのおのは、３次元（３Ｄ）面を備え、そして
前記第２の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のうちの少なくとも１つは、２次元（２Ｄ）面、およびビデオ面、からなる群から選択される面、を備える、
請求項３５に記載のデバイス。
【請求項３８】
前記選択された面レベルのおのおのに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイするための前記手段は、
前記レンダリングされたグラフィックス面が、オーバーラップするときに、最高の面レベルを有する前記レンダリングされたグラフィックス面のうちの１つを選択するための手段と、
前記レンダリングされたグラフィックス面のうちの前記選択された１つが、前記レンダリングされたグラフィックス面のオーバーラップする部分について表示されるように、前記グラフィックスフレームをフォーマットするための手段と、
を備える、
請求項３３に記載のデバイス。
【請求項３９】
前記選択された面レベルのおのおのに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイするための前記手段は、
１つまたは複数の複合モードに応じて前記レンダリングされたグラフィックス面を組み合わせるための手段、
を備え、前記１つまたは複数の複合モードは、一定アルファブレンディングを有するカラーキーイング、一定アルファブレンディングを有さないカラーキーイング、全面一定アルファブレンディング、または全面ピクセル毎アルファブレンディング、のうちの少なくとも１つを含む、
請求項３３に記載のデバイス。
【請求項４０】
複数のレイヤを有するオーバーレイスタックを生成するための手段と、
前記オーバーレイスタック内の個々のレイヤに対して前記レンダリングされたグラフィックス面のおのおのをバインドするための手段と、
前記オーバーレイスタックに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイするための手段と、
をさらに備える請求項３３に記載のデバイス。
【請求項４１】
前記オーバーレイスタックの中の前記レイヤのおのおのは、固有のレイヤレベルを有し、そして前記オーバーレイスタックに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイするための前記手段は、
前記グラフィックスフレームが、前記ディスプレイ上で表示されるときに、前記オーバーレイスタック内の第１のレイヤレベルを有するレイヤに対してバインドされるレンダリングされたグラフィックス面が、前記第１のレイヤレベルよりも低いレイヤレベルを有するレイヤにバインドされるレンダリングされたグラフィックス面よりも前記ディスプレイの閲覧者に対して近くに見えるように、前記グラフィックスフレームをフォーマットするための手段、
を備える、
請求項４０に記載のデバイス。
【請求項４２】
表示されるべき各グラフィックスフレームについて前記オーバーレイスタック内の個々のレイヤを選択的にイネーブルするための手段と、
第１のレイヤが、第１のグラフィックスフレームについてイネーブルされるときに、前記第１のグラフィックスフレームを生成するために前記オーバーレイスタック内の前記第１のレイヤにバインドされる前記レンダリングされたグラフィックス面のおのおのを処理し、そして前記第１のレイヤが、前記第１のグラフィックスフレームについてディスエーブルされるときに、前記第１のグラフィックスフレームを生成するために前記第１のレイヤにバインドされる任意のレンダリングされたグラフィックス面を処理しないための手段と、
をさらに備える請求項４０に記載のデバイス。
【請求項４３】
表示されるべき各グラフィックスフレームについて個々のレンダリングされたグラフィックス面を選択的にイネーブルするための手段と、
第１のレンダリングされたグラフィックス面が、第１のグラフィックスフレームについてイネーブルされるときに、第１のグラフィックスフレームを生成するために第１のレンダリングされたグラフィックス面を処理し、そして前記第１のレンダリングされたグラフィックス面が、前記第１のグラフィックスフレームについてディスエーブルされるときに、前記第１のグラフィックスフレームを生成するために前記第１のレンダリングされたグラフィックス面を処理しないための手段と、
をさらに備える請求項３３に記載のデバイス。
【請求項４４】
前記レンダリングされたグラフィックス面は、第１の組のレンダリングされたグラフィックス面を備え、そして前記デバイスは、
第１のグラフィックスプロセッサを用いて前記第１の組のレンダリングされたグラフィックス面を生成するための手段と、
第２のグラフィックスプロセッサを用いて第２の組のレンダリングされたグラフィックス面を生成するための手段と、
前記第１の組のレンダリングされたグラフィックス面を第１の面バッファに記憶するための手段と、
前記第２の組のレンダリングされたグラフィックス面を第２の面バッファに記憶するための手段と、
前記デバイスが、前記レンダリングされたグラフィックス面のどれかを前記ディスプレイに対して出力することに先立って前記第２の組のレンダリングされたグラフィックス面内のおのおののレンダリングされたグラフィックス面について面レベルを選択するための手段と、
前記第１の組のレンダリングされたグラフィックス面を前記第１の面バッファから取り出すための手段と、
前記第２の組のレンダリングされたグラフィックス面を前記第２の面バッファから取り出すための手段と、
前記選択された面レベルのおのおのに従って前記第１の組のレンダリングされたグラフィックス面と、前記第２の組のレンダリングされたグラフィックス面とを前記グラフィックスフレーム上へとオーバーレイするための手段と、
をさらに備える、
請求項３３に記載のデバイス。
【請求項４５】
前記第１のグラフィックスプロセッサは、加速された３次元（３Ｄ）グラフィックスパイプラインを備え、そして
前記第２のグラフィックスプロセッサは、加速された２次元（２Ｄ）グラフィックスパイプラインを備える、
請求項４４に記載のデバイス。
【請求項４６】
１つまたは複数のプロセッサに、
複数のレンダリングされたグラフィックス面を取り出させ、
前記レンダリングされたグラフィックス面のどれかをディスプレイに対して出力することに先立って前記レンダリングされたグラフィックス面のおのおのについて面レベルを選択させ、
前記選択された面レベルのおのおのに従って前記レンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイさせ、そして
前記グラフィックスフレームを前記ディスプレイに対して出力させる、
命令
を備えるコンピュータ可読媒体。
【請求項４７】
前記１つまたは複数のプロセッサに、
前記レンダリングされたグラフィックス面を生成させ、そして
前記レンダリングされたグラフィックス面を１つまたは複数の面バッファに記憶させる、
命令をさらに備え、
前記１つまたは複数のプロセッサに、前記複数のレンダリングされたグラフィックス面を取り出させる前記命令は、前記１つまたは複数のプロセッサに、前記複数のレンダリングされたグラフィックス面を前記１つまたは複数の面バッファから取り出させる命令を備える、
請求項４６に記載のコンピュータ可読媒体。
【請求項４８】
前記レンダリングされたグラフィックス面は、第１の組のレンダリングされたグラフィックス面を備え、そして前記コンピュータ可読媒体は、前記１つまたは複数のプロセッサに、
前記第１の組のレンダリングされたグラフィックス面を生成させ、
第２の組のレンダリングされたグラフィックス面を生成させ、
前記第２の組のレンダリングされたグラフィックス面の中のおのおののレンダリングされたグラフィックス面について面レベルを選択させ、そして
前記選択された面レベルに従って前記第１の組のレンダリングされたグラフィックス面と、前記第２の組のレンダリングされたグラフィックス面とを前記グラフィックスフレーム上へとオーバーレイさせる、
命令、
をさらに備える請求項４６に記載のコンピュータ可読媒体。
【請求項４９】
前記第１の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のうちの少なくとも１つは、オンスクリーン面を備え、そして
前記第２の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のおのおのは、オフスクリーン面を備える、
請求項４８に記載のコンピュータ可読媒体。
【請求項５０】
前記第１の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のおのおのは、３次元（３Ｄ）面を備え、そして
前記第２の組のレンダリングされたグラフィックス面の中の前記レンダリングされたグラフィックス面のうちの少なくとも１つは、２次元（２Ｄ）面と、ビデオ面と、からなる群から選択される面を備える、
請求項４８に記載のコンピュータ可読媒体。
【請求項５１】
前記１つまたは複数のプロセッサに、前記選択された面レベルのおのおのに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイさせる前記命令は、前記１つまたは複数のプロセッサに、
前記レンダリングされたグラフィックス面が、オーバーラップするときに、最高の面レベルを有する前記レンダリングされたグラフィックス面のうちの１つを選択させ、そして
前記レンダリングされたグラフィックス面のうちの前記選択された１つが、前記レンダリングされたグラフィックス面のオーバーラップする部分について表示されるように、前記グラフィックスフレームをフォーマットさせる、
命令を備える、
請求項４６に記載のコンピュータ可読媒体。
【請求項５２】
前記１つまたは複数のプロセッサに、前記選択された面レベルのおのおのに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイさせる前記命令は、前記１つまたは複数のプロセッサに、
１つまたは複数の複合モードに応じて前記レンダリングされたグラフィックス面を組み合わせさせる命令を備え、前記１つまたは複数の複合モードは、一定アルファブレンディングを有するカラーキーイング、一定アルファブレンディングを有さないカラーキーイング、全面一定アルファブレンディング、または全面ピクセル毎アルファブレンディング、のうちの少なくとも１つを含む、
請求項４６に記載のコンピュータ可読媒体。
【請求項５３】
前記１つまたは複数のプロセッサに、
複数のレイヤを有するオーバーレイスタックを生成させ、
前記オーバーレイスタック内の個々のレイヤに対して前記レンダリングされたグラフィックス面のおのおのをバインドさせ、そして
前記オーバーレイスタックに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイさせる、
命令、をさらに備える請求項４６に記載のコンピュータ可読媒体。
【請求項５４】
前記オーバーレイスタックの中の前記レイヤのおのおのは、固有のレイヤレベルを有し、そして前記１つまたは複数のプロセッサに、前記オーバーレイスタックに従って前記レンダリングされたグラフィックス面を前記グラフィックスフレーム上へとオーバーレイさせる前記命令は、前記１つまたは複数のプロセッサに、
前記グラフィックスフレームが、前記ディスプレイ上で表示されるときに、前記オーバーレイスタック内の第１のレイヤレベルを有するレイヤに対してバインドされるレンダリングされたグラフィックス面が、前記第１のレイヤレベルよりも低いレイヤレベルを有するレイヤにバインドされるレンダリングされたグラフィックス面よりも前記ディスプレイの閲覧者に対して近くに見えるように、前記グラフィックスフレームをフォーマットさせる、
命令を備える、
請求項５３に記載のコンピュータ可読媒体。
【請求項５５】
前記１つまたは複数のプロセッサに、
表示されるべき各グラフィックスフレームについて前記オーバーレイスタック内の個々のレイヤを選択的にイネーブルさせ、
第１のレイヤが、第１のグラフィックスフレームについてイネーブルされるときに、前記第１のグラフィックスフレームを生成するために前記オーバーレイスタック内の前記第１のレイヤにバインドされる前記レンダリングされたグラフィックス面のおのおのを処理させ、そして
前記第１のレイヤが、前記第１のグラフィックスフレームについてディスエーブルされるときに、前記第１のグラフィックスフレームを生成するために前記第１のレイヤにバインドされる任意のレンダリングされたグラフィックス面を処理させない、
命令をさらに備える、請求項５３に記載のコンピュータ可読媒体。
【請求項５６】
前記１つまたは複数のプロセッサに、
表示されるべき各グラフィックスフレームについて個々のレンダリングされたグラフィックス面を選択的にイネーブルさせ、
第１のレンダリングされたグラフィックス面が、第１のグラフィックスフレームについてイネーブルされるときに、第１のグラフィックスフレームを生成するために第１のレンダリングされたグラフィックス面を処理させ、そして
前記第１のレンダリングされたグラフィックス面が、前記第１のグラフィックスフレームについてディスエーブルされるときに、前記第１のグラフィックスフレームを生成するために前記第１のレンダリングされたグラフィックス面を処理させない、
命令をさらに備える、請求項４６に記載のコンピュータ可読媒体。
【請求項５７】
前記レンダリングされたグラフィックス面は、第１の組のレンダリングされたグラフィックス面を備え、そして前記コンピュータ可読媒体は、前記１つまたは複数のプロセッサに、
第１のグラフィックスプロセッサを用いて前記第１の組のレンダリングされたグラフィックス面を生成させ、
第２のグラフィックスプロセッサを用いて第２の組のレンダリングされたグラフィックス面を生成させ、
前記第１の組のレンダリングされたグラフィックス面を第１の面バッファに記憶させ、
前記第２の組のレンダリングされたグラフィックス面を第２の面バッファに記憶させ、
デバイスが、前記レンダリングされたグラフィックス面のどれかを前記ディスプレイに対して出力することに先立って、前記第２の組のレンダリングされたグラフィックス面内のおのおののレンダリングされたグラフィックス面について面レベルを選択させ、
前記第１の組のレンダリングされたグラフィックス面を前記第１の面バッファから取り出させ、
前記第２の組のレンダリングされたグラフィックス面を前記第２の面バッファから取り出させ、そして
前記選択された面レベルのおのおのに従って前記第１の組のレンダリングされたグラフィックス面と、前記第２の組のレンダリングされたグラフィックス面とを前記グラフィックスフレーム上へとオーバーレイさせる、
命令をさらに備える、
請求項４６に記載のコンピュータ可読媒体。
【請求項５８】
前記第１のグラフィックスプロセッサは、加速された３次元（３Ｄ）グラフィックスパイプラインを備え、そして
前記第２のグラフィックスプロセッサは、加速された２次元（２Ｄ）グラフィックスパイプラインを備える、
請求項５７に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【関連出願】
【０００１】
本願は、全体の内容がここにおいて参照によって組み込まれている２００７年５月７日に出願された米国仮出願第６０／９１６，３０３号の利益を主張するものである。
【技術分野】
【０００２】
本開示は、グラフィックス処理(graphics processing)に関し、より詳細には、レンダリングプロセス(rendering process)後のグラフィックス面(graphics surfaces)のオーバーレイ(overlay)に関する。
【背景】
【０００３】
グラフィックスプロセッサは、ビデオゲーム、グラフィックスプログラム、コンピュータ支援設計(computer-aided design)（ＣＡＤ）アプリケーション、シミュレーションおよび可視化のツール、イメージング(imaging)など、様々なアプリケーションについての２次元(two-dimensional)（２Ｄ）および３次元(three-dimensional)（３Ｄ）の画像をレンダリングする(render)ために広範に使用される。ディスプレイプロセッサは、そのときにそのレンダリングされた出力を表示するために使用されることができる。
【０００４】
これらのアプリケーションにおいて使用されるグラフィックスプロセッサ、ディスプレイプロセッサ、またはマルチメディアプロセッサは、データの並列処理および／またはベクトル処理を実行するように構成されていることができる。ＳＩＭＤ（単一命令(single instruction)、マルチデータ(multiple data)）拡張を有する、あるいは有しない汎用ＣＰＵ（中央演算処理装置(central processing units)）もまた、データを処理するように構成されていることができる。ＳＩＭＤベクトル処理においては、単一命令は、同時に複数のデータ項目に作用する。
【０００５】
ＯｐｅｎＧＬ（登録商標）（オープングラフィックスライブラリ(Open Graphics Library)）は、２Ｄグラフィックスおよび３Ｄグラフィックスを生成するアプリケーションを書くときに使用されることができるクロスプラットフォームＡＰＩ（アプリケーションプログラミングインターフェース(Application Programming Interface)）を定義する標準仕様である。Ｊａｖａ(登録商標)などの他の言語は、それら自体の標準プロセスを通してＯｐｅｎＧＬ  ＡＰＩに対するバインディング(bindings)を定義することができる。ＡＰＩは、グラフィックスアプリケーションにおいてインプリメントされるときに単純なプリミティブからシーン(scenes)を描画するために使用されることができる複数のファンクションを含んでいる。グラフィックスプロセッサと、マルチメディアプロセッサと、汎用ＣＰＵでさえも、ＯｐｅｎＧＬファンクションコール(function calls)を使用して書かれるアプリケーションを実行することができる。ＯｐｅｎＧＬ  ＥＳ（組み込みシステム(embedded systems)）は、モバイル電話、ＰＤＡ、ビデオゲームコンソールなどの組み込みデバイスのために設計されるＯｐｅｎＧＬの変形である。ＯｐｅｎＶＧ（商標）（オープンベクトルグラフィックス(Open Vector Graphics)）は、ハードウェアで加速された２Ｄベクトルグラフィックスについて主として設計された別の標準ＡＰＩである。
【０００６】
ＥＧＬ（商標）（組み込みグラフィックスライブラリ(Embedded Graphics Library)）は、レンダリングＡＰＩ（ＯｐｅｎＧＬ  ＥＳ、オープンＶＧ、いくつかの他の標準マルチメディアＡＰＩなど）と、基礎にあるプラットフォームマルチメディアファシリティとの間のプラットフォームインターフェースレイヤである。ＥＧＬは、グラフィックスコンテキスト管理、レンダリング面生成、およびレンダリング同期化を取り扱うことができ、そして高性能の、ハードウェアで加速された、そして混合モードの２Ｄおよび３Ｄのレンダリングを可能にする。
【０００７】
レンダリング面生成のために、ＥＧＬは、クライアントＡＰＩが描画することができ、そしてクライアントＡＰＩが共用することができるオンスクリーン面(on-screen surfaces)（例えば、ウィンドウ面(window surfaces)）とオフスクリーン面(off-screen surfaces)（例えば、ｐｂｕｆｆｅｒ(pbuffers)、ｐｉｘｍａｐ(pixmaps)）との両方を生成するためのメカニズムを提供する。オンスクリーン面は、一般的にアクティブウィンドウのフレームバッファメモリの中へと直接にレンダリングされる。オフスクリーン面は、一般的に後の使用のためにオフスクリーンバッファの中へとレンダリングされる。ｐｂｕｆｆｅｒは、例えばＯｐｅｎＧＬサーバ側（ドライバ）オペレーションに関連づけられたメモリ空間に記憶されることができるオフスクリーンメモリバッファである。ｐｉｘｍａｐは、例えばクライアントアプリケーションに関連づけられたメモリ空間に一般に記憶されるオフスクリーンメモリエリアである。
【発明の概要】
【０００８】
一般に、本開示は、１組のレンダリングされた、またはあらかじめレンダリングされたグラフィックス面を単一のグラフィックスフレーム上へとオーバーレイする、あるいは組み合わせるための様々な技法を説明している。一態様においては、デバイスは、そのデバイスが、レンダリングされたグラフィックス面のうちのどれかをディスプレイに対して出力することに先立って、複数のレンダリングされたグラフィックス面のおのおのについて面レベル(surface level)を選択する第１のプロセッサを含んでいる。デバイスは、レンダリングされたグラフィックス面を取り出し、選択された面レベルのおのおのに従ってレンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイし、そして結果のグラフィックスフレームをディスプレイに対して出力する第２のプロセッサをさらに含んでいる。
【０００９】
別の態様においては、一方法は、複数のレンダリングされたグラフィックス面を取り出すことを含んでいる。本方法は、レンダリングされたグラフィックス面のどれかをディスプレイに対して出力することに先立って、レンダリングされたグラフィックス面のおのおのについて面レベルを選択することをさらに含んでいる。本方法は、選択された面レベルのおのおのに従って、レンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイすることをさらに含んでいる。本方法は、結果のグラフィックスフレームをディスプレイへと出力することをさらに含んでいる。
【００１０】
追加の一態様においては、コンピュータ可読媒体は、１つまたは複数のプログラマブルプロセッサに、複数のレンダリングされたグラフィックス面を取り出させ、レンダリングされたグラフィックス面のどれかをディスプレイに対して出力することに先立ってレンダリングされたグラフィックス面のおのおのについて面レベルを選択させ、選択された面レベルのおのおのに従って、レンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイさせ、そしてその結果のグラフィックスフレームをディスプレイに対して出力させるための命令、を含んでいる。
【００１１】
本開示の１つまたは複数の態様の詳細は、添付図面と、下記の説明とにおいて説明される。他の特徴、目的、および利点は、説明および図面から、そして特許請求の範囲から明らかであろう。
【図面の簡単な説明】
【００１２】
【図１】図１は、１組のレンダリングされた、またはあらかじめレンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイするために使用されることができる１例のデバイスを示す、ブロック図である。
【図２】図２は、図１のデバイス内に記憶されたレンダリングされた面についての一例の面プロファイルを示すブロック図である。
【図３Ａ】図３Ａは、図１のデバイス内で使用されることができる一例のオーバーレイスタックを示すブロック図である。
【図３Ｂ】図３Ｂは、図１のデバイス内で使用されることができる別の例のオーバーレイスタックを示すブロック図である。
【図３Ｃ】図３Ｃは、図３Ｂのオーバーレイスタックの中で使用されることができる一例のレイヤを示すブロック図である。
【図４Ａ】図４Ａは、オーバーレイスタックと、オーバーレイレイヤとアンダーレイレイヤとベースレイヤとの間の関係と、を示す概念図である。
【図４Ｂ】図４Ｂは、図４Ａのオーバーレイスタックの中で使用される一例のレイヤをより詳細に示している。
【図５Ａ】図５Ａは、図１に示されるＡＰＩライブラリのさらなる詳細を示すブロック図である。
【図５Ｂ】図５Ｂは、図１に示されるドライバのさらなる詳細を示すブロック図である。
【図６】図６は、１組のレンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイし、または組み合わせるために使用されることができる別の例のデバイスを示すブロック図である。
【図７】図７は、１組のレンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイする、または組み合わせる、ために使用されることができる２Ｄグラフィックスプロセッサと３Ｄグラフィックスプロセッサとの両方を有する一例のデバイスを示すブロック図である。
【図８】図８は、レンダリングされたグラフィックス面をオーバーレイし、または組み合わせるための一方法のフローチャートである。
【図９】図９は、レンダリングされたグラフィックス面をオーバーレイし、または組み合わせるための別の方法のフローチャートである。
【詳細な説明】
【００１３】
一般に、本開示は、１組のレンダリングされ、またはあらかじめレンダリングされたグラフィックス面を単一のグラフィックスフレーム上へとオーバーレイし、あるいは組み合わせるための様々な技法を説明している。グラフィックス面は、２次元（２Ｄ）面、３次元（３Ｄ）面、および／またはビデオ面とすることができる。２Ｄ面は、ＯｐｅｎＶＧなど２Ｄ  ＡＰＩのファンクションをインプリメントするソフトウェアまたはハードウェアによって生成されることができる。３Ｄ面は、ＯｐｅｎＧＬ  ＥＳなど３Ｄ  ＡＰＩのファンクションをインプリメントするソフトウェアまたはハードウェアによって生成されることができる。ビデオ面は、例えばＩＴＵ  Ｈ．２６４またはＭＰＥＧ４（ムービングピクチャエキスパートグループバージョン４(Moving Picture Experts Group version 4)）準拠のビデオデコーダなどのビデオデコーダによって生成されることができる。レンダリングされたグラフィックス面は、ウィンドウ面などのオンスクリーン面、またはｐｂｕｆｆｅｒ面やｐｉｘｍａｐ面などのオフスクリーン面とすることができる。これらの面のおのおのは、静止画として、あるいはビデオや合成アニメーションなど１組の動画の一部分として表示されることができる。本開示において、あらかじめレンダリングされたグラフィックス面は、（１）レンダリングされ、アプリケーションプログラムによって画像ファイルに保存され、そしてその後にさらなる処理を有し、または有せずにグラフィックスアプリケーションによって画像ファイルからロードされることができるコンテンツ、あるいは（２）グラフィックスアプリケーションの初期化プロセスの一部分として、但しグラフィックスアプリケーションの主要なアニメーションランタイムループ中ではなく、グラフィックスアプリケーションによってレンダリングされる画像、を意味することができる。さらに、レンダリングされたグラフィックス面は、あらかじめレンダリングされたグラフィックス面、あるいはレンダリングされたデータを定義し、または含む任意の種類のデータ構造、を意味することができる。
【００１４】
一態様においては、各グラフィックス面は、面に関連づけられた面レベルを有することができる。面レベルは、各グラフィックス面が、グラフィックスフレーム上へとオーバーレイされるレベルを決定する。面レベルは、いくつかの場合に、任意の番号として定義されることができ、ここで番号が高ければ高いほど、面は、表示されるグラフィックスフレーム上でより高く表示されることになる。言い換えれば、より高い面レベルを有する面は、ディスプレイの閲覧者にとってより近くに見えることができる。すなわち、より高い面レベルを有する面に含まれるオブジェクトは、より低い面レベルを有する面に含まれる他のオブジェクトの前に見えることができる。簡単な一例として、デスクトップコンピュータ上で使用される背景画像、または「壁紙(wallpaper)」は、デスクトップ上のアイコンよりも低い面レベルを有することになる。
【００１５】
一態様においては、ディスプレイプロセッサは、１つまたは複数の複合モードまたはブレンディングモードに応じてグラフィックス面を組み合わせることができる。そのような複合モードの例は、（１）上書き(overwriting)と、（２）アルファブレンディング(alpha blending)と、（３）アルファブレンディングを有さないカラーキーイング(color-keying)と、（４）アルファブレンディングを有するカラーキーイングと、を含む。２つの面の一部分がオーバーラップする上書き複合モードによれば、より高い面レベルを有する面の上書き部分は、より低い面レベルを有する任意の面のオーバーラップする部分の代わりに表示されることができる。
【００１６】
いくつかの場合においては、ディスプレイプロセッサは、異なるレイヤレベルに対応する各レイヤを用いて複数のレイヤを定義するオーバーレイスタックに従って面を組み合わせることができる。各レイヤは、そのレイヤにバインドされる(bound)１つまたは複数の面を含むことができる。ディスプレイプロセッサは、次いで面が組み合わされるべき順序を決定するようにオーバーレイスタックを横切ることができる。一態様においては、ユーザプログラムまたはＡＰＩファンクションは、オーバーレイスタック内の個々の面を選択的にイネーブルし(enable)、またはディスエーブルする(disable)ことができ、そして次いでディスプレイプロセッサは、イネーブルされているこれらの面だけを組み合わせる。別の態様においては、ユーザプログラムまたはＡＰＩファンクションは、オーバーレイスタック内の全部のレイヤを選択的にイネーブルし、またはディスエーブルすることができ、そして次いでディスプレイプロセッサは、イネーブルされたレイヤにバインドされたこれらのイネーブルされた面だけを組み合わせる。
【００１７】
ビデオゲームなどのグラフィックス集約的アプリケーションにおいては、オーバーレイされるべきグラフィックス面の多くは、２Ｄ  ＡＰＩのソフトウェアインプリメンテーションおよびハードウェアインプリメンテーションによって生成される２Ｄ面であり、３Ｄハードウェアによって生成されない。しかしながら、３Ｄグラフィックスをレンダリングするための規格の多くは、そのような２Ｄグラフィックス面を３Ｄグラフィックス面上へとオーバーレイするための仕様を含まない。したがって、２Ｄ面および３Ｄ面のレンダリングを同期化することができる複雑なレンダリングエンジンは、時にそのようなアプリケーションのために使用されるが、そのようなレンダリングエンジンの複雑さは、そのようなシステムの全体的なシステムコストと、グラフィックス性能と、電力消費に悪影響を及ぼす可能性がある。
【００１８】
本開示におけるオーバーレイ技法および複合技法は、１つまたは複数の利点を提供することができる。例えば、ビデオゲームは、複雑な３Ｄグラフィックス、ならびに２Ｄグラフィックスオブジェクトや比較的静的なオブジェクトなどの単純なグラフィックスオブジェクト、を表示することができる。これらの単純なグラフィックスオブジェクトは、複雑な３Ｄグラフィックスから分離したオフスクリーン面としてレンダリングされることができる。レンダリングされたオフスクリーン面は、最終的なグラフィックスフレームを生成するために複雑な３Ｄグラフィックス面とオーバーレイされる（すなわち、組み合わせられる）ことができる。単純なグラフィックスオブジェクトは、３Ｄグラフィックスレンダリング能力を必要としない可能性があるので、そのようなオブジェクトは、グラフィックス処理システムにおいて、より少ないハードウェアリソースを消費する技法を使用して、レンダリングされることができる。例えば、そのようなオブジェクトは、汎用処理パイプラインを使用するプロセッサによってレンダリングされ、あるいは２Ｄグラフィックス加速能力を有するプロセッサによってレンダリングされることができる。さらに、そのようなオブジェクトは、あらかじめレンダリングされ、そして後の使用のためにグラフィックス処理システム内に記憶されることができる。複雑な３Ｄグラフィックスから分離された単純なグラフィックスオブジェクトをレンダリングすること、またはあらかじめレンダリングすることにより、３Ｄグラフィックスレンダリングハードウェア上の負荷は、低減されることができる。これは、モバイル通信の世界において特に重要であり、ここで、３Ｄグラフィックスハードウェア上の低減された負荷は、モバイルデバイスについての省電力、および／または増大させられた全体的性能、すなわちより高い持続フレームレート(sustained framerate)をもたらすことができる。
【００１９】
さらに、複雑なレンダリングを実行するグラフィックスプロセッサと、オンスクリーン面とオフスクリーン面とを組み合わせるディスプレイプロセッサとにグラフィックス処理を分割することにより、そしてこれらの２つのプロセッサを並列に動作させることにより、グラフィックスプロセッサのクロックレートは、低減されることができる。さらに、電力消費は、グラフィックスプロセッサのクロックレートと共に非線形に増大するので、追加の省電力が、グラフィックス処理システムにおいて達成されることができる。
【００２０】
図１は、本開示の態様により、１組のレンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイし、または組み合わせるために使用されることができるデバイス１００を示すブロック図である。デバイス１００は、スタンドアロンデバイスとすることができ、あるいはより大きなシステムの一部分とすることができる。例えば、デバイス１００は、ワイヤレス通信デバイス（ワイヤレスハンドセットなど）を備えることができ、あるいはデジタルカメラ、デジタルマルチメディアプレーヤ、携帯型個人情報端末(personal digital assistant)（ＰＤＡ）、ビデオゲームコンソール、モバイルゲーミングデバイス(mobile gaming device)、または他のビデオデバイスの一部分とすることができる。一態様においては、デバイス１００は、パーソナルコンピュータ(personal computer)（ＰＣ）またはラップトップデバイスを備えることができ、あるいはそれらの一部分とすることができる。デバイス１００は、１つまたは複数の集積回路、またはチップに含まれることもできる。
【００２１】
デバイス１００は、グラフィックスアプリケーション、ビデオアプリケーション、他のマルチメディアアプリケーションなど様々な異なるアプリケーションを実行することができる可能性がある。例えば、デバイス１００は、グラフィックスアプリケーション、ビデオゲームアプリケーション、ビデオアプリケーション、ビデオとグラフィックスとを組み合わせたアプリケーション、デジタルカメラアプリケーション、インスタントメッセージングアプリケーション、モバイルアプリケーション、ビデオ電話通信、あるいはビデオストリーミングアプリケーションのために使用されることができる。
【００２２】
デバイス１００は、様々な異なるデータ型とフォーマットとを処理することができる可能性がある。例えば、デバイス１００は、より詳細に下記に説明されるように静止画データ、動画（ビデオ）データ、または他のマルチメディアデータを処理することができる。図１の例においては、デバイス１００は、グラフィックス処理システム１０２と、メモリ１０４と、ディスプレイデバイス１０６と、を含む。プログラマブルプロセッサ１０８、１１０、および１１４は、グラフィックス処理システム１０２内に含まれることができる。プログラマブルプロセッサ１０８は、制御または汎用のプロセッサとすることができ、そしてシステムＣＰＵ（中央演算処理装置）を備えることができる。プログラマブルプロセッサ１１０は、グラフィックスプロセッサとすることができ、そしてプログラマブルプロセッサ１１４は、ディスプレイプロセッサとすることができる。制御プロセッサ１０８は、グラフィックスプロセッサ１１０と、ディスプレイプロセッサ１１４との両方を制御することができる可能性がある。プロセッサ１０８、１１０、および１１４は、スカラプロセッサまたはベクトルプロセッサとすることができる。一態様においては、デバイス１００は、他の形態のマルチメディアプロセッサを含むことができる。
【００２３】
一態様においては、グラフィックス処理システム１０２は、物理的に互いに分離しているいくつかの異なるサブシステムまたはコンポーネント上にインプリメントされることができる。そのような場合には、１つまたは複数のプログラマブルプロセッサ１０８、１１０、１１４は、異なるコンポーネント上にインプリメントされることができる。例えば、グラフィックス処理システム１０２の１つのインプリメンテーションは、第１のコンポーネントまたはサブシステム上の制御プロセッサ１０８およびディスプレイプロセッサ１１４と、第２のコンポーネントまたはサブシステム上のグラフィックスプロセッサ１１０と、を含むことができる。
【００２４】
デバイス１００の中で、グラフィックス処理システム１０２は、メモリ１０４に対して、そしてディスプレイデバイス１０６に対して両方ともに結合されることができる。メモリ１０４は、命令および／またはデータを記憶することができる持久性または揮発性の任意のメモリを含むことができる。ディスプレイデバイス１０６は、ＬＣＤ（液晶ディスプレイ(liquid crystal display)）や標準テレビジョンディスプレイデバイスなど、表示目的のための３Ｄ画像データ、２Ｄ画像データ、またはビデオデータを表示することができる任意のデバイスとすることができる。
【００２５】
グラフィックスプロセッサ１１０は、コンピュータ化されたグラフィックスをレンダリングし、操作し、そして表示するために利用される専用のグラフィックスレンダリングデバイスとすることができる。グラフィックスプロセッサ１１０は、様々な複雑なグラフィックス関連アルゴリズムをインプリメントすることができる。例えば、複雑なアルゴリズムは、２次元または３次元のコンピュータ化されたグラフィックスの表現に対応することができる。グラフィックスプロセッサ１１０は、ディスプレイデバイス１０６などのディスプレイ上でプレゼンテーションのための複雑な３次元画像を生成するために、点、線、三角形、または他の多角形を形成することなど、いくつかのいわゆる「プリミティブ」グラフィックスオペレーションをインプリメントすることができる。
【００２６】
本開示においては、用語「レンダリングする(render)」は、３Ｄおよび／または２Ｄのレンダリングを意味することができる。例として、グラフィックスプロセッサ１１０は、３Ｄグラフィックス面をレンダリングするためにＯｐｅｎＧＬ命令を利用することができ、あるいは２Ｄグラフィックス面をレンダリングするためにＯｐｅｎＶＧ命令を利用することができる。しかしながら、様々な態様においては、グラフィックスをレンダリングするための任意の規格、方法、または技法が、グラフィックスプロセッサ１１０によって利用されることができる。一態様においては、制御プロセッサ１０８もまた、２Ｄグラフィックス面をレンダリングするためにＯｐｅｎＶＧ命令を利用することができる。
【００２７】
グラフィックスプロセッサ１１０は、メモリ１０４に記憶される命令を実行することができる。メモリ１０４は、アプリケーション（グラフィックスアプリケーションやビデオアプリケーションなど）についてのアプリケーション命令と、ＡＰＩライブラリ１２０と、ドライバ１２２と、面情報１２４と、を記憶することができる。アプリケーション命令１１８は、実行のためにメモリ１０４からグラフィックス処理システム１０２へとロードされることができる。例えば、制御プロセッサ１０８、グラフィックスプロセッサ１１０、およびディスプレイプロセッサ１１４のうちの１つまたは複数は、１つまたは複数の命令１１８を実行することができる。
【００２８】
制御プロセッサ１０８、グラフィックスプロセッサ１１０、および／またはディスプレイプロセッサ１１４はまた、アプリケーション命令１１８の実行中にＡＰＩライブラリ１２０またはドライバ１２２の内部に含まれる命令をロードし、そして実行することができる。命令１１８は、ＡＰＩライブラリ１２０またはドライバ１２２の内部のある種のファンクションを参照し、または別の方法で呼び出すことができる。それ故に、グラフィックス処理システム１０２が、命令１１８を実行するときに、それは、より詳細に下記に説明されるようにＡＰＩライブラリ１２０および／またはドライバ１２２の内部の識別される命令を実行することもできる。ドライバ１２２は、制御プロセッサ１０８、グラフィックスプロセッサ１１０、およびディスプレイプロセッサ１１４のうちの１つまたは複数に特有である機能を含むことができる。一態様においては、アプリケーション命令１１８、ＡＰＩライブラリ１２０、および／またはドライバ１２２は、不揮発性データストレージ媒体などのストレージデバイスからメモリ１０４へとロードされることができる。
【００２９】
グラフィックス処理システム１０２は、面バッファ１１２も含んでいる。グラフィックスプロセッサ１１０と、制御プロセッサ１０８と、ディスプレイプロセッサ１１４とは、おのおの、これらのプロセッサのおのおのが面バッファ１１２からデータを読み取り、または面バッファ１１２へとデータを書き込むことのいずれかができるように、面バッファ１１２に動作的に結合されることができる。面バッファ１１２はまた、フレームバッファ１６０に動作的に結合されることができる。図１においては、グラフィックス処理システム１０２内に含まれるように示されるが、面バッファ１１２とフレームバッファ１６０とはまた、いくつかの態様においては、メモリ１０４内に直接に含まれることもできる。
【００３０】
面バッファ１１２は、例えば、シンクロナスダイナミックランダムアクセスメモリ(synchronous dynamic random access memory)（ＳＤＲＡＭ）、エンベッディドダイナミックランダムアクセスメモリ(embedded dynamic random access memory)（ｅＤＲＡＭ）、スタティックランダムアクセスメモリ(static random access memory)（ＳＲＡＭ）など、データを記憶することができる持久性または揮発性の任意のメモリとすることができる。グラフィックスプロセッサ１１０が、オンスクリーン面やオフスクリーン面などのグラフィックス面をレンダリングするときに、グラフィックスプロセッサ１１０は、そのようなレンダリングデータを面バッファ１１２に記憶することができる。レンダリングされる各グラフィックス面は、そのサイズおよび形状によって定義されることができる。レンダリング後のスケーリングファンクションおよび回転ファンクションが、ディスプレイプロセッサ１１４によってレンダリングされた面に対して適用されることができるので、サイズおよび形状は、使用されているディスプレイデバイス１０６の実際の物理サイズによって制限されないことができる。
【００３１】
面バッファ(surface buffer)１１２は、１つまたは複数のレンダリングされたグラフィックス面(rendered graphics surfaces)１１６Ａ〜１１６Ｎ（一括して、１１６）と、１つまたは複数の面レベル(surface levels)１１７Ａ〜１１７Ｎ（一括して、１１７）と、を含むことができる。１１６におけるレンダリングされた各面は、サイズデータと、形状データと、ピクセルカラーデータと、面レンダリング中に生成されることができる他のレンダリングデータと、を含むレンダリングされた面データを含むことができる。１１６におけるレンダリングされた各面は、レンダリングされた面１１６に関連づけられた面レベル１１７を有することもできる。各面レベル１１７は、１１６における対応するレンダリングされた面が、結果として生ずるグラフィックスフレーム上へとオーバーレイされ、またはアンダーレイされるレベルを定義する。面バッファ１１２は、単一の面バッファとして図１に示されているが、面バッファ１１２は、おのおのが１つまたは複数のレンダリングされた面１１６Ａ〜１１６Ｎを記憶する１つまたは複数の面バッファを備えることができる。
【００３２】
面１１６Ａなど、レンダリングされた面は、ウィンドウ面などのオンスクリーン面、またはｐｂｕｆｆｅｒ面やｐｉｘｍａｐ面などのオフスクリーン面とすることができる。ウィンドウ面とｐｉｘｍａｐ面とは、ネイティブウィンドウイングシステム(native windowing system)内の対応するウィンドウおよびｐｉｘｍａｐに結合されることができる。ｐｉｘｍａｐは、ネイティブＡＰＩを通してアクセスされることができるバッファへのオフスクリーンレンダリング(off screen rendering)のために使用されることができる。一態様においては、クライアントアプリケーションは、ＥＧＬ  ＡＰＩのインスタンシエイション(instantiation)など、プラットフォームインターフェースレイヤに関連づけられたファンクションを呼び出すことにより、初期面を生成することができる。初期面が生成された後に、クライアントアプリケーションは、レンダリングコンテキスト（すなわち、状態機械）を各初期面に関連づけることができる。レンダリングコンテキストは、ＯｐｅｎＧＬ  ＥＳなどのクロスプラットフォームＡＰＩのインスタンシエイションによって生成されることができる。次いで、クライアントアプリケーションは、レンダリングされた面を生成するためにデータを初期面へとレンダリングすることができる。クライアントアプリケーションは、制御プロセッサ１０８やグラフィックスプロセッサ１１０などのプログラマブルプロセッサにレンダリングされた面を生成するようにさせることにより、データを初期面へとレンダリングすることができる。
【００３３】
レンダリングされた面１１６は、デバイス１００内のいくつかの異なるソースを起源とすることができる。例えば、グラフィックスプロセッサ１１０と制御プロセッサ１０８とは、おのおの１つまたは複数のレンダリングされた面を生成することができ、そして次いでそれらのレンダリングされた面を面バッファ１１２に記憶することができる。グラフィックスプロセッサ１１０は、制御プロセッサ１０８から受け取られる命令に応じて加速された３Ｄグラフィックスレンダリングパイプラインを使用することにより、レンダリングされた面を生成することができる。制御プロセッサ１０８は、汎用処理パイプラインを使用することにより、レンダリングされた面を生成することができ、この汎用処理パイプラインは、グラフィックスレンダリングのために加速されない。制御プロセッサ１０８は、メモリ１０４の面情報１２４内に記憶されたレンダリングされた面やあらかじめレンダリングされた面など、メモリ１０４の様々な部分内に記憶されたレンダリングされた面を取り出すこともできる。したがって、レンダリングされた面１１６Ａ〜１１６Ｎのおのおのは、デバイス１００内の同じソースまたは異なるソースを起源とすることができる。
【００３４】
一態様においては、グラフィックスプロセッサ１１０によって生成されるレンダリングされた面は、オンスクリーン面とすることができ、そして制御プロセッサ１０８によって生成され、または取り出されるレンダリングされた面は、オフスクリーン面とすることができる。別の態様においては、グラフィックスプロセッサ１１０は、オンスクリーン面もオフスクリーン面も両方とも生成することができる。グラフィックスプロセッサ１１０によって生成されるオフスクリーン面は、グラフィックスプロセッサ１１０が低く利用される(under-utilized)（すなわち、比較的大量の使用可能なリソースを有する）指定された時に生成され、そして次いで面バッファ１１２に記憶されることができる。次いでディスプレイプロセッサ１１４は、グラフィックスプロセッサ１１０が、過剰に利用される(over-utilized)ことができる（すなわち、比較的少量の使用可能なリソースを有する）時に、あらかじめ生成されたグラフィックス面をグラフィックスフレーム上へとオーバーレイすることができる。デバイス１００内のある種のグラフィックス面をあらかじめレンダリングすることにより、グラフィックスプロセッサ１１０の平均スループットは、改善されることができ、これは、グラフィックス処理システム１０２に対して全体的な省電力をもたらす可能性がある。
【００３５】
ディスプレイプロセッサ１１４は、面バッファ１１２からレンダリングされた面１１６を取り出すことと、レンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイすることと、結果のグラフィックスフレームを表示するためにディスプレイデバイス１０６を駆動することと、ができる。各グラフィックス面１１６がオーバーレイされるレベルは、そのグラフィックス面について定義される対応する面レベル１１７によって決定されることができる。面レベル１１７Ａ〜１１７Ｎは、アプリケーション命令１１８によってなど、ユーザプログラムによって定義され、そしてレンダリングされた面に関連づけられたパラメータとして記憶されることができる。面レベルは、面バッファ１１２に、あるいはメモリ１０４の面情報１２４ブロックに記憶されることができる。
【００３６】
面レベル１１７Ａ〜１１７Ｎは、おのおの任意の番号として定義されることができ、ここではその番号が高くなればなるほど、表示されたグラフィックスフレーム上でより高くに面は表示されることになる。例えば、より高い面レベルを有する面は、ディスプレイの閲覧者にたいして、より近くに見えることができる。すなわち、より高い面レベルを有する面に含まれるオブジェクトは、より低い面レベルを有する面に含まれるオブジェクトの前に見えることができる。
【００３７】
一態様においては、ディスプレイプロセッサ１１４は、例えば、（１）上書き、（２）アルファブレンディング、（３）アルファブレンディングを有さないカラーキーイング、（４）アルファブレンディングを有するカラーキーイングなど、１つまたは複数の複合モードまたはブレンディングモードに応じてグラフィックス面を組み合わせることができる。２つの面の一部分がオーバーラップする上書き複合モードによれば、より高い面レベルを有する面のオーバーラップする部分は、より低い面レベルを有する任意の面のオーバーラップする部分の代わりに表示されることができる。簡単な一例として、デスクトップコンピュータ上で使用される背景画像は、デスクトップ上のアイコンよりも低い面レベルを有することになる。いくつかの場合には、ディスプレイプロセッサ１１４は、レンダリングされたグラフィックス面を組み合わせるために、正投影または他の透視投影を使用することができる。アルファブレンディング複合モードは、例えば、全面一定アルファブレンディングアルゴリズム(full surface constant alpha blending algorithm)に応じて、あるいは全面ピクセル毎アルファブレンディングアルゴリズム(full surface per-pixel alpha blending algorithm)に応じてアルファブレンディングを実行することができる。
【００３８】
アルファブレンディングを有するカラーキーイング複合モードによれば、２つの面がオーバーラップするときに、ディスプレイプロセッサ１１４は、どの面がより高い面レベルを有するかと、どの面がより低い面レベルを有するかとを決定する。次いでディスプレイプロセッサ１１４は、どのピクセルがキーカラー（例えば、マゼンタ）にマッチするかを決定するためにより高い面のオーバーラップする部分内で各ピクセルをチェックすることができる。キーカラーにマッチする任意のピクセルでは、より低い面からの対応するピクセル（すなわち、同じ表示ロケーションを有するピクセル）は、出力ピクセル（すなわち、表示されるピクセル）として選択されることになる。キーカラーにマッチしない任意のピクセルでは、より高い面のピクセルは、より低い面から対応するピクセルに沿って、出力ピクセルを生成するためにアルファブレンディングアルゴリズムに応じて一緒にブレンドされることになる。
【００３９】
選択された複合モードが、アルファブレンディングを有さないカラーキーイングであるときに、ディスプレイプロセッサ１１４は、どのピクセルがキーカラーにマッチするかを決定するために、より高い面のオーバーラップする部分内で各ピクセルをチェックすることができる。キーカラーにマッチする任意のピクセルでは、より低い面からの対応するピクセル（すなわち、同じ表示ロケーションを有するピクセル）が、出力ピクセルとして選択されることになる。キーカラーにマッチしない任意のピクセルでは、より高い面からのピクセルが、出力ピクセルとして選択される。
【００４０】
いずれにしても、ディスプレイプロセッサ１１４は、フレームバッファ１６０にロードされることができる、結果として生ずるグラフィックスフレームを生成するために、選択された複合モードに応じてレイヤを組み合わせる。ディスプレイプロセッサ１１４は、スケーリングと回転とを含めて、レンダリングされたグラフィックスの面またはフレーム上で他のレンダリング後のファンクションを実行することもできる。スケーリングファンクションと回転ファンクションとは、１つまたは複数のＥＧＬ拡張において指定されることができる。
【００４１】
いくつかの態様においては、制御プロセッサ１０８は、カリフォルニア州、サンディエゴ市のクアルコム社(Qualcomm, Inc.)によって設計されたモバイルステーションモデム(Mobile Station Modems)に組み込まれたＡＲＭ１１プロセッサなどのＲＩＳＣプロセッサとすることができる。いくつかの態様においては、ディスプレイプロセッサ１１４は、クアルコム社によって設計されたモバイルステーションモデムにやはり組み込まれたモバイルディスプレイプロセッサ(mobile display processor)（ＭＤＰ）とすることができる。プロセッサ１０８、１１０、および１１４のどれもが、バッファ空間１１２内のレンダリングされた面１１６Ａ〜１１６Ｎにアクセスすることができる。一態様においては、各プロセッサ１０８、１１０、および１１４は、レンダリング能力を提供することと、グラフィックス面についてのレンダリングされた出力データを面バッファ１１２に書き込むことと、ができる可能性がある。
【００４２】
メモリ１０４は、グラフィックス処理システム１０２内で生成されるレンダリングされたグラフィックス面に関連した情報を記憶する面情報１２４も含んでいる。例えば、面情報１２４は、面プロファイルを含むことができる。面プロファイルは、レンダリングされた面データと、面レベルデータと、各面に特有である他のパラメータと、を含むことができる。面情報１２４は、複合面と、オーバーレイスタックと、レイヤとに関連した情報を含むこともできる。オーバーレイスタックは、オーバーレイスタックにバインドされた面がどのように結果として生ずるグラフィックスフレームへと組み合わされるべきかに関連した情報を記憶することができる。例えば、オーバーレイスタックは、ウィンドウ面に関してオーバーレイされ、そしてアンダーレイされるべきレイヤのシーケンスを記憶することができる。各レイヤは、レイヤにバインドされる１つまたは複数の面を有することができる。面情報１２４は、プログラマブルプロセッサ１０８、１１０、１１４による使用のためにグラフィックス処理システム１０２の面バッファ１１２、または他のバッファ（図示されず）へとロードされることができる。面バッファ１１２内のアップデートされた情報は、メモリ１０４の面情報１２４内に記憶するために供給して戻されることもできる。
【００４３】
図２は、デバイス１００内に記憶されるレンダリングされた面についての一例の面プロファイル２００を示すブロック図である。面プロファイル２００は、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つによっても、アプリケーション命令１１８に含まれるユーザプログラムによっても、あるいはＡＰＩライブラリ(API libraries)１２０に含まれるＡＰＩファンクションによって、生成されることができる。ひとたび生成された後には、面プロファイル２００は、メモリ１０４の面情報ブロック(surface information block)１２４に、面バッファ１１２に、あるいはグラフィックス処理システム１０２内の他のバッファ（図示されず）内に記憶されることができる。面プロファイル２００は、レンダリングされた面データ(rendered surface data)２０２と、イネーブルフラグ(enable flag)２０４と、面レベルデータ２０６と、複合面情報(composite surface information)２０８と、を含むことができる。レンダリングされた面データ２０２は、サイズデータ、形状データ、ピクセルカラーデータ、および／または面レンダリング中に生成されることができる他のレンダリングデータ、を含むことができる。
【００４４】
イネーブルフラグ２０４は、面プロファイルに対応する面がイネーブルされるか、またはディスエーブルされるかを示す。一態様においては、ある面についてのイネーブルフラグ２０４が、セットされる場合、その面はイネーブルされ、そしてディスプレイプロセッサ１１４は、その面を結果として生ずるグラフィックスフレーム上へとオーバーレイすることになる。そうでなくて、イネーブルフラグ２０４が、セットされない場合には、その面はディスエーブルされ、そしてディスプレイプロセッサ１１４は、その面を結果として生ずるグラフィックスフレーム上へとオーバーレイしないことになる。別の態様においては、ある面についてのイネーブルフラグ２０４がセットされる場合、オーバーレイスタックイネーブルフラグ（図３Ａ−３０４）がまた、その面がバインドされるオーバーレイスタックについてセットされる場合にのみ、ディスプレイプロセッサ１１４は、その面を結果として生ずるグラフィックスフレーム上へとオーバーレイすることができる。そうでなくて、オーバーレイスタックイネーブルフラグ、または面イネーブルフラグ２０４のいずれかがセットされない場合には、ディスプレイプロセッサは、その面を結果として生ずるグラフィックスフレーム上へとオーバーレイしないことになる。別の態様においては、ある面についてのイネーブルフラグ２０４が、セットされる場合、オーバーレイスタックイネーブルフラグ（図３Ｂ−３２４）と、レイヤイネーブルフラグ（図３Ｃ−３４４）との両方が、その面がバインドされるオーバーレイスタックおよびレイヤについてセットされる場合にのみ、ディスプレイプロセッサ１１４は、その面を結果として生ずるグラフィックスフレーム上へとオーバーレイすることができる。そうでなくて、イネーブルフラグのどれもが、セットされない場合には、ディスプレイプロセッサ１１４は、その面を結果として生ずるグラフィックスフレーム上へとオーバーレイしないことになる。
【００４５】
面レベルデータ２０６は、各グラフィックス面１１６が、ディスプレイプロセッサ１１４によって結果として生ずるグラフィックスフレーム上へとオーバーレイされるレベルを決定する。面レベルデータ２０６は、アプリケーション命令１１８によってなど、ユーザプログラムによって定義されることができる。複合面情報２０８は、特定の面プロファイルに関連づけられた複合面またはオーバーレイスタックを識別する情報を記憶することができる。
【００４６】
一態様においては、プログラマブルプロセッサ１０８、１１０、１１４は、メモリ１０４に記憶される面プロファイルの様々な部分を面バッファ１１２へとアップロードすることができる。例えば、制御プロセッサ１０８は、面プロファイル２００からレンダリングされた面データ２０２と、面レベルデータ２０６とをアップロードし、そしてアップロードされたデータを面バッファ１１２に記憶することができる。
【００４７】
図３Ａは、一態様による、複合面に関連づけられることができる一例のオーバーレイスタック３００を示すブロック図である。オーバーレイスタック３００は、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つによっても、アプリケーション命令１１８に含まれるユーザプログラムによっても、あるいはＡＰＩライブラリ１２０に含まれるＡＰＩファンクションによって、生成されることができる。ひとたび生成された後には、オーバーレイスタックは、メモリ１０４の面情報ブロック１２４に、面バッファ１１２に、あるいはグラフィックス処理システム１０２内の他のバッファ（図示されず）内に記憶されることができる。
【００４８】
オーバーレイスタック３００は、ウィンドウ面３０２と、イネーブルフラグ３０４と、レンダリングされた面データ３０６Ａ〜３０６Ｎ（一括して、３０６）と、面レベルデータ３０８Ａ〜３０８Ｎ（一括して、３０８）と、を含む。ウィンドウ面３０２は、オーバーレイスタックの中のベースレイヤ（例えば、レイヤ０）に関連づけられたオンスクリーンレンダリング面とすることができる。ウィンドウ面３０２は、フレームバッファ１６０に記憶される、結果として生ずるグラフィックスフレームと同じサイズおよび形状であり、そしてその後にディスプレイデバイス１０６上で表示されることができる。レンダリングされた面データ３０６と、面レベルデータ３０８とは、メモリ１０４の面情報ブロック１２４に、かつ／またはグラフィックス処理システム１０２の面バッファ１１２内に記憶されるレンダリングされた面データと、面レベルデータとに対応することができる。いくつかの場合には、オーバーレイスタック３００は、レンダリングされた面についての全部の面プロファイル２００を含むことができるが、他の場合には、オーバーレイスタック３００は、オーバーレイスタック３００によって処理するための面情報を含む他のデータ構造を指し示すアドレスポインタを含むことができる。
【００４９】
一態様においては、ウィンドウ面３０２は、ベース面レベルとして定義されるゼロの面レベルを割り当てられることができる。正の面レベルを有する面は、ウィンドウ面３０２にオーバーレイすることができ、そしてここにおいてオーバーレイ面(overlay surfaces)と称される。負の面レベルを有する面は、ウィンドウ面３０２にアンダーレイし(underlay)、そしてここにおいてアンダーレイ面(underlay surfaces)と称される。オーバーレイ面は、正の面レベルを有することができ、ここでは面レベルがより正になればなるほど、面は、ディスプレイデバイス１０６の閲覧者に対して、より近くに見える。例えば、より高いレイヤレベルを有するレイヤに含まれるオブジェクトは、より低いレイヤレベルを有するレイヤに含まれるオブジェクトの前に見えることができる。同様に、アンダーレイ面は、負の面レベルを有することができ、ここでは面レベルがより負になればなるほど、面は、ディスプレイデバイス１０６の閲覧者に対して、より遠くに離れて見える。例えば、より低いレイヤレベルを有するレイヤに含まれるオブジェクトは、より高いレイヤレベルを有するレイヤに含まれるオブジェクトの背後に、または後ろに見えることができる。いくつかの場合には、オーバーレイスタック３００は、少なくとも１つのオーバーレイ面または１つのアンダーレイ面を有することが必要とされる可能性がある。ユーザアプリケーションは、どれだけ多くのレイヤがサポートされるかと、どれだけ多くの面が現在各レイヤにバインドされるかを決定するためにオーバーレイスタック３００に問い合わせを行うことができる。オーバーレイスタック３００は、スタックに関連づけられた複合面を有することもできる。複合面は、ユーザプログラムの観点から読み取り専用であり、そして必要に応じて複合バッファとして他のＡＰＩまたはディスプレイプロセッサ１１４によって使用されることができる。代わりに、オーバーレイスタックは、データが、専用の複合バッファまたは面を使用せずに、ディスプレイデバイス１０６に送られるので、「実行中(on-the-fly)」に複合化されることもできる。
【００５０】
イネーブルフラグ３０４は、オーバーレイスタック３００が、イネーブルされるか、またはディスエーブルされるか、を決定する。イネーブルフラグ３０４が、オーバーレイスタック３００についてセットされる場合、オーバーレイスタックは、イネーブルされ、そしてディスプレイプロセッサ１１４は、オーバーレイスタック３００内のすべてのイネーブルされた面を結果として生ずるグラフィックスフレームに組み合わせ、または処理することができる。そうでなくて、イネーブルフラグ３０４が、セットされない場合には、オーバーレイスタック３０４は、ディスエーブルされ、そしてディスプレイプロセッサ１１４は、結果として生ずるグラフィックスフレームを生成するときに、オーバーレイスタックを使用し、または関連する任意の面エレメント(surface elements)を処理することができない。一態様によれば、オーバーレイスタック３００が、ディスエーブルされるときに、ウィンドウ面３０２は、依然としてイネーブルされることができ、そしてすべての他のオーバーレイ面とアンダーレイ面とは、ディスエーブルされることができる。したがって、ウィンドウ面３０２は、この態様に応じてディスエーブルされない可能性がある。他の態様においては、全部のオーバーレイスタックが、ウィンドウ面３０２を含めて、ディスエーブルされることができる。
【００５１】
面を組み合わせるときに、ディスプレイプロセッサ１１４は、レンダリングされた面３０６をオーバーレイし、アンダーレイし、あるいはそうではなくて組み合わせるべき順序を決定するためにオーバーレイスタック３００を参照することができる。一例においては、ディスプレイプロセッサ１１４は、最低の面レベルを有する、オーバーレイスタック３００の中の面を見いだすことにより、ディスプレイの閲覧者からもっとも遠く離れて見える第１の面を識別することができる。次いで、ディスプレイプロセッサ１１４は、第１の面の面レベルよりも大きい第２の最低の面レベルを有する、オーバーレイスタック３００の中の第２の面を識別することができる。次いで、ディスプレイプロセッサ１１４は、複合モードに応じて第１の面と、第２の面とを組み合わせることができる。ディスプレイプロセッサ１１４は、最高の面レベルを有し、閲覧者にもっとも近くに見える面と、後端から前端までの面をオーバーレイし続けることができる。このようにして、ディスプレイプロセッサ１１４は、レンダリングされた面３０６を逐次的に組み合わせ、そして結果として生ずるグラフィックスフレームを生成するためにオーバーレイスタック３０６を横切ることができる。
【００５２】
いくつかの場合には、ディスプレイプロセッサ１１４は、イネーブルフラグ２０４が、面についてセットされているかどうかを調べるために各面をチェックすることができる。イネーブルフラグが、セットされる（すなわち、面が、イネーブルされる）場合、ディスプレイプロセッサ１１４は、オーバーレイスタック３００の中の他のイネーブルされた面を用いて面を組み合わせ、または処理することができる。イネーブルフラグがセットされない（すなわち、面が、ディスエーブルされる）場合には、ディスプレイプロセッサ１１４は、オーバーレイスタック３００の中の他の面を用いて面を組み合わせ、または処理することができない。オーバーレイスタック３００内に記憶される面のイネーブルフラグは、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つの上で実行されるユーザプログラムまたはＡＰＩ命令によってセットされ、またはリセットされることができる。このようにして、ユーザプログラムは、任意の特定のグラフィックスフレームについて面を選択的にイネーブルし、そしてディスエーブルすることができる。
【００５３】
図３Ｂは、別の態様による、複合面に関連づけられることができる一例のオーバーレイスタック３２０を示すブロック図である。オーバーレイスタック３００と同様に、オーバーレイスタック３２０は、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つによっても、アプリケーション命令１１８に含まれるユーザプログラムによっても、あるいはＡＰＩライブラリ１２０に含まれるＡＰＩファンクションによって生成されることもできる。ひとたび生成された後には、オーバーレイスタックは、メモリ１０４の面情報ブロック１２４に、面バッファ１１２に、あるいはグラフィックス処理システム１０２内の他のバッファ（図示されず）内に記憶されることができる。
【００５４】
オーバーレイスタック３２０は、ウィンドウ面(window surface)３２２と、イネーブルフラグ３２４と、レンダリングされたオーバーレイレイヤ(rendered overlay layers)３２６Ａ〜３２６Ｎ（一括して、３２６）と、アンダーレイレイヤ(underlay layers)３２８Ａ〜３２８Ｎ（一括して、３２８）と、を含む。ウィンドウ面３２２は、オーバーレイスタックの中のベースレイヤ（例えば、レイヤ０）に関連づけられたオンスクリーンレンダリング面とすることができる。ウィンドウ面３２２は、フレームバッファ１６０に記憶される、結果として生ずるグラフィックスフレームと同じサイズおよび形状であり、そしてその後にディスプレイデバイス１０６上で表示されることができる。
【００５５】
ウィンドウ面３２２は、ゼロ（ベースレイヤ）のレイヤレベルを割り当てられることができる。正のレイヤレベルを有するレイヤは、ウィンドウ面３２２にオーバーレイすることができ、そしてここにおいてオーバーレイレイヤ(overlay layers)と称される。負のレイヤレベルを有するレイヤは、ウィンドウ面３２２にアンダーレイし、そしてここにおいてアンダーレイレイヤ(underlay layers)と称される。オーバーレイレイヤは、正のレイヤレベルを有することができ、ここではレイヤレベルがより正になればなるほど、レイヤは、ディスプレイデバイス１０６の閲覧者に対して、より近くに見える。同様に、アンダーレイレイヤは、負のレイヤレベルを有することができ、ここではレイヤレベルがより負になればなるほど、レイヤは、ディスプレイデバイス１０６の閲覧者に対して、より遠くに離れて見える。各レイヤは、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つを実行するユーザプログラムまたはＡＰＩ命令によってそのレイヤにバインドされる複数の(multiple)面を有することができる。いくつかの場合には、レイヤゼロ（すなわち、ベースレイヤ）は、単一のレンダリングされた面、すなわち、ウィンドウ面３２２だけに限定されることができる。追加の場合には、オーバーレイスタック３２０は、少なくとも１つのオーバーレイレイヤまたは１つのアンダーレイレイヤを有することができる。ユーザアプリケーションは、どれだけ多くのレイヤがサポートされるかと、どれだけ多くの面が各レイヤにバインドされることができるかを決定するためにオーバーレイスタック３２０に問い合わせを行うことができる。オーバーレイスタック３２０は、オーバーレイスタックに関連づけられた複合面を有することができる。複合面は、ユーザプログラムの観点から読み取り専用であり、そして必要に応じて複合バッファとして他のＡＰＩまたはディスプレイプロセッサ１１４によって使用されることができる。代わりに、オーバーレイスタックは、データが、専用の複合バッファを使用せずに、ディスプレイデバイス１０６に送られるので、「実行中」に複合化されることもできる。
【００５６】
イネーブルフラグ３２４は、オーバーレイスタック３２０が、イネーブルされるか、またはディスエーブルされるか、を決定する。イネーブルフラグ３２４が、オーバーレイスタック３２０についてセットされる場合、そのときにはオーバーレイスタック３２０は、イネーブルされ、そしてディスプレイプロセッサ１１４は、オーバーレイスタック３２０内のすべてのイネーブルされたレイヤを結果として生ずるグラフィックスフレームに組み合わせ、または処理することができる。そうでなくて、イネーブルフラグ３２４が、セットされない場合には、オーバーレイスタック３２０は、ディスエーブルされ、そしてディスプレイプロセッサ１１４は、結果として生ずるグラフィックスフレームを生成するときに、オーバーレイスタック３２０を使用し、または関連する任意の面エレメントを処理することができない。一態様によれば、オーバーレイスタック３２０が、ディスエーブルされるときに、ウィンドウ面３２２は、依然としてイネーブルされることができ、そしてオーバーレイレイヤ３２６とアンダーレイレイヤ３２８とは、ディスエーブルされることができる。したがって、ウィンドウ面３２２は、この態様に応じてディスエーブルされない可能性がある。他の態様においては、全部のオーバーレイスタックが、ウィンドウ面３２２を含めて、ディスエーブルされることができる。
【００５７】
レイヤを組み合わせるときに、ディスプレイプロセッサ１１４は、それらのレイヤをオーバーレイし、アンダーレイし、あるいはそうではなくて組み合わせるべき順序を決定するためにオーバーレイスタック３２０を参照することができる。一例においては、ディスプレイプロセッサ１１４は、最低の面レベルを有する、オーバーレイスタック３２０の中の面を見いだすことにより、ディスプレイの閲覧者からもっとも遠く離れて見える第１のレイヤを識別することができる。次いで、ディスプレイプロセッサ１１４は、第１のレイヤにバインドされたすべてのレンダリング面を識別することができる。次いで、ディスプレイプロセッサ１１４は、選択された複合モードに応じて、おそらく様々なピクセルブレンディングおよびキーイングのオペレーションのうちの１つまたは複数を適用することにより、複合アルゴリズムを使用して第１のレイヤのレンダリングされた面を組み合わせることができる。いくつかの場合には、ディスプレイプロセッサ１１４は、第１のレイヤの中の各面がイネーブルされるかどうかを調べるためにチェックし、そして次いで第１のレイヤ内のイネーブルされた面だけを組み合わせることができる。ディスプレイプロセッサ１１４は、第１のレイヤの組み合わされた面を一時的に記憶するために複合面を使用することができる。次いで、ディスプレイプロセッサ１１４は、第２の最低のレイヤレベルを有する、オーバーレイスタック３２０の中の第２の面を識別する。第２の最低のレイヤレベルは、第１のレイヤのレイヤレベルよりも依然として大きい最低のレイヤレベルとすることができる。次いで、ディスプレイプロセッサ１１４は、以前に生成された複合面と、第２のレイヤにバインドされたレンダリングされた面を組み合わせることができる。同じレイヤにバインドされた２つの面が、オーバーラップしている場合、ディスプレイプロセッサ１１４は、さらに詳細に下記で説明されるように、面がレイヤにバインドされた順序に応じて面を組み合わせることができる。ディスプレイプロセッサ１１４は、最高のレイヤレベルを有し、そして閲覧者に対してもっとも近くに見えるレイヤと、後端から前端までのレイヤを組み合わせ続けることができる。このようにして、ディスプレイプロセッサ１１４は、レイヤを逐次的に組み合わせ、そして結果として生ずるグラフィックスフレームを生成するためにオーバーレイスタック３２０を横切ることができる。
【００５８】
いくつかの場合には、ディスプレイプロセッサ１１４は、イネーブルフラグ（図３Ｃ−３４４）が、各レイヤについてセットされているかどうかを調べるために各レイヤをチェックすることができる。イネーブルフラグが、セットされる（すなわち、レイヤが、イネーブルされる）場合、ディスプレイプロセッサ１１４は、オーバーレイスタック３２０の中の他のイネーブルされたレイヤのイネーブルされた面を用いてレイヤのイネーブルされた面を組み合わせ、または処理することができる。イネーブルフラグがセットされない（すなわち、レイヤが、ディスエーブルされる）場合には、ディスプレイプロセッサ１１４は、オーバーレイスタック３２０の中の他のレイヤのイネーブルされた面を用いてレイヤにバインドされた任意の面を組み合わせ、または処理することができない。オーバーレイスタック３２０内のイネーブルフラグは、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つの上で実行されるユーザプログラムまたはＡＰＩ命令によってセットされ、またはリセットされることができる。このようにして、ユーザプログラムは、任意の特定のグラフィックスフレームについて、全部のレイヤ、個々の面、および／または完全なオーバーレイスタックを選択的にイネーブルし、そしてディスエーブルすることができる。
【００５９】
図３Ｃは、オーバーレイスタック３２０の中で使用されることができる一例のレイヤ３４０を示すブロック図である。レイヤ３４０は、オーバーレイレイヤ、アンダーレイレイヤ、またはベースレイヤのうちのいずれかとすることができる。レイヤ３４０は、レイヤレベルデータ３４２と、イネーブルフラグ３４４と、レンダリングされた面データ３４６Ａ〜３４６Ｎ（一括して、３４６）と、を含む。レイヤレベルデータ３４２は、レイヤ３４０が、オーバーレイスタックの中に存在するレベルを示す。個別のバインドされた面が、面レベルを有する場合には、面レベルは、面がバインドされたレイヤのレイヤレベルと同一になる。
【００６０】
イネーブルフラグ３４４は、レイヤ３４０がイネーブルされるか、またはディスエーブルされるか、を決定する。イネーブルフラグ３４４が、レイヤ３４０についてセットされる場合、そのときにはレイヤ３４０は、イネーブルされ、そしてディスプレイプロセッサ１１４は、レイヤ３４０にバインドされたすべてのイネーブルされた面を結果として生ずるグラフィックスフレームへと組み合わせ、または処理することができる。そうでなくて、イネーブルフラグ３４４が、セットされない場合には、レイヤ３４０は、ディスエーブルされ、そしてディスプレイプロセッサ１１４は、結果として生ずるグラフィックスフレームを生成するときにレイヤ３４０内のイネーブルされた任意の面を使用し、または処理することができない。いくつかの場合には、オーバーレイスタック３２０の中のウィンドウ面３２２は、ベースレイヤの一部分とすることができる。一態様によれば、ベースレイヤは、ディスエーブルされない可能性がある。他の態様においては、ベースレイヤは、ディスエーブルされることができる。
【００６１】
レンダリングされた面データ３４６は、メモリ１０４の面情報ブロック１２４に、またはグラフィックス処理システム１０２の面バッファ１１２内に、記憶されるレンダリングされた面データに対応することができる。いくつかの場合には、レイヤ３４０は、レンダリングされた面についての全部の面プロファイル２００を含むことができるが、他の場合には、レイヤ３４０は、オーバーレイスタック２００により処理するための面情報を含む他のデータ構造を指し示すアドレスポインタを含むことができる。いずれにしても、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つの上で実行されるユーザプログラムは、オーバーレイスタック３２０内の特定のレイヤに面を関連づける（すなわち、バインドする(bind)）ことができる。ある面が、レイヤにバインドされるときに、レイヤは、レンダリングされた面データ３４６、またはその特定の面について適切なレンダリングされた面データを指し示す情報を含むことになる。
【００６２】
図４Ａは、オーバーレイスタック４００の一例と、オーバーレイレイヤとアンダーレイレイヤとベースレイヤとの間の関係と、を示す概念図である。オーバーレイスタック４００は、図３Ｂに示されるオーバーレイスタック３２０と構造において類似したものとすることができる。図４Ａに示されるように、「レイヤ３」は、ディスプレイの閲覧者に対して最も近くに見え、そして「レイヤ−３」は、ディスプレイの閲覧者から最も遠くに離れて見える。レイヤ４０２は、ゼロのレイヤレベルを有し、そしてオーバーレイスタック４００についてのベースレイヤとして定義される。ベースレイヤ４０２は、ウィンドウ面を含むことができ、このウィンドウ面は、グラフィックスプロセッサ１１０によってレンダリングされ、そして面バッファ１１２内に、レンダリングされた面として記憶されることができる。正のレイヤ（すなわち、「レイヤ１」、「レイヤ２」、および「レイヤ３」）は、それらのレイヤが、ベースレイヤ４０２の前にオーバーレイし、または見えるので、オーバーレイレイヤ４０４として定義される。負のレイヤ（すなわち、「レイヤ−１」、「レイヤ−２」、および「レイヤ−３」）は、それらのレイヤが、ベースレイヤ４０２の背後にアンダーレイし、または見えるので、アンダーレイレイヤとして定義される。言い換えれば、これらのレイヤは、ベースレイヤ４０２によってふさがれる(occluded)。一態様によれば、図４Ａに示されるように、レイヤレベルが、より正になればなるほど、面は、ディスプレイデバイス１０６（図１）の閲覧者に対してより近くに見える。同様に、レイヤレベルが、より負になればなるほど、面は、ディスプレイデバイス１０６の閲覧者に対してより遠くに離れて見える。言い換えれば、より高い面レベルを有する面に含まれるオブジェクトは、より低い面レベルを有する面に含まれるオブジェクトの前に見えることができ、そしてより低い面レベルを有する面に含まれるオブジェクトは、より高い面レベルを有する面に含まれるオブジェクトの後ろ、または背後に見えることができる。
【００６３】
各レイヤは、そのレイヤにバインドされた１つまたは複数の面を有することができる。一態様においては、ベースレイヤ４０２は、そのレイヤにバインドされたオンスクリーンウィンドウ面を有するはずである。オンスクリーン面は、連続する各グラフィックスフレームについてグラフィックスプロセッサ１１０によってレンダリングされることができる。さらに、この態様によれば、オフスクリーン面（すなわち、ｐｂｕｆｆｅｒ、ｐｉｘｍａｐ）だけが、オーバーレイレイヤ４０４と、アンダーレイレイヤ４０６との両方にバインドされることができる。オフスクリーン面は、プログラマブルプロセッサ１０８、１１０、または１１４のどれによってもレンダリングされ、同様に面情報１２４からなど、メモリ１０４から取り出されることができる。
【００６４】
図４Ｂは、より詳細に一例のレイヤ４１０を示している。レイヤ４１０は、ベースレイヤ４０２、オーバーレイレイヤ４０４、またはアンダーレイレイヤ４０６のうちの任意の１つを含めて、図４Ａに示されるオーバーレイスタック４００内のレイヤとすることができる。レイヤ４１０は、面４１２、４１４、４１６、４１８を含む。いくつかの態様においては、面４１２、４１４、４１６、４１８は、すべてオフスクリーン面とすることができる。面４１２、４１４、４１６、４１８のおのおのは、ＡＰＩ命令またはユーザプログラム命令に応じてプログラマブルプロセッサ１０８、１１０、１１４のうちの１つによってレイヤ４１０にバインドされることができる。一般に、レイヤ内の各面は、同じ面レベルを割り当てられ、この面レベルは、レイヤレベルに対応することができる。例えば、レイヤ４１０が、オーバーレイスタック４００の中の「レイヤ３」である場合、面４１２、４１４、４１６、４１８のおのおのは、３という面レベルを割り当てられることができる。レイヤ４１０の中の面４１４や４１６など、同じレイヤにバインドされた２つの面が、互いにオーバーラップする場合においては、面は、それらがバインドされた順序でレンダリングされることができる。例えば、面４１６が、面４１４の後にバインドされた場合、面４１６は、面４１４よりも閲覧者に対してより近くに見えることができる。そうでなくて、面４１６が、面４１４に先立ってバインドされた場合には、面４１４は、閲覧者に対してより近くに見えることができる。他の場合には、例えば面がレイヤにバインドされた逆の順序でレンダリングするなど、異なるレンダリング順序が、面をオーバーラップするために使用されることができる。
【００６５】
ディスプレイプロセッサ１１４は、フレームバッファ１６０またはディスプレイ１０６に送られることができる、結果として生ずるグラフィックスフレームを生成するためにオーバーレイスタック４００の中のレイヤと、面とを組み合わせることができる。ディスプレイプロセッサ１１４は、例えば、（１）上書き、（２）アルファブレンディング、（３）アルファブレンディングを有さないカラーキーイング、（４）アルファブレンディングを有するカラーキーイングなど、１つまたは複数の複合モードに応じてグラフィックス面を組み合わせることができる。
【００６６】
図５Ａは、一態様による、図１に示されるＡＰＩライブラリのさらなる詳細を示すブロック図である。図１を参照して以上で説明されるように、ＡＰＩライブラリ１２０は、グラフィックスプロセッサ１１０、制御プロセッサ１０８、および／またはディスプレイプロセッサ１１４によるアプリケーション実行中に、アプリケーション命令１１８によって、メモリ１０４に記憶され、そしてリンクされ、あるいは参照されることができる。図５Ｂは、一態様による、図１に示されるドライバ１２２のさらなる詳細を示すブロック図である。ドライバ１２２は、グラフィックスプロセッサ１１０、制御プロセッサ１０８、および／またはディスプレイプロセッサ１１４によるアプリケーション実行中に、アプリケーション命令１１８および／またはＡＰＩライブラリ１２０によって、メモリ１０４に記憶され、そしてリンクされ、あるいは参照されることができる。
【００６７】
図５Ａの例においては、ＡＰＩライブラリ１２０は、ＯｐｅｎＧＬ  ＥＳレンダリングＡＰＩ(OpenGL ES rendering API’s)５０２と、ＯｐｅｎＶＧレンダリングＡＰＩ(OpenVG rendering API’s)５０４と、ＥＧＬ  ＡＰＩ(EGL API’s)５０６と、基礎にあるネイティブプラットフォームレンダリングＡＰＩ(underlying native platform rendering API’s)５０８と、を含む。図５Ｂに示されるドライバ１２２は、ＯｐｅｎＧＬ  ＥＳレンダリングドライバ５２２と、ＯｐｅｎＶＧレンダリングドライバ５２４と、ＥＧＬドライバ５２６と、基礎にあるネイティブプラットフォームレンダリングドライバ５２８と、を含む。ＯｐｅｎＧＬ  ＥＳレンダリングＡＰＩ５０２は、２Ｄや３Ｄのレンダリングファンクションなど、ＯｐｅｎＧＬ  ＥＳによってサポートされるレンダリングファンクションを提供するために、グラフィックス処理システム１０２によるアプリケーション実行中に、アプリケーション命令１１８によってＡＰＩ呼び出しされる(API's invoked)。ＯｐｅｎＧＬ  ＥＳレンダリングドライバ５２２は、グラフィックス処理システム１０２におけるＯｐｅｎＧＬ  ＥＳレンダリングファンクションの低レベルドライバサポートについてのアプリケーション実行中に、アプリケーション命令１１８および／またはＯｐｅｎＧＬ  ＥＳレンダリングＡＰＩ５０２によって呼び出される。
【００６８】
ＯｐｅｎＶＧレンダリングＡＰＩ５０４は、２Ｄベクトルグラフィックスレンダリングファンクションなど、ＯｐｅｎＶＧによってサポートされるレンダリングファンクションを提供するために、アプリケーション実行中にアプリケーション命令１１８によってＡＰＩ呼び出しされる。ＯｐｅｎＶＧレンダリングドライバ５２４は、グラフィックス処理システム１０２におけるＯｐｅｎＶＧレンダリングファンクションの低レベルドライバサポートについてのアプリケーション実行中にアプリケーション命令１１８および／またはＯｐｅｎＶＧレンダリングＡＰＩ５０４によって呼び出される。
【００６９】
ＥＧＬ  ＡＰＩ(API's)５０６（図５Ａ）と、ＥＧＬドライバ５２６（図５Ｂ）とは、グラフィックス処理システム１０２におけるＥＧＬファンクションについてのサポートを提供する。ＥＧＬ拡張は、ＥＧＬ  ＡＰＩ５０６およびＥＧＬドライバ５２６内に組み込まれることができる。用語ＥＧＬ拡張は、標準ＥＧＬ仕様に対して機能を拡張し、または追加する１つまたは複数のＥＧＬ  ＡＰＩおよび／またはＥＧＬドライバの組合せを意味することができる。ＥＧＬ拡張は、既存のＥＧＬ  ＡＰＩおよび／または既存のＥＧＬドライバを修正することにより、あるいは新しいＥＧＬ  ＡＰＩおよび／または新しいＥＧＬドライバを生成することにより、生成されることができる。図５Ａ〜５Ｂの例において、面オーバーレイＥＧＬ拡張が、提供され、同様にＥＧＬ標準ファンクションに対する修正eglSwapBuffersをサポートする。したがって、ＥＧＬ面オーバーレイ拡張では、面オーバーレイＡＰＩ５１０は、ＥＧＬ  ＡＰＩ５０６内に含まれ、そして面オーバーレイドライバ５３０は、ＥＧＬドライバ５２６内に含まれる。修正されたＥＧＬファンクションeglSwapBuffersでは、標準スワップバッファＡＰＩ５１２は、ＥＧＬ  ＡＰＩ５０６内に含まれ、そして修正されたスワップバッファドライバ(modified swap buffers driver)５３２は、ＥＧＬドライバ５２６内に含まれる。
【００７０】
ＥＧＬ面オーバーレイ拡張(EGL surface overlay extension)は、複数のグラフィックス面（２Ｄ面、３Ｄ面、および／またはビデオ面など）について単一グラフィックスフレームへとオーバーレイするための面オーバーレイスタックを提供する。グラフィックス面は、おのおのスタック内の関連する面レベルを有することができる。面のオーバーレイは、それ故にスタック内の面のオーバーレイ順序に応じて達成される。一態様においては、ＥＧＬ面オーバーレイ拡張は、オーバーレイスタックの生成および保守(maintenance)についてのファンクションを提供することができる。例えば、ＥＧＬ面オーバーレイ拡張は、ユーザプログラムまたは他のＡＰＩが、オーバーレイスタックを生成し、そしてそのオーバーレイスタック内の様々なレイヤに面をバインドすることを可能にするファンクションを提供することができる。ＥＧＬ面オーバーレイスタックはまた、ユーザプログラムまたはＡＰＩファンクションが、オーバーレイスタック内の面または全部のレイヤを選択的にイネーブルし、またはディスエーブルすることを、同様にオーバーレイスタックそれ自体を選択的にイネーブルし、またはディスエーブルすることを可能にすることもできる。最後に、ＥＧＬ面オーバーレイＡＰＩは、面バインディングコンフィギュレーションならびに面レベル情報をユーザプログラムまたはクライアントＡＰＩに対して戻すファンクションを提供することができる。このようにして、ＥＧＬ面オーバーレイ拡張は、オンスクリーン面と、オフスクリーン面との両方を含むオーバーレイスタックの生成および管理を提供する。
【００７１】
修正されたスワップバッファドライバ５３２は、面を組み合わせるときに、オーバーレイスタックの中の面上の複雑な計算を実行し、そしてディスプレイプロセッサ１１４によって使用される様々なデータ構造をセットアップすることができる。このデータを準備するために、修正されたスワップバッファドライバ５３２は、最低のレベルを有するレイヤで開始され、ウィンドウ面を含むベースレイヤまで順番に進んでオーバーレイスタックを横切ることができる。各レイヤ内で、ドライバ５３２は、レイヤにバインドされた順序で各面を処理することにより、進むことができる。次いで、ドライバ５３２は、ウィンドウ面を、そしていくつかの場合には他の面を含むベースレイヤ（すなわち、レイヤ０）を処理することができる。最後に、ドライバ５３２は、レイヤレベル１で開始され、ディスプレイの閲覧者に対して最も近くに見える最高のレイヤまで順番に進んでオーバーレイレイヤを処理するために進むことになる。このようにして、修正されたＥＧＬスワップバッファドライバ５３２は、グラフィックスフレームをレンダリングするときに使用するためにディスプレイプロセッサ１１４についてのデータを準備するために各面を系統的に処理する。
【００７２】
図５Ａに示されるように、ＡＰＩライブラリ１２０は、基礎にあるネイティブプラットフォームレンダリングＡＰＩ５０８も含んでいる。ＡＰＩ５０８は、アプリケーション命令１１８の実行中にデバイス１００によってインプリメントされる基礎にあるネイティブプラットフォームによって提供されるこれらのＡＰＩである。ＥＧＬ  ＡＰＩ５０６は、基礎にあるネイティブプラットフォームレンダリングＡＰＩ５０８と、ＯｐｅｎＧＬ  ＥＳレンダリングＡＰＩ５０２とＯｐｅｎＶＧレンダリングＡＰＩ５０４との両方と、の間のプラットフォームインターフェースレイヤを提供する。図５Ｂに示されるように、ドライバ１２２は、基礎にあるネイティブプラットフォームレンダリングドライバ５２８を含んでいる。ドライバ５２８は、アプリケーション命令１１８および／またはＡＰＩライブラリ１２０の実行中にデバイス１００によってインプリメントされる基礎にあるネイティブプラットフォームによって提供されるこれらのドライバである。ＥＧＬドライバ５２６は、基礎にあるネイティブプラットフォームレンダリングドライバ５２８と、ＯｐｅｎＧＬ  ＥＳレンダリングドライバ５２２とＯｐｅｎＶＧレンダリングドライバ５２４との両方と、の間のプラットフォームインターフェースレイヤを提供する。
【００７３】
図６は、本開示の別の態様による、１組のレンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイし、または組み合わせるために使用されることができるデバイス６００を示すブロック図である。この態様においては、図６に示されるデバイス６００は、図１に示されるデバイス１００の一例のインスタンシエイションである。デバイス６００は、グラフィックス処理システム６０２と、メモリ６０４と、ディスプレイデバイス６０６と、を含む。図１に示されるメモリ１０４と同様に、図６のメモリ６０４は、アプリケーション命令６１８と、ＡＰＩライブラリ６２０と、ドライバ６２２と、面情報６２４と、のためのストレージ空間を含んでいる。図１に示されるグラフィックス処理システム１０２と同様に、図２のグラフィックス処理システム６０２は、制御プロセッサ６０８と、グラフィックスプロセッサ６１０と、ディスプレイプロセッサ６１４と、面バッファ６１２と、フレームバッファ６６０と、を含む。図６の中のグラフィックス処理システム６０２内に含まれるように示されているが、面バッファ６１２とフレームバッファ６６０のうちの一方または両方は、一態様においては、メモリ６０４内に直接に含まれることもできる。
【００７４】
グラフィックスプロセッサ６１０は、プリミティブ処理ユニット(primitive processing unit)６６２と、ピクセル処理ユニット(pixel processing unit)６６４と、を含む。プリミティブ処理ユニット６６２は、グラフィックス処理システム６０２内でプリミティブに関するオペレーションを実行する。プリミティブは、複数の頂点(vertices)によって定義され、そして点(points)、線セグメント(line segments)、三角形、長方形を含むことができる。そのようなオペレーションは、プリミティブ変換オペレーションと、プリミティブ点灯オペレーション(primitive lighting operations)と、プリミティブクリッピングオペレーションと、を含むことができる。ピクセル処理ユニット６６４は、グラフィックス処理システム６０２内で、個々のピクセルまたはフラグメント(fragments)上のピクセルオペレーション(pixel operations)を実行する。例えば、ピクセル処理ユニット６６４は、ＯｐｅｎＧＬ  ＥＳ  ＡＰＩの中で指定されるピクセルオペレーションを実行することができる。そのようなオペレーションは、ピクセル所有権テスト(pixel ownership testing)と、はさみテスト(scissors testing)と、マルチサンプルフラグメントオペレーションと、アルファテストと、ステンシルテスト(stencil testing)と、深さバッファテストと、ブレンディングと、ディザリング(dithering)と、論理オペレーションと、を含むことができる。
【００７５】
ディスプレイプロセッサ６１４は、オーバーレイスタックと、選択された複合アルゴリズムとに従って、面をオーバーレイすること、およびアンダーレイすることにより、グラフィックス処理システム６０２内で２つ以上の面を組み合わせる。複合アルゴリズムは、例えば、（１）上書き、（２）アルファブレンディング、（３）アルファブレンディングを有さないカラーキーイング、（４）アルファブレンディングを有するカラーキーイングなど、選択された複合モードに基づいたものとすることができる。ディスプレイプロセッサ６１４は、上書きブロック(overwrite block)６６８と、ブレンディングユニット(blending unit)６７０と、カラーキーブロック(color-key block)６７２と、組み合わされたカラーキーアルファブレンドブロック(color-key alpha blend block)６７４と、を含む。
【００７６】
上書きブロック６６８は、ディスプレイプロセッサ６１４についての上書きオペレーションを実行する。２つ以上のレンダリングされたグラフィックス面が、オーバーラップする場合には、上書きブロック６６８は、最高の面レベルを有する、レンダリングされたグラフィックス面のうちの１つを選択し、そしてレンダリングされたグラフィックス面のうちの選択された１つが、レンダリングされたグラフィックス面のオーバーラップする部分について表示されるように、グラフィックスフレームをフォーマットすることができる。
【００７７】
ブレンディングユニット６７０は、ディスプレイプロセッサ６１４についてのブレンディングオペレーションを実行する。ブレンディングオペレーションは、例えば、全面一定アルファブレンディングオペレーション(full surface constant alpha blending operation)と、全面ピクセル毎アルファブレンディングオペレーション(full surface per-pixel alpha blending operation)と、を含むことができる。
【００７８】
カラーキーブロック６７２は、アルファブレンディングを有さないカラーキーオペレーションを実行する。例えば、カラーキーブロック６７２は、どのピクセルが、キーカラー（例えば、マゼンタ）にマッチするかを決定するために２つのオーバーラップする面のうちの高い方の面のオーバーラップする部分内の各ピクセルをチェックすることができる。キーカラーにマッチする任意のピクセルでは、カラーキーブロック６７２は、低い方の面からの対応するピクセル（すなわち、同じディスプレイロケーションを有するピクセル）を出力ピクセル（すなわち、表示されるピクセル）として選択することができる。キーカラーにマッチしない任意のピクセルでは、カラーキーブロック６７２は、高い方の面からのピクセルを出力ピクセルとして選択することができる。
【００７９】
組み合わされたカラーキーアルファブレンドブロック６７４は、カラーキーイングオペレーション、ならびにアルファブレンディングオペレーションを実行する。例えば、ブロック６７４は、どのピクセルがキーカラーにマッチするかを決定するために２つのオーバーラップする面のうちの高い方の面のオーバーラップする部分内の各ピクセルをチェックすることができる。キーカラーにマッチする任意のピクセルでは、ブロック６７４は、低い方の面からの対応するピクセル（すなわち、同じディスプレイロケーションを有するピクセル）を出力ピクセルとして選択することができる。キーカラーにマッチしない任意のピクセルでは、ブロック６７４は、出力ピクセルを生成するために低い方の面からの対応するピクセルと、高い方の面のピクセルをブレンドすることができる。
【００８０】
ディスプレイプロセッサ６１４は、図６においては４つの例示のオペレーションを有するものとして示されるが、他の例においては、ディスプレイプロセッサ６１４は、様々なピクセルブレンディングおよびキーイングのアルゴリズムを実行するもっと多くの、あるいはもっと少ないオペレーティングブロック(operating blocks)を有することもできる。いくつかの場合には、ディスプレイプロセッサ６１４が実行することができる固有のピクセルオペレーションの総数は、グラフィックスプロセッサ６１０が実行することができる固有のピクセルオペレーションの総数よりも少なくすることができる。ディスプレイプロセッサ１１４は、スケーリングおよび回転を含めて、他のレンダリング後のファンクションをレンダリングされたグラフィックスの面またはフレーム上で実行することもできる。
【００８１】
複雑なレンダリングを実行するグラフィックスプロセッサ６１０と、オンスクリーン面とオフスクリーン面とを組み合わせるディスプレイプロセッサ６１４とにグラフィックス処理を分割することにより、そしてプロセッサ６１０と６１４とを並列に動作させることにより、グラフィックスプロセッサ６１０のクロックレートは、低減されることができる。さらに、電力消費は、グラフィックスプロセッサ６１０のクロックレートと共に非線形に増大するので、かなりの省電力が、グラフィックス処理システム６０２において達成されることができる。
【００８２】
いくつかの態様においては、ディスプレイプロセッサ６１４は、グラフィックスプロセッサ６１０の中のグラフィックスパイプラインよりも複雑でないグラフィックスパイプラインを含むことができる。例えば、ディスプレイプロセッサ６１４の中のグラフィックスパイプラインは、任意のプリミティブオペレーションを実行することができない。別の例としては、ブレンディングユニット６７０によって提供されるピクセルオペレーションの総数は、ピクセル処理ユニット６６４によって提供されるピクセルオペレーションの総数よりも少ない可能性がある。低減された量のオペレーションをディスプレイプロセッサ６１４内に含めることにより、グラフィックスパイプラインは、グラフィックス処理システム６０２において、かなりの省電力を提供し、そしてスループットを増大させるように、簡略化され、そして能率化される(streamlined)ことができる。
【００８３】
一態様においては、グラフィックスアプリケーションは、連続するフレームの間で比較的静的である多数のオブジェクトを含むことができる。ビデオゲームアプリケーションにおいては、静的オブジェクトの例は、十字形(crosshairs)と、スコアボックスと、タイマーと、スピードメータと、ビデオゲームディスプレイ上に示される他の静的なエレメントまたは変化しないエレメントと、を含むことができる。静的オブジェクトは、連続するグラフィックスフレームの間の何らかの動きまたは変化を有することができるが、これらの動きまたは変化の性質は、多くの場合にフレームごとの全オブジェクトのレンダリングを必要としない可能性があることに注意すべきである。グラフィックス処理システム６０２において、静的オブジェクトは、オフスクリーン面に割り当てられ、そしてグラフィックスプロセッサ６１０の中で使用される可能性がある複雑なグラフィックスパイプラインよりも複雑でないグラフィックスパイプラインを使用することにより、レンダリングされることができる。例えば、制御プロセッサ６０８は、グラフィックスプロセッサ６１０よりも少ない電力を使用して単純な２Ｄ面をレンダリングすることができる可能性がある。次いで、これらの面は、制御プロセッサ６０８によってレンダリングされ、そしてもっと複雑とすることができる他の面との組合せのためにディスプレイプロセッサ６１４へと直接に送られることができる。この例においては、静的２Ｄ面をレンダリングするために使用される組み合わされたグラフィックスパイプライン（すなわち、制御プロセッサ６０８およびディスプレイプロセッサ６１４）は、グラフィックスプロセッサ６１０の複雑なグラフィックスパイプラインよりも少ない電力を消費することができる。他方、グラフィックスプロセッサ６１０は、制御プロセッサ６０８よりも効率的に複雑な３Ｄグラフィックスをレンダリングすることができる可能性がある。したがって、デバイス６００は、レンダリングされるべきオブジェクトの特性に応じて異なるグラフィックスパイプラインを選択的に選択することによりグラフィックス面をより効率的にレンダリングするために使用されることができる。
【００８４】
別の例として、制御プロセッサ６０８は、メモリ６０４、または面バッファ６１２に記憶されるあらかじめレンダリングされた面を取り出し、あるいは取り出すようにディスプレイプロセッサ６１４に指示することができる。あらかじめレンダリングされた面は、ユーザアプリケーションによって提供され、あるいはリソースがあまり大量に利用されないときにはグラフィックス処理システム６０２によって生成されることができる。制御プロセッサ６０８は、あらかじめレンダリングされた面のおのおのに対して面レベルを割り当て、そして選択された面レベルに従ってあらかじめレンダリングされた面を他のレンダリングされた面と組み合わせるようにディスプレイプロセッサ６１４に指示することができる。このようにして、あらかじめレンダリングされた面は、グラフィックスプロセッサ６１０の中の複雑なグラフィックスパイプラインを完全にバイパスし、これは、デバイス６００に対してかなりの省電力を提供する。
【００８５】
さらに別の例として、いくつかのオブジェクトは、比較的静的であるが、完全に静的ではないことができる。例えば、カーレーシングゲームは、車の現在のスピードを指し示す針を有するスピードメーターダイアルを有することができる。スピードメーターダイアルは、ダイアルが、連続するフレームの中で変化し、または移動することがないので、完全に静的とすることができ、そして針は、針が、車のスピードが、変化するときにフレームごとにわずかに移動するので、比較的静的とすることができる。グラフィックスプロセッサ６１０の中で複雑なグラフィックスパイプラインを使用してフレームごとに針をレンダリングするのではなくて、針のいくつかの異なるインスタンシエイションが、異なるあらかじめレンダリングされた面上で提供されることができる。例えば、あらかじめレンダリングされた各面は、車の異なるスピードを指し示すように異なる位置に針を描くことができる。これらの面のすべては、オーバーレイスタックにバインドされることができる。そのときには、車のスピードが、変化するにつれて、制御プロセッサ２０８は、車の現在のスピードを指し示す針の適切なインスタンシエイションをイネーブルし、そして針の他のインスタンシエイションをディスエーブルすることができる。それ故に、連続するフレームの間の位置を変化させることができる針は、制御プロセッサ６０８、またはグラフィックスプロセッサ６１０のいずれかによってフレームごとにレンダリングされる必要はない。あらかじめレンダリングされた面を選択的にイネーブルすること、およびディスエーブルすることにより、デバイス６００は、グラフィックスフレームをより効率的にレンダリングすることができる。
【００８６】
図７は、本開示の別の態様による、１組のレンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイし、組み合わせるために使用されることができるデバイス７００を示すブロック図である。図７は、２つの面バッファと同様に２つのグラフィックスプロセッサが含まれることを除いて、図１に示されるデバイス１００と構造において類似したデバイス７００を示している。デバイス７００は、グラフィックス処理システム７０２と、メモリ７０４と、ディスプレイデバイス７０６と、を含む。図１に示されるメモリ１０４と同様に、図７のメモリ７０４は、アプリケーション命令７１８と、ＡＰＩライブラリ７２０と、ドライバ７２２と、面情報７２４と、のためのストレージ空間を含んでいる。図１に示されるグラフィックス処理システム１０２と同様に、図７のグラフィックス処理システム７０２は、制御プロセッサ７０８と、ディスプレイプロセッサ７１４と、フレームバッファ７６０と、を含む。図７の中のグラフィックス処理システム７０２内に含まれるように示されているが、面バッファ７１２と、面バッファ７１３と、フレームバッファ７６０とのうちのどれもが、いくつかの態様においては、メモリ７０４内に直接に含まれることもできる。
【００８７】
グラフィックス処理システム７０２はまた、３Ｄグラフィックスプロセッサ７１０と、２Ｄグラフィックスプロセッサ７１１と、３Ｄ面バッファ７１２と、２Ｄ面バッファ７１３と、を含む。図７に示されるように、グラフィックスプロセッサ７１０、７１１のおのおのは、制御プロセッサ７０８と、ディスプレイプロセッサ７１４とに動作的に結合される。さらに、面バッファ７１２、７１３のおのおのは、制御プロセッサ７０８と、ディスプレイプロセッサ７１４と、フレームバッファ６６０とに動作的に結合される。３Ｄグラフィックスプロセッサ７１０は、グラフィックス処理システム７０２内で３Ｄグラフィックス処理パイプラインを形成するために、３Ｄ面バッファ７１２に動作的に結合される。同様に、２Ｄグラフィックスプロセッサ７１１は、グラフィックス処理システム７０２内で２Ｄグラフィックス処理パイプラインを形成するために、２Ｄ面バッファ７１３に動作的に結合される。図１の中の面バッファ１１２と同様に、３Ｄ面バッファ７１２と、２Ｄ面バッファ７１３とは、おのおの１つまたは複数の面バッファを備えることができ、そして１つまたは複数の面バッファのうちのおのおのは、１つまたは複数のレンダリングされた面を記憶することができる。
【００８８】
一態様においては、３Ｄグラフィックスプロセッサ７１０は、３Ｄレンダリングアルゴリズムを効率的にインプリメントする加速された３Ｄグラフィックスレンダリングパイプラインを含むことができる。２Ｄグラフィックスプロセッサ７１１は、２Ｄレンダリングアルゴリズムを効率的にインプリメントする加速された２Ｄグラフィックスレンダリングパイプラインを含むことができる。例えば、３Ｄグラフィックスプロセッサ７１０は、ＯｐｅｎＧＬ  ＥＳ  ＡＰＩコマンドに従って面を効率的にレンダリングすることができ、そして２Ｄグラフィックスプロセッサ７１１は、ＯｐｅｎＶＧ  ＡＰＩコマンドに従って面を効率的にレンダリングすることができる。
【００８９】
グラフィックス処理システム７０２において、制御プロセッサ７０８は、３Ｄレンダリングパイプライン（すなわち、７１０、７１２）を使用して３Ｄ面をレンダリングすることができ、そして２Ｄレンダリングパイプライン（すなわち、７１１、７１３）を使用して２Ｄ面をレンダリングすることもできる。例えば、３Ｄグラフィックスプロセッサ７１０は、第１の組のレンダリングされたグラフィックス面をレンダリングし、そして第１の組のレンダリングされたグラフィックス面を３Ｄ面バッファ７１２に記憶することができる。同様に、２Ｄグラフィックスプロセッサ７１１は、第２の組のレンダリングされたグラフィックス面をレンダリングし、そして第２の組のレンダリングされたグラフィックス面を２Ｄ面バッファ７１３に記憶することができる。ディスプレイプロセッサ７１４は、面バッファ７１２からの３Ｄのレンダリングされたグラフィックス面と、面バッファ７１３からの２Ｄのレンダリングされたグラフィックス面とを取り出し、そして各面について選択された面レベルに従って、あるいはオーバーレイスタックに従って２Ｄおよび３Ｄの面をオーバーレイすることができる。この例においては、レンダリングパイプラインのおのおのは、レンダリングされた２Ｄおよび３Ｄの面を記憶する専用の面バッファを有する。グラフィックス処理システム７０２内の専用の面バッファ７１２、７１３のために、プロセッサ７１０と、７１１とは、互いに同期化される必要はない可能性がある。言い換えれば、３Ｄグラフィックスプロセッサ７１０と、２Ｄグラフィックスプロセッサ７１１とは、一態様に応じて、面バッファ書き込みオペレーションのタイミングを調整する必要なしに互いに独立に動作することができる。それらのプロセッサは、同期化される必要がないので、グラフィックス処理システム７０２内のスループットは、改善される。したがって、グラフィックス処理システム７０２は、別の３Ｄグラフィックス加速パイプラインと、別の２Ｄグラフィックス加速パイプラインとを使用することにより、面の効率的なレンダリングを提供する。
【００９０】
図８は、レンダリングされたグラフィックス面をオーバーレイし、または組み合わせるための方法８００のフローチャートである。例示の目的のために、後述の説明は、図１のデバイス１００に関する方法８００の性能を説明している。しかしながら、方法８００は、図１、６、または７に示されるデバイスのうちのどれを使用しても実行されることができる。さらに、いくつかの場合には、説明は、特定のプログラマブルプロセッサが、特定のオペレーションを実行することを明細に述べることができる。しかしながら、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つまたは複数は、方法８００に関して説明されるアクションのうちのどれを実行することもできることに注意すべきである。
【００９１】
図８に示されるように、ディスプレイプロセッサ１１４は、複数のレンダリングされたグラフィックス面を取り出すことができる（８０２）。レンダリングされたグラフィックス面は、プログラマブルプロセッサ１０８、１１０、または１１４のうちの１つによって生成され、またはレンダリングされることができる。一態様においては、プログラマブルプロセッサ１０８、１１０、または１１４のうちの１つは、１つまたは複数の面バッファ１１２内に、あるいはメモリ１０４内にレンダリングされたグラフィックス面を記憶することができ、そしてディスプレイプロセッサ１１４は、１つまたは複数の面バッファ１１２から、あるいはメモリ１０４からレンダリングされたグラフィックス面を取り出すことができる。いくつかの態様においては、グラフィックスプロセッサ１１０は、加速された３Ｄグラフィックスパイプラインを使用することにより、少なくとも部分的に面をレンダリングすることができる。さらに、制御プロセッサ１０８は、汎用処理パイプラインを使用することにより、少なくとも部分的に１つまたは複数のグラフィックス面をレンダリングすることができる。一態様においては、グラフィックス処理システム１０２は、１つまたは複数のグラフィックス面をあらかじめレンダリングし、そしてあらかじめレンダリングされたグラフィックス面をメモリ１０４または面バッファ１１２のいずれかに記憶することができる。いくつかの場合には、プロセッサ１０８、または１１０は、レンダリングされた面を面バッファ１１２に記憶せずに、レンダリングされた面をディスプレイプロセッサ１１４に対して直接に送ることができる。
【００９２】
面レベルが、レンダリングされたグラフィックス面のおのおのについて選択される（８０４）。例えば、制御プロセッサ１０８、またはグラフィックスプロセッサ１１０のいずれかは、レンダリングされた面についての面レベルを選択し、そして選択された面レベル１１７を面バッファ１１２に記憶することができる。別の態様においては、アプリケーション命令１１８、またはＡＰＩライブラリ１２０の中のＡＰＩファンクションは、面レベルを選択し、そして選択された面レベル１１７を面バッファ１１２に記憶することができる。いくつかの態様においては、選択された面レベルは、レンダリングされた面をオーバーレイスタックに対してバインドすることにより選択されることができる。オーバーレイスタックは、おのおのが固有のレイヤレベルを有する複数のレイヤを含むことができる。面レベルは、レンダリングされた各面についてオーバーレイスタックの中の特定のレイヤを選択すること、および面について選択されたレイヤに対してレンダリングされた各面をバインドすることにより、選択されることができる。２つ以上の面が、同じレイヤにバインドされるときに、面レベルは、さらに、２つ以上の面についてのバインディング順序を決定することにより、選択されることができる。いくつかの場合には、選択された面レベルは、面バッファ１１２内に面レベルを記憶せずにディスプレイプロセッサ１１４に対して直接に送られることができる。一態様においては、レンダリングされたグラフィックス面のおのおのについての面レベルは、レンダリングされたグラフィックス面のどれかをディスプレイに対して出力することに先立って選択されることができる。別の態様においては、特定のレンダリングされたグラフィックス面についての面レベルは、特定の面をレンダリングすることに先立って選択されることができる。
【００９３】
ディスプレイプロセッサ１１４は、選択された面レベルに従って、レンダリングされたグラフィックス面をグラフィックスフレーム上へとオーバーレイする（８０６）。レンダリングされたグラフィックス面をオーバーレイすることは、１つまたは複数の他のレンダリングされたグラフィックス面とレンダリングされた面を組み合わせることを含むことができる。一態様においては、ディスプレイプロセッサ１１４は、１つまたは複数の複合モードまたはブレンディングモードに応じてグラフィックス面を組み合わせることができる。そのような複合モードの例は、（１）上書きと、（２）アルファブレンディングと、（３）アルファブレンディングを有さないカラーキーイングと、（４）アルファブレンディングを有するカラーキーイングと、を含む。ディスプレイプロセッサ１１４が、上書きする複合モードに応じてレンダリングされたグラフィックス面を組み合わせ、そして２つ以上のレンダリングされたグラフィックス面が、オーバーラップするときに、ディスプレイプロセッサ１１４は、最高の面レベルを有するレンダリングされたグラフィックス面のうちの１つを選択し、そしてレンダリングされたグラフィックス面のうちの選択された１つが、レンダリングされたグラフィックス面のオーバーラップする部分について表示されるように、グラフィックスフレームをフォーマットすることができる。ディスプレイプロセッサ１１４は、複数のレイヤを定義するオーバーレイスタックに従って、面を組み合わせることができる。各レイヤは、固有のレイヤレベルを有し、そしてレイヤにバインドされた１つまたは複数の面を含むことができる。ディスプレイプロセッサ１１４は、いくつかの場合には、そのときには、面が組み合わせられる順序を決定するためにオーバーレイスタックを横切ることができる。２つ以上の面が、同じレイヤにバインドされるときに、ディスプレイプロセッサは、さらに、それらの面が、２つ以上の面についてのバインディング順序を決定することにより組み合わせられる順序を決定することができる。オーバーレイスタックに応じてレンダリングされたグラフィックス面をオーバーレイするときに、ディスプレイプロセッサ１１４は、グラフィックスフレームがディスプレイ上で表示されるときに、オーバーレイスタック内の第１のレイヤレベルを有するレイヤにバインドされるレンダリングされたグラフィックス面が、第１のレイヤレベルよりも低いレイヤレベルを有するレイヤにバインドされるレンダリングされたグラフィックス面よりもディスプレイの閲覧者に対してより近くに見えるように、グラフィックスフレームをフォーマットすることができる。ディスプレイプロセッサ１１４が、レンダリングされたグラフィックス面をオーバーレイした後に、ディスプレイプロセッサ１１４は、フレームバッファ１６０に対して、またはディスプレイ１０６に対して、グラフィックスフレームを出力することができる。
【００９４】
図９は、レンダリングされたグラフィックス面をオーバーレイし、または組み合わせるための方法９００のフローチャートである。例示の目的のために、以下の説明は、図１の中のデバイス１００に関する方法９００の性能を説明している。しかしながら、方法９００は、図１、６、または７に示されるデバイスのうちのどれを使用しても実行されることができる。さらに、いくつかの場合には、説明は、特定のプログラマブルプロセッサが、特定のオペレーションを実行することを明細に述べることができる。しかしながら、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つまたは複数は、方法９００に関して説明されるアクションのうちのどれを実行することもできることに注意すべきである。さらに、方法９００は、本開示の中で説明される技法を使用する方法の単に一例にすぎない。したがって、オペレーションの順序は、図９に示される順序から変化することができる。
【００９５】
グラフィックスプロセッサ１１０は、オンスクリーン面をレンダリングすることができる（９０２）。オンスクリーン面は、ウィンドウ面とすることができ、そして加速された３Ｄグラフィックスパイプラインを使用してレンダリングされることができる。プログラマブルプロセッサ１０８、１１０、１１４のうちの１つは、オンスクリーン面についてのオーバーレイスタックを生成することができる（９０４）。オーバーレイスタックは、複数のレイヤを有することができ、そしてメモリ１０４の面情報ブロック１２４に、面バッファ１１２内に、あるいはグラフィックス処理システム１０２内の他のバッファ（図示されず）内に記憶されることができる。プログラマブルプロセッサ１０８、１１０のうちの一方は、１つまたは複数のオフスクリーン面をレンダリングすることができる（９０６）。例のオフスクリーン面は、ｐｂｕｆｆｅｒ面と、ｐｉｘｍａｐ面と、を含むことができる。いくつかの場合には、これらの面は、汎用処理パイプラインを使用することによりレンダリングされることができる。プログラマブルプロセッサ１０８、１１０、１１４のうちの１つは、各オフスクリーン面についてオーバーレイスタック内のレイヤを選択することができる（９０８）。一例として、ウィンドウ面は、オーバーレイスタック内のベースレイヤ（すなわち、レイヤ０）にバインドされることができ、そして選択されたレイヤは、ベースレイヤの前にオーバーレイし、または見えるオーバーレイレイヤと、ベースレイヤの背後にアンダーレイし、または見えるアンダーレイレイヤと、を備えることができる。一態様においては、選択されたレイヤはまた、ベースレイヤを備えることもできる。
【００９６】
さらに図９に示されるように、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つは、２つ以上のオーバーラップする面を含む各レイヤについての面バインディング順序を決定する（９１０）。面バインディング順序は、与えられたレイヤについての面の望ましい表示順序に基づいたものとすることができる。例えば、特定のレイヤにバインドされる面は、その後になって同じレイヤにバインドされた任意の面の背後に見えることができる。プログラマブルプロセッサ１０８、１１０、１１４のうちの１つは、面バインディング順序に応じて、オーバーレイスタックの個々の選択されたレイヤに対してオフスクリーン面をバインドすることができる（９１２）。一態様においては、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つは、オフスクリーン面に加えて、オーバーレイスタック内のレイヤに対してオンスクリーン面をバインドすることができる。次いで、プログラマブルプロセッサ１０８、１１０、１１４のうちの１つは、表示されるべき各グラフィックス面についてオーバーレイスタック内の個々の面またはレイヤを選択的にイネーブルし、またはディスエーブルし（９１４）、そして次いでオーバーレイスタックにバインドされる各面について複合モードまたはブレンディングモードを選択することができる（９１６）。複合モードまたはブレンディングモードは、単純な上書き、一定アルファブレンディングを有するカラーキーイング、一定アルファブレンディングを有さないカラーキーイング、全面一定アルファブレンディング、または全面ピクセル毎アルファブレンディングのうちの１つとすることができる。最後に、ディスプレイプロセッサ１１４は、オーバーレイスタックと、面バインディング順序と、選択されたブレンディングモードとに応じて面を組み合わせ、またはオーバーレイする（９１８）。一態様においては、オーバーレイスタック内のレイヤが、グラフィックスフレームについてイネーブルされるときに、ディスプレイプロセッサ１１４は、グラフィックスフレームを生成するために、レイヤにバインドされるレンダリングされたグラフィックス面のおのおのを処理することができる。同様に、オーバーレイスタック内のレイヤが、グラフィックスフレームについてディスエーブルされるときに、ディスプレイプロセッサ１１４は、グラフィックスフレームを生成するために、レイヤにバインドされるどのようなレンダリングされたグラフィックス面も処理することができない。別の態様においては、レンダリングされたグラフィックス面が、グラフィックスフレームについてイネーブルされるとき、ディスプレイプロセッサ１１４は、第１のグラフィックスフレームを生成するために、レンダリングされたグラフィックス面を処理することができる。逆に、レンダリングされたグラフィックス面が、第１のグラフィックスフレームについてディスエーブルされるときには、ディスプレイプロセッサ１１４は、第１のグラフィックスフレームを生成するために、レンダリングされたグラフィックス面を処理することができない。いくつかの場合には、オーバーレイスタックに関連づけられたウィンドウ面は、主要なウィンドウ面であると考えられることができる。一態様によれば、主要なウィンドウ面は、ディスエーブルされることができない。他の態様においては、主要なウィンドウ面は、ディスエーブルされることができる。
【００９７】
一態様においては、ＥＧＬ拡張が、結果として生ずるグラフィックスフレームを生成するために、１組のＥＧＬ面を組み合わせるために提供される。ＥＧＬ拡張は、オーバーレイスタックをセットアップすることと、面を組み合わせることと、に関連した少なくとも７つの新しいファンクションを提供することができる。７つの新しいファンクションについての例のファンクション宣言が、以下に示される。
【数１】
2010527077.tif 000003
【００９８】
eglCreateCompositeSurfaceQUALCOMMファンクションは、複合面および／またはオーバーレイスタックを生成するために呼び出されることができる。eglSurfaceOverlayEnableQUALCOMMファンクションは、全部のオーバーレイスタック、またはオーバーレイスタックに関連づけられた個々の面をイネーブルし、またはディスエーブルするために呼び出されることができる。eglSurfaceOverlayLayerEnableQUALCOMMファンクションは、オーバーレイスタック内の特定のレイヤをイネーブルし、またはディスエーブルするために呼び出されることができる。eglSurfaceOverlayBindQUALCOMMファンクションは、オーバーレイスタック内の特定のレイヤに対して面をバインドし、またはアタッチする(attach)ために呼び出されることができる。eglGetSurfaceOverlayBindingQUALCOMMファンクションは、複合面（すなわち、オーバーレイスタック）と、特定の面がバインドされる、オーバーレイスタック内のレイヤとを決定するために呼び出されることができる。eglGetSurfaceOverlayQUALCOMMファンクションは、特定の面がイネーブルされるかどうか、ならびにその面がバインドされるレイヤがイネーブルされるかどうかを決定するために呼び出されることができる。eglGetSurfaceOverlayCapsQUALCOMMファンクションは、特定のドライバおよびハードウェアの環境の中の複合面についてのインプリメンテーション制限を受け取るために呼び出されることができる。
【００９９】
一態様においては、ＥＧＬ拡張は、追加のデータ型構造(data type structure)を提供することができる。１つのそのような構造は、複合面（すなわち、オーバーレイスタック）についてのインプリメンテーション制限を提供する。複合面は、オーバーレイスタックを記憶し、あるいはそうでなくてオーバーレイスタックに関連づけられることができる。一例のデータ構造が、以下に示される。
【数２】
2010527077.tif 000004
【０１００】
４つのEGLintメンバーは、複合面について可能にされるオーバーレイレイヤの最大数と、複合面について可能にされるアンダーレイ面の最大数と、オーバーレイスタック内の各レイヤに対してバインドされ、またはアタッチされることが可能にされる面の最大数と、オーバーレイスタック内のすべてのレイヤにバインドされることが可能にされる面の最大総数と、をそれぞれ提供する。第１のEGLBooleanメンバーは、複合面が、ｐｂｕｆｆｅｒ面をサポートすることになるかどうかに関連した情報を提供し、そして第２のEGLBooleanメンバーは、複合面が、ｐｉｘｍａｐ面をサポートすることになるかどうかに関連した情報を提供する。
【０１０１】
ＥＧＬのEGLSurfaceデータ構造は、レンダリングされた面についてのタイプEGLCompSurf、EGLBoolean、およびEGLCompositeSurfaceCapsの３つの追加のメンバー、を含むことができる。EGLCompSurfメンバーは、関連する複合面のアドレスに対するポインタを提供し、EGLBooleanメンバーは、レンダリングされた面が、イネーブルされるかどうかを決定し、そしてEGLCompositeSurfaceCapsメンバーは、関連する複合面のインプリメンテーション制限についての情報を提供する。
【０１０２】
EGLCompSurfデータ構造は、複合面（すなわち、オーバーレイスタック）に関連した情報を含むことができる。一例のEGLCompSurfデータ構造が、以下に示される。
【数３】
2010527077.tif 000005
【０１０３】
EGLCompSurfデータ構造は、複合面についての少なくとも４つのメンバー：タイプEGLBooleanの１つのメンバーと、タイプEGLSurfaceの１つのメンバーと、EGLCompLayerに対するタイプポインタ(type pointer)の２つのアレイメンバーと、を含むことができる。EGLBooleanメンバーは、オーバーレイスタックについてのイネーブルフラグを提供し、そしてEGLSurfaceメンバーは、関連するウィンドウ面に対するポインタを提供する。２つのEGLCompLayerアレイメンバーは、オーバーレイスタック内にある特定のEGLCompLayerメンバーに対するポインタのアレイを提供する。第１のEGLCompLayerアレイメンバーは、オーバーレイスタック内のオーバーレイレイヤに対するアドレスポインタのアレイを提供することができ、そして第２のEGLCompLayerアレイメンバーは、アンダーレイスタック内のアンダーレイレイヤに対するアドレスポインタのアレイを提供することができる。
【０１０４】
EGLCompLayerデータ構造は、オーバーレイスタック内の個別のレイヤに関連した情報を含むことができる。一例のEGLCompLayerデータ構造が、以下に示される。
【数４】
2010527077.tif 000006
【０１０５】
EGLCompLayerデータ構造は、複合面についての少なくとも４つのメンバー：タイプEGLintの２つのメンバーと、タイプEGLBooleanの１つのメンバーと、タイプEGLSurfaceの１つのアレイメンバーと、を含むことができる。第１のEGLintメンバーは、レイヤのレベルを提供し、そして第２のEGLintメンバーは、レイヤに対してバインドされ、またはアタッチされる面の総数を提供する。EGLSurfaceアレイメンバーは、レイヤに対してバインドされ、またはアタッチされる面に対するポインタのアレイを提供する。
【０１０６】
特定の複合面を生成するために、ファンクションeglCreateCompositeSurfaceQUALCOMMは、呼び出されることができる。ユーザプログラムまたはＡＰＩは、EGLDisplay（すなわち、グラフィックスが描画される抽象ディスプレイ(abstract display)）に対するポインタと、オーバーレイスタックについてのウィンドウ面として使用されることになるタイプEGLSurfaceのウィンドウ面と、を含めて、いくつかのパラメータをファンクションに渡すことができる。さらに、ユーザプログラムまたはＡＰＩは、結果として生ずる複合面の望ましい属性を定義するEGLintアレイデータ構造を渡すことができる。ファンクションは、オーバーレイスタックを含むタイプEGLSurfaceの複合面を戻すことができる。
【０１０７】
複合面に関連づけられたオーバーレイスタックまたは個々の面をイネーブルし、またはディスエーブルするために、eglSurfaceOverlayEnableQUALCOMMファンクションは、呼び出されることができる。ユーザプログラムまたはＡＰＩは、適切なEGLDisplayに対するポインタ、ならびにEGLSurfaceに対するポインタを渡すことができ、このEGLSurfaceは、オーバーレイスタックを含む複合面、またはオーバーレイスタック内の個別の面のいずれかである。ユーザプログラムまたはＡＰＩはまた、面をイネーブルすべきか、またはディスエーブルすべきかを示すEGLBooleanパラメータを渡す。ファンクションは、ファンクションが、正常であったか、あるいはエラーが起こっているかを示すEGLBooleanパラメータを戻すことができる。
【０１０８】
オーバーレイスタック内の特定のレイヤをイネーブルし、またはディスエーブルするために、eglSurfaceOverlayLayerEnableQUALCOMMファンクションは、呼び出されることができる。ユーザプログラムまたはＡＰＩは、適切なEGLDisplayに対するポインタ、ならびにEGLSurfaceに対するポインタを渡すことができ、このEGLSurfaceは、オーバーレイスタックを含む複合面である。ユーザプログラムまたはＡＰＩはまた、イネーブルされるべき、またはディスエーブルされるべきオーバーレイスタック内の望ましいレイヤを示すEGLintパラメータを渡す。最後に、ユーザプログラムまたはＡＰＩはまた、オーバーレイスタック内に含まれるレイヤをイネーブルすべきか、またはディスエーブルすべきかを示すEGLBooleanパラメータを渡す。ファンクションは、ファンクションが正常であったか、あるいはエラーが起こっているかを示すEGLBooleanパラメータを戻すことができる。
【０１０９】
オーバーレイスタック内の特定のレイヤに対して面をバインドし、またはアタッチするために、eglSurfaceOverlayBindQUALCOMMファンクションは、呼び出されることができる。ユーザプログラムまたはＡＰＩは、適切なEGLDisplayに対するポインタ、ならびにEGLSurfaceに対するポインタを渡すことができ、このEGLSurfaceは、オーバーレイスタックを含む複合面である。さらに、ユーザプログラムまたはＡＰＩは、オーバーレイスタックに対してバインドされることになるEGLSurfaceに対するアドレスポインタと、オーバーレイスタック内のどのレイヤに対して面がバインドされるべきかを示すタイプEGLintの値と、を渡す。最後に、ユーザプログラムまたはＡＰＩはまた、個別の面をイネーブルすべきか、またはディスエーブルすべきかを示すEGLBooleanパラメータを渡す。ファンクションは、ファンクションが正常であったか、あるいはエラーが起こっているかを示すEGLBooleanパラメータを戻すことができる。
【０１１０】
特定の面がバインドされる、オーバーレイスタック内のレイヤを決定するために、eglGetSurfaceOverlayBindingQUALCOMMファンクションは、呼び出されることができる。ユーザプログラムまたはＡＰＩは、適切なEGLDisplayに対するポインタ、ならびにレイヤ情報がシークされるEGLSurfaceに対するポインタを渡すことができる。ユーザプログラムまたはＡＰＩはまた、EGLSurfaceポインタに対するポインタを渡し、ここでオーバーレイスタックを含む複合面が、戻される。最後に、ユーザプログラムまたはＡＰＩは、ファンクションが、面がバインドされるレイヤレベルを戻すために使用するEGLintポインタを渡す。ファンクションは、ファンクションが正常であったか、あるいはエラーが起こっているかを示すEGLBooleanパラメータを戻すことができる。
【０１１１】
特定の面がイネーブルされるかどうか、ならびにその面がバインドされるレイヤが、イネーブルされるかどうかを決定するために、eglGetSurfaceOverlayQUALCOMMファンクションは、呼び出されることができる。ユーザプログラムまたはＡＰＩは、適切なEGLDisplayに対するポインタ、ならびにEGLSurfaceに対するポインタを渡すことができ、このEGLSurfaceは、情報がシークされる面である。ユーザプログラムまたはＡＰＩはまた、ファンクションが、面についての情報を戻すために使用する２つのEGLBooleanパラメータを渡すことができる。第１のEGLBooleanパラメータは、面がバインドされるレイヤが、イネーブルされるかどうかを示し、そして第２のEGLBooleanパラメータは、特定の面がイネーブルされるかどうかを示す。ファンクションは、ファンクションが正常であったか、あるいはエラーが起こっているかを示すEGLBooleanパラメータを戻すことができる。
【０１１２】
特定のネイティブウィンドウに関連づけられた複合面またはオーバーレイスタックについてのインプリメンテーション制限を受け取るために、eglGetSurfaceOverlayCapsQUALCOMMファンクションは、呼び出されることができる。ユーザプログラムまたはＡＰＩは、適切なEGLDisplayに対するポインタ、ならびにEGLSurfaceに対するポインタを渡すことができ、このEGLSurfaceは、インプリメンテーション制限情報がシークされるウィンドウ面である。さらに、ユーザプログラムまたはＡＰＩは、ファンクションが、特定のウィンドウ面について許可される複合面についてのインプリメンテーション制限を戻すために使用するタイプEGLCompositeSurfaceCapsのデータに対するポインタを渡す。ファンクションは、ファンクションが正常であったか、あるいはエラーが起こっているかを示すEGLBooleanパラメータを戻すことができる。
【０１１３】
結果として生ずるグラフィックスフレームを生成するために、１組のＥＧＬ面を組み合わせることをサポートするＥＧＬ拡張のインプリメンテーションの使用例を提供するために、サンプルコードが、以下に提供される。サンプルコードは、ターゲットデバイスが、ビデオグラフィックスアレイ(Video Graphics Array)（ＶＧＡ）液晶(Liquid Crystal Display)（ＬＣＤ）画面を有するが、アプリケーションは、性能を改善し、そして電力消費を低減するために３Ｄコンテンツをクォータービデオグラフィックスアレイ(Quarter Video Graphics Array)（ＱＶＧＡ）ウィンドウ面に対してレンダリングするというシナリオをインプリメントする。コードは、そのときには、ひとたびレイヤが組み合わせられた後には、解像度(resolution)を全ＶＧＡ画面サイズまでスケーリングする。
【０１１４】
アプリケーションは、カーレーシングゲームであり、これは、アンダーレイレイヤの中に部分的なスカイボックス(skybox)を有する。ゲームはまた、左下隅に丸いアナログタコメータと、共に右下隅に位置するデジタルスピードメータとギアインジケータと、を含むオーバーレイレイヤを有する。サンプルコードは、上記にリストアップされたファンクションとデータ構造とのうちの多くを利用する。サンプルコードにおいては、面、オーバーレイ、およびアンダーレイのサイジング(sizing)は、面、オーバーレイ、およびアンダーレイが、ウィンドウ面よりもサイズが小さいように、セットアップされる。これは、結果として生ずるグラフィックスフレームの過剰な平均深さの複雑さを回避するために、故意に行われる。サンプルを実行することに先立って、ＥＧＬ初期化が、起こるべきであり、これは、ＥＧＬディスプレイを生成することを含んでいる。
【数５】
2010527077.tif 000007
2010527077.tif 000008
2010527077.tif 000009
2010527077.tif 000010
【０１１５】
上記のサンプルコードにおいて、ＥＧＬウィンドウ面が、生成され、このＥＧＬウィンドウ面は、最初に６４０ピクセルの幅と、４８０ピクセルの高さとを有する。この例においては、ウィンドウ面の大きさ(dimension)は、ターゲットディスプレイのＶＧＡディスプレイの大きさにマッチする。次いで、ウィンドウ面は、バッファメモリならびに３Ｄレンダリング時間を節約するためにＱＶＧＡ（３２０×２４０）ディスプレイの大きさへとサイズ変更される(resized)。サイズ変更することは、ソース長方形（すなわち、src_rect）と、宛先長方形（すなわち、dst_rect）と、をセットアップすることにより、行われる。ソース長方形は、結果として生ずる面へと再スケーリングされる(rescaled)ことになるＥＧＬウィンドウ面の一部分を指定し、または選択する。宛先長方形は、ソース長方形によって指定されるＥＧＬウィンドウ面の一部分が、再スケーリングされることになる最終的な大きさを指定する。面は、ウィンドウ面であり、そしてsrc_rectは、初期ウィンドウサイズよりも小さいので、ウィンドウ面に関連づけられるバッファは、新しい面の大きさにマッチするように縮小され、それによってかなりのメモリ空間と、レンダリング帯域幅とを節約している。これらの変数をセットアップした後に、eglSetSurfaceScaleQUALCOMMファンクションと、eglSurfaceScaleEnableQUALCOMMファンクションとは、ソース長方形と、宛先長方形とに応じてウィンドウ面をサイズ変更するために呼び出される。
【０１１６】
次いで、いくつかのｐｂｕｆｆｅｒ面が、上記の様々なオーバーレイとアンダーレイとのおのおのについて、生成され、サイズ変更され、そして位置づけされる。先ず、ｐｂｕｆｆｅｒ面が、スカイボックスアンダーレイ面を描画するために生成される。スカイボックスアンダーレイは、ＱＶＧＡ複合面エリアの半分の高さである１２０ピクセルの高さを有し、そしてeglSetSurfaceScaleQUALCOMMファンクションと、eglSurfaceScaleEnableQUALCOMMファンクションとを呼び出すことにより、複合面エリアの上半分に位置づけされることができる。スカイボックスは、複合面エリアの上半分上で目に見えるだけなので、外部からのレンダリングは、ｐｂｕｆｆｅｒ面を複合面エリアの上半分だけに制約することにより、回避されることになる。結果として、ハードウェアスループットが、改善される。スカイボックスアンダーレイの生成の後に、タコメータのダイアルと針とを示す２つのｐｂｕｆｆｅｒオーバーレイ面が、生成され、そして次いでeglSetSurfaceScaleQUALCOMMファンクションと、eglSurfaceScaleEnableQUALCOMMファンクションとを呼び出すことにより、位置づけられる。次いで、カラーキーが、eglSetSurfaceColorKeyQUALCOMMファンクションと、eglSurfaceColorKeyEnableQUALCOMMファンクションとを呼び出すことにより、針オーバーレイ面についてセットアップされる。カラーキーのある面(color-keyed surface)が、ディスプレイに対してレンダリングされるとき、指定された透明カラー（すなわち、マゼンタ）にマッチするどのピクセルも、ディスプレイにコピーされないことになる。これは、針オーバーレイ面に含まれる背景情報が、タコメータダイアルをわかりにくくしないようにする。次いで、デジタルスピードメータと、ギアインジケータとを示すｐｂｕｆｆｅｒ面オーバーレイもまた、生成され、位置づけられる。カラーキーは、デジタルスピードメータと、ギアインジケータと、にも適用される。
【０１１７】
次に、複合面が、3D_windowウィンドウ面について生成される。複合面は、組み合わせられた面をＱＶＧＡの大きさから、ＶＧＡである、ターゲットディスプレイの大きさへとスケーリングするようにセットアップされる。次いで、異なるｐｂｕｆｆｅｒ面は、eglSurfaceOverlayBindQUALCOMMファンクションに対していくつかの呼び出しを行うことにより、複合面に対してバインドされ、またはアタッチされる。スカイボックスアンダーレイレイヤは、「−１」のレベルを有するレイヤに対してバインドされ、そしてタコメータダイアルと、タコメータの針と、デジタルスピードメータと、ギアインジケータとに対応する他のオーバーレイ面は、すべてレベル「１」を有するレイヤに対してバインドされる。この場合にも、負のレイヤレベルは、アンダーレイレイヤを示し、そして正のレイヤレベルは、オーバーレイレイヤを示す。次いで、オーバーレイスタック内のアンダーレイレイヤとオーバーレイレイヤと（すなわち、「−１」と「１」と）のおのおのは、eglSurfaceOverlayLayerEnableQUALCOMMファンクションを呼び出すことにより、イネーブルされる。個々のレイヤをイネーブルした後に、オーバーレイスタックそれ自体は、eglSurfaceOverlayEnableQUALCOMMファンクションを呼び出すことにより、イネーブルされる。
【０１１８】
３Ｄウィンドウ面に対するＯｐｅｎＧＬ  ＥＳレンダリングを完了した後に、サンプルコードは、修正されたeglSwapBuffersファンクションを呼び出す。オーバーレイスタックに関連づけられたウィンドウ面（すなわち、3D_window）は、ファンクションに対するパラメータとして渡される。一態様においては、修正されたeglSwapBuffersファンクションは、サンプルコードによって提供されるオーバーレイスタックと、サイジング情報と、カラーキーイング情報と、バインディング情報とに応じて、面とレイヤとを組み合わせることができる。面とレイヤとを組み合わせた後にeglSwapBuffersファンクションは、結果として生ずるグラフィックスフレームを関連するネイティブウィンドウ（すなわち、dpy）へとコピーすることができる。
【０１１９】
別の態様においては、修正されたeglSwapBuffersファンクションは、面とレイヤとを組み合わせるために命令をディスプレイプロセッサ１１４へと送ることができる。命令に応じて、ディスプレイプロセッサ１１４は、次いで本開示において説明される複合アルゴリズムなど、様々な面組合せファンクションを実行することができ、これらの面組合せファンクションは、上書き、一定アルファブレンディングを有するカラーキーイング、一定アルファブレンディングを有さないカラーキーイング、全面一定アルファブレンディング、あるいは全面ピクセル毎アルファブレンディングを含むことができる。各面では、eglSwapBuffersファンクションは、面を組み合わせるときに、複雑な計算を実行し、そしてディスプレイプロセッサ１１４によって使用される様々なデータ構造をセットアップすることができる。このデータを準備するために、eglSwapBuffersは、最低のレベルを有するレイヤから開始され、そしてウィンドウ面を含むベースレイヤまで順番に進んで、オーバーレイスタックを横切ることができる。各レイヤ内において、ファンクションは、レイヤに対してバインドされた順序で各面を通して進むことができる。次いで、ファンクションは、ウィンドウ面を、そしていくつかの場合には他の面を含むベースレイヤ（すなわち、レイヤ０）を処理することができる。最後に、ファンクションは、レイヤレベル１から開始され、そしてディスプレイの閲覧者に対して最も近くに見える最高のレイヤまで順番に進んで、オーバーレイレイヤを処理するように進むことになる。このようにして、eglSwapBuffersは、使用すべきディスプレイプロセッサ１１４についてのデータを準備するために各面を系統的に処理する。
【０１２０】
上記に説明された装置、方法、およびコンピュータプログラムプロダクト(computer program products)は、ワイヤレス電話、セルラ電話、ラップトップコンピュータ、ワイヤレスマルチメディアデバイス（例えば、ポータブルビデオプレーヤまたはポータブルビデオゲーミングデバイス）、ワイヤレス通信パーソナルコンピュータ（ＰＣ）カード、携帯型個人情報端末（ＰＤＡ）、外部または内部のモデム、あるいはワイヤレスチャネルを通して通信する任意のデバイスなど、使用される様々なタイプのデバイスとすることができる。
【０１２１】
そのようなデバイスは、アクセス端末(access terminal)（ＡＴ）、アクセスユニット、加入者ユニット、移動局、モバイルデバイス、モバイルユニット、モバイル電話、モバイル、リモート局、リモート端末、リモートユニット、ユーザデバイス、ユーザ装置、ハンドヘルドデバイスなど、様々な名前を有することができる。
【０１２２】
本開示において説明される技法は、汎用マイクロプロセッサ、デジタル信号プロセッサ(digital signal processor)（ＤＳＰ）、特定用途向け集積回路(application specific integrated circuit)（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ(field programmable gate array)（ＦＰＧＡ）、または他の同等な論理デバイスの内部にインプリメントされることができる。したがって、ここにおいて使用されるような用語「プロセッサ」または「コントローラ」は、前述の構造のうちの１つまたは複数、あるいはそれらの任意の組合せ、ならびにここにおいて説明される技法のインプリメンテーションのために適した他の任意の構造、を意味することができる。さらに、用語「プロセッサ」または「コントローラ」は、ここにおいて説明される技法を実行する１つまたは複数のプロセッサ、あるいは１つまたは複数のコントローラを意味することもできる。
【０１２３】
ここにおいて説明されるコンポーネントおよび技法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せの形でインプリメントされることができる。モジュールまたはコンポーネントとして説明される任意の機能は、一体化された論理デバイスの形で一緒に、あるいは個別の、但し相互運用可能な論理デバイスとして別々にインプリメントされることができる。様々な態様においては、そのようなコンポーネントは、集積回路のチップやチップセットなどの集積回路デバイスとして一括して称されることができる１つまたは複数の集積回路デバイスとして少なくとも部分的に形成されることができる。そのような回路は、単一の集積回路チップデバイスの形で、あるいは複数の相互運用可能な集積回路チップデバイスの形で提供されることができ、そして様々な画像、ディスプレイ、オーディオ、または他のマルチメディアのアプリケーションおよびデバイスの任意の形で使用されることができる。いくつかの態様においては、例えば、そのようなコンポーネントは、ワイヤレス通信デバイスハンドセットなどのモバイルデバイスの一部分を形成することができる。
【０１２４】
ソフトウェアでインプリメントされる場合、本技法は、１つまたは複数のプロセッサによって実行されるときに、上記に説明される方法のうちの１つまたは複数を実行する命令を備えるコンピュータ可読媒体によって少なくとも部分的に実現されることができる。コンピュータ可読媒体は、コンピュータプログラムプロダクトの一部分を形成することができ、このコンピュータプログラムプロダクトは、パッケージング材料を含むことができる。コンピュータ可読媒体は、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）などのランダムアクセスメモリ(random access memory)（ＲＡＭ）、読取り専用メモリ(read-only memory)（ＲＯＭ）、不揮発性ランダムアクセスメモリ(non-volatile random access memory)（ＮＶＲＡＭ）、電気的消去可能プログラマブル読取り専用メモリ(electrically erasable programmable read-only memory)（ＥＥＰＲＯＭ）、エンベッディドダイナミックランダムアクセスメモリ（ｅＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、フラッシュメモリ(FLASH memory)、磁気または光学のデータストレージ媒体、を備えることができる。
【０１２５】
追加して、または代わりに、本技法は、命令またはデータ構造の形態でコードを搬送し、または通信し、そして１つまたは複数のプロセッサによってアクセスされ、読み取られ、かつ／または実行されることができるコンピュータ可読通信媒体によって少なくとも部分的に実現されることができる。任意の接続は、コンピュータ可読媒体と適切に称されることができる。例えば、ソフトウェアが、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線(digital subscriber line)（ＤＳＬ）、または赤外線、無線、マイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、そのときには同軸ケーブル、光ファイバケーブル、ツイストペア、ＤＳＬ、または赤外線、無線、マイクロ波などのワイヤレス技術は、媒体の定義に含まれる。上記の組合せもまた、コンピュータ可読媒体の範囲内に含められるべきである。利用される任意のソフトウェアは、１つまたは複数のＤＳＰ、汎用マイクロプロセッサ、ＡＳＩＣ、ＦＰＧＡ、他の同等な一体化された、または個別の論理回路など、１つまたは複数のプロセッサによって実行されることができる。
【０１２６】
本開示の様々な態様が、説明されてきている。これらおよび他の態様は、添付の特許請求の範囲の範囲内にある。
【図１】
2010527077.tif 000011
【図２】
2010527077.tif 000012
【図３Ａ】
2010527077.tif 000013
【図３Ｂ】
2010527077.tif 000014
【図３Ｃ】
2010527077.tif 000015
【図４Ａ】
2010527077.tif 000016
【図４Ｂ】
2010527077.tif 000017
【図５Ａ】
2010527077.tif 000018
【図５Ｂ】
2010527077.tif 000019
【図６】
2010527077.tif 000020
【図７】
2010527077.tif 000021
【図８】
2010527077.tif 000022
【図９】
2010527077.tif 000023
【国際調査報告】
2010527077.tif 000024
2010527077.tif 000025
2010527077.tif 000026