(57)【特許請求の範囲】
【請求項１】
コンピュータがグラフィックレンダリングエンジンを実施するための方法であって、
前記コンピュータが、第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースのレンダリング関数情報を抽出するステップと、
前記コンピュータが、前記第1のグラフィック処理インタフェースおよび前記第2のグラフィック処理インタフェースをグラフィックレンダリングエンジンインタフェースとしてカプセル化するステップと、
前記コンピュータが、前記レンダリング関数情報に従って、前記グラフィックレンダリングエンジンインタフェースのメンバ関数を定義するステップと、
前記コンピュータが、前記グラフィックレンダリングエンジンインタフェースを用いて、前記第1のグラフィック処理インタフェースまたは前記第2のグラフィック処理インタフェースを呼び出すことによって、前記メンバ関数に対応するレンダリング関数を実施するステップと
を含み、
前記コンピュータが、前記グラフィックレンダリングエンジンインタフェースを用いて、前記第1のグラフィック処理インタフェースまたは前記第2のグラフィック処理インタフェースを呼び出すことによって、前記メンバ関数に対応する前記レンダリング関数を実施するステップが、
前記コンピュータが、前記グラフィックレンダリングエンジンが始動したときに、前記第1のグラフィック処理インタフェースが正常に使用できるかどうかを判定するステップと、
前記コンピュータが、前記第1のグラフィック処理インタフェースが正常に使用できる場合、前記グラフィックレンダリングエンジンインタフェースを用いて、前記第1のグラフィック処理インタフェースを呼び出すことによって、前記メンバ関数に対応する前記レンダリング関数を実施するステップと、
前記コンピュータが、前記第1のグラフィック処理インタフェースが正常に使用できない場合、前記グラフィックレンダリングエンジンインタフェースを用いて、前記第2のグラフィック処理インタフェースを呼び出すことによって、グラフィックをレンダリングするステップと
を含む、方法。
【請求項２】
前記グラフィックレンダリングエンジンインタフェースの前記メンバ関数が、RenderDevice関数、RenderTarget関数、Size and Coordinate関数、およびResources関数を含み、  前記RenderDevice関数は、前記グラフィックレンダリングエンジンに、レンダリングエンジンの初期化、レンダリングフローの制御、およびデバイスステータスの管理を行わせるために使用され、
前記RenderTarget関数は、前記グラフィックレンダリングエンジンに、様々な形状、文字、およびグラフィックスのレンダリング、リソースの選択、ならびに座標および視角の制御を行わせるために使用され、
前記Size and Coordinate関数は、前記グラフィックレンダリングエンジンに、座標の計算および表現をさせるために使用され、
前記Resources関数は、前記グラフィックレンダリングエンジンに、ブラシ、ペン、フォント、およびイメージといった、様々なレンダリングリソースの作成および提示をさせるために使用される、請求項1に記載の方法。
【請求項３】
前記コンピュータが、前記第1のグラフィック処理インタフェースが正常に使用できるかどうかを判定するステップが、
前記コンピュータが、オペレーションシステム(OS)が前記第1の処理インタフェースをサポートするかどうかをチェックするステップであって、前記OSが前記第1のグラフィック処理インタフェースをサポートする場合、前記第1のグラフィック処理インタフェースは正常に使用できると判定し、前記OSが前記第1のグラフィック処理インタフェースをサポートしない場合、前記第1のグラフィック処理インタフェースは正常に使用できないと判定する、ステップ、および
前記コンピュータが、前記OSが前記第1のグラフィック処理インタフェースをサポートする場合、前記第1のグラフィック処理インタフェースが初期化されるときに、エラーが発生したかどうかを判定するステップであって、前記第1のグラフィック処理インタフェースが初期化されるときに、エラーが発生した場合、前記第1のグラフィック処理インタフェースは正常に使用できないと判定し、前記第1のグラフィック処理インタフェースが初期化されるときに、エラーが発生しなかった場合、前記第1のグラフィック処理インタフェースは正常に使用できると判定する、ステップと
を含む、請求項２に記載の方法。
【請求項４】
前記コンピュータが、前記グラフィックレンダリングエンジンインタフェースを用いて、前記第1のグラフィック処理インタフェースまたは前記第2のグラフィック処理インタフェースを呼び出すことによって、前記メンバ関数に対応する前記レンダリング関数を実施する場合、
前記コンピュータが、前記第1のグラフィック処理インタフェースを使用して、前記メンバ関数に対応する前記レンダリング関数を実施する場合、前記第1のグラフィック処理インタフェースが異常であるかどうかを判定するステップと、
前記コンピュータが、前記メンバ関数に対応する前記レンダリング関数を実施するために使用される前記第1のグラフィック処理インタフェースが異常である場合、前記グラフィックレンダリングエンジンインタフェースを用いて、前記第2のグラフィック処理インタフェースを呼び出すことによって、グラフィックをレンダリングするステップと
をさらに含む、請求項２に記載の方法。
【請求項５】
前記第1のグラフィック処理インタフェースが、Direct3D(D3D)インタフェースまたはオープングラフィックスライブラリ(OpenGL)インタフェースであり、
前記第2のグラフィック処理インタフェースが、グラフィックスデバイスインタフェース(GDI)である、
請求項1から4のいずれかに記載の方法。
【請求項６】
第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースのレンダリング関数情報を抽出するための、情報抽出機能と、
前記第1のグラフィック処理インタフェースおよび前記第2のグラフィック処理インタフェースをグラフィックレンダリングエンジンインタフェースとしてカプセル化するための、インタフェースカプセル化機能と、
前記情報抽出機能によって抽出された前記レンダリング関数情報に従って、前記グラフィックレンダリングエンジンインタフェースのメンバ関数を定義するための、関数定義機能と、
前記グラフィックレンダリングエンジンインタフェースを用いて、前記第1のグラフィック処理インタフェースまたは前記第2のグラフィック処理インタフェースを呼び出すことによって、前記メンバ関数に対応するレンダリング関数を実施するための、レンダリング処理機能と
をコンピュータに実現させ、
前記レンダリング処理機能が、
前記コンピュータに、グラフィックレンダリングエンジンが始動したときに、前記第1のグラフィック処理インタフェースを正常に使用できるかどうかを判定させるための、インタフェース判定機能と、
前記コンピュータに、前記第1のグラフィック処理インタフェースが正常に使用できる場合、前記グラフィックレンダリングエンジンインタフェースを用いて、前記第1のグラフィック処理インタフェースを呼び出すことによって前記メンバ関数に対応する前記レンダリング関数を実施させ、前記第1のグラフィック処理インタフェースが正常に使用できないと前記インタフェース判定機能が判定した場合、前記グラフィックレンダリングエンジンインタフェースを用いて、前記第2のグラフィック処理インタフェースを呼び出すことによってグラフィックをレンダリングさせるための、インタフェース呼び出し機能とを備える、プログラム。
【請求項７】
前記グラフィックレンダリングエンジンインタフェースの前記メンバ関数が、RenderDevice関数、RenderTarget関数、Size and Coordinate関数、およびResources関数を含み、
前記RenderDevice関数は、グラフィックレンダリングエンジンに、レンダリングエンジンの初期化、レンダリングフローの制御、およびデバイスステータスの管理を行わせるために使用され、
前記RenderTarget関数は、前記グラフィックレンダリングエンジンに、様々な形状、文字、およびグラフィックスのレンダリング、リソースの選択、ならびに座標および視角の制御を行わせるために使用され、
前記Size and Coordinate関数は、前記グラフィックレンダリングエンジンに、座標の計算および表現をさせるために使用され、
前記Resources関数は、前記グラフィックレンダリングエンジンに、ブラシ、ペン、フォント、およびイメージといった、様々なレンダリングリソースの作成および提示をさせるために使用される、
請求項６に記載のプログラム。
【請求項８】
前記レンダリング処理機能が、
前記メンバ関数に対応する前記レンダリング関数を実施するために、前記インタフェース呼び出し機能が前記第1のグラフィック処理インタフェースを呼び出したときに、例外が発生したかどうかを検出し、前記インタフェース呼び出し機能に検出結果を通知するための、例外検出機能
をさらに備え、
前記例外検出機能が前記例外を検出した場合、前記インタフェース呼び出し機能がさらに、前記グラフィックレンダリングエンジンインタフェースを用いて、前記第2のグラフィック処理インタフェースを呼び出すことによって、前記グラフィックをレンダリングする、
請求項7に記載のプログラム。
【請求項９】
前記第1のグラフィック処理インタフェースが、Direct3D(D3D)インタフェースまたはオープングラフィックスライブラリ(OpenGL)インタフェースであり、
前記第2のグラフィック処理インタフェースが、グラフィックスデバイスインタフェース(GDI)である、
請求項6から8のいずれかに記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、グラフィック処理技術に関し、より詳細には、グラフィックレンダリングエンジンおよびグラフィックレンダリングエンジンを実施するための方法に関する。
【背景技術】
【０００２】
現在、Windows（登録商標）オペレーティングシステム(OS)では、グラフィックインタフェースを用いるほとんどのアプリケーションは、特定のグラフィックレンダリングエンジンを用いてレンダリングされる。
【０００３】
現在のグラフィックレンダリングエンジンは、グラフィック処理インタフェースを採用するグラフィックインタフェースを主としてレンダリングする。現在のグラフィック処理インタフェースは、グラフィックスデバイスインタフェース(GDI)およびGDI+(GDI Plus)などのその改良版、Direct3D(D3D)、ならびにオープングラフィックスライブラリ(OpenGL)を主として含む。
【０００４】
ゲームを除いて、ほとんどのアプリケーションは、MicrosoftのGDIおよびGDIの改良版GDI+を用いて、アプリケーション用のグラフィックインタフェースをレンダリングする。GDIの原理は、メモリ内でピクセルを操作およびコピーすることである。ユーザは、GDIまたはGDI+によって提供される多くの関数を用いて、画面、プリンタ、または他の出力デバイスへのグラフィックスおよびファイル出力などの操作を実行することができる。GDIおよびGDI+は、アプリケーションの出力をハードウェアデバイスに出力することができ、プログラマは、ハードウェアデバイスおよびデバイスドライバの処理を気に掛ける必要がなく、これは、開発に都合がよい。GDIとGDI+とは、Windows（登録商標）プラットフォーム上において良好な互換性を有する。
【０００５】
GDIとGDI+とは良好な互換性を有するが、GDIおよびGDI+のレンダリング効率は低い。GDIおよびGDI+は、GDIおよびGDI+の効率が許容可能である単純なグラフィックアプリケーション内で使用される。しかし、ゲームおよびプロフェッショナルグラフィックス作成および表示アプリケーションなど、いくつかの複雑なグラフィックアプリケーションシナリオでは、GDIおよびGDI+の効率は明らかに低い。以下の操作は、ピクセルベースの操作である。以下の操作を実行する場合、GDIおよびGDI+の効率は特に低い。その操作は、
アルファブレンディング(すなわち、グラフィックが別のグラフィック上に半透明モードでレンダリングされる)
高品質グラフィックズーミング、および
グラフィックの任意の回転
を含む。
【０００６】
GDI+は、ハードウェアアクセラレーションを部分的に使用するが、実際のレンダリング効率は、GDIの効率よりも低い。
【０００７】
GDIおよびGDI+の別の難点は、あまりにも多くのリソースを占有することである。アクセラレーションを実行するための従来の方法には、CPUから独立しており、グラフィックレンダリング用に特別に作成され、強力な並列演算能力を有する、グラフィック処理ユニット(GPU)が存在するが、GDIおよびGDI+は、アクセラレーションの目的を達成するためにGPUを多用せず、CPUにより大きく依存する。
【０００８】
別のグラフィック処理インタフェースは、D3Dであり、これは、Microsoftによって提供される3Dグラフィックインタフェースであり、ゲームなどの高度なグラフィックアプリケーションにおいて広く使用される。D3Dのレンダリング効率は高く、D3Dは、専用GPUを用いてハードウェアアクセラレーションを実行する。
【０００９】
別のグラフィック処理インタフェースは、オープングラフィックスライブラリ(OpenGL)であり、これは、クロス言語およびクロスプラットフォームプログラミングインタフェースのための標準を定義し、3次元グラフィック(または2次元グラフィック)をレンダリングするために使用される。OpenGLは、プロフェッショナルグラフィックプログラミングインタフェースであり、強力な下層のグラフィックライブラリである。
【００１０】
しかし、D3DおよびOpenGLは、以下の2つの難点を有し、それが、D3DおよびOpenGLの用途を制約する。
【００１１】
第1に、より多くのハードウェア層(hardware tier)が関与し、能力が貧弱である。グラフィックレンダリングプロセスでは、ハードウェア環境が影響して、エラーが発生することがある。
【００１２】
第2に、インタフェースが複雑である。各レンダリング処理のために、多くのコードを書く必要があり、それが開発に負担を掛ける。
【００１３】
グラフィック処理に対するユーザの要求は、急速に大きくなっている。ユーザは、見栄えがよく、スムーズなインタフェースを要求するばかりでなく、より高速で、より効率的で、より品質の良い性能も要求する。
【００１４】
しかし、従来の方法のグラフィック処理インタフェース、すなわち、GDI、GDI+、D3D、およびOpenGLは、難点を有する。それらが、アプリケーションインタフェースレンダリングの包括的性能要件を満たすことは難しい。包括的性能は、高いレンダリング効率、より僅かなCPU占有、良好な能力、および使い易いインタフェースを含む。
【発明の概要】
【発明が解決しようとする課題】
【００１５】
本開示の例によって解決すべき課題は、相対的に高い包括的グラフィックレンダリング性能を実施し、レンダリングアプリケーションのための要件を満たすために、グラフィックレンダリングエンジンおよびグラフィックレンダリングエンジンを実施するための方法を提供することである。
【課題を解決するための手段】
【００１６】
上記の課題を解決するために、本開示の一例は、
第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースのレンダリング関数情報を抽出するステップと、
第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースをグラフィックレンダリングエンジンインタフェースとしてカプセル化するステップと、
レンダリング関数情報に従って、グラフィックレンダリングエンジンインタフェースのメンバ関数を定義するステップと、
グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースまたは第2のグラフィック処理インタフェースを呼び出すことによって、メンバ関数に対応するレンダリング関数を実施するステップと
を含む、グラフィックレンダリングエンジンを実施するための方法を提供する。
【００１７】
したがって、本開示の別の例は、
第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースのレンダリング関数情報を抽出するための、情報抽出モジュールと、
第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースをグラフィックレンダリングエンジンインタフェースとしてカプセル化するための、インタフェースカプセル化モジュールと、
情報抽出モジュールによって抽出されたレンダリング関数情報に従って、グラフィックレンダリングエンジンインタフェースのメンバ関数を定義するための、関数定義モジュールと、
グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースまたは第2のグラフィック処理インタフェースを呼び出すことによって、メンバ関数に対応するレンダリング関数を実施するための、レンダリング処理モジュールと
を含む、グラフィックレンダリングエンジンを提供する。
【発明の効果】
【００１８】
本開示の技術スキームは、以下の技術的効果を有することができる。
【００１９】
従来の方法と比較して、第1のグラフィック処理インタフェースと第2のグラフィック処理インタフェースとは、2つの異なるグラフィック処理インタフェースとすることができるので、本開示の例では、異なる利点を有する2つの異なるグラフィック処理インタフェースを一緒にカプセル化して、グラフィックレンダリングエンジンインタフェースを形成することができる。アプリケーションのインタフェースをレンダリングするためのプロセスにおいて、グラフィックレンダリングエンジンインタフェースは、システム環境に従って、グラフィック処理インタフェースを自動的に選択して、対応するレンダリング関数を実施することができる。したがって、各グラフィック処理インタフェースの利点を一緒に組み合わせて、グラフィックレンダリングの包括的性能を高めることができる。
【図面の簡単な説明】
【００２０】
【図１】本開示の一例による、グラフィックレンダリングエンジンを実施するための方法を説明するフローチャートである。
【図２】本開示の一例による、グラフィックレンダリングエンジンインタフェースのメンバ関数を示す概略図である。
【図３】本開示の別の例による、グラフィックレンダリングエンジンを実施するための方法を説明する図である。
【図４】本開示の一例による、グラフィックレンダリングエンジンインタフェースにおけるRenderTarget関数を示す概略図である。
【図５】本開示の一例による、グラフィックレンダリングエンジンを用いて静的変換を実施するための方法を説明するフローチャートである。
【図６】本開示の一例による、グラフィックレンダリングエンジンを用いて動的変換を実施するための方法を説明するフローチャートである。
【図７】本開示の一例による、グラフィックレンダリングエンジンを説明する概略図である。
【図８】本開示の一例による、グラフィックレンダリングエンジン内のレンダリング処理モジュールを説明する概略図である。
【図９】本開示の一例による、グラフィックレンダリングエンジン内の別のレンダリング処理モジュールを説明する概略図である。
【発明を実施するための形態】
【００２１】
簡潔にするため、および説明の目的で、本開示は、例を参照することによって説明される。以下の説明では、本開示の完全な理解を提供するために、数々の特定の詳細が説明される。しかし、これらの特定の詳細に限定することなく、本開示を実施できることは、容易に明らかである。他の例では、本開示を不必要に不明瞭にしないために、いくつかの方法および構造は詳細に説明されていない。どこであれ本開示内において使用される場合、「含む(includes)」という語は、限定することなく含む(includes but not limited to)ことを意味し、「含む(including)」という語は、限定することなく含む(including but not limited to)ことを意味する。「基づく(based on)」という語は、少なくとも部分的に基づく(based at least in part on)ことを意味する。加えて、「a」および「an」は、特定の要素の少なくとも1つを示すことが意図されている。
【００２２】
本開示の例を説明する前に、当業者が本開示の技術スキームをより良く理解できるように、技術用語および概念を最初に紹介することができる。
【００２３】
レンダリングエンジンは、ソフトウェアシステムの最下層に配置することができ、ソフトウェアにインタフェースレンダリングなどのレンダリングサービスを提供することができる。
【００２４】
GDIは、Microsoftによって提供され、(ディスプレイなど)グラフィックデバイスにおいてグラフィックスをレンダリングするために使用される、グラフィック処理インタフェースとすることができる。
【００２５】
GDI+は、GDIを補完するものとすることができ、GDIの更新版とすることができる。GDIをベースに、いくつかの関数を最適化することができ、新しい関数を追加することができる。
【００２６】
本開示の例についての以下の説明では、GDIおよびGDI+が、GDIと呼ばれる。
【００２７】
D3Dは、Microsoftによって提供される別のグラフィック処理インタフェースとすることができ、3Dグラフィックインタフェースであり、DirectX製品の一部とすることができ、ハードウェアアクセラレーションに基づいて高速レンダリングを実施するために使用することができる。
【００２８】
OpenGLは、別のグラフィック処理インタフェースとすることができ、これは、クロス言語およびクロスプラットフォームプログラミングインタフェースのための標準を定義することができ、3次元グラフィック(または2次元グラフィック)をレンダリングするために使用することができる。OpenGLは、プロフェッショナルグラフィックプログラミングインタフェースとすることができ、強力な下層のグラフィックライブラリとすることができる。
【００２９】
CPUは、コンピュータの演算面を担当することができる。
【００３０】
GPUは、CPUの概念に対応する概念とすることができ、CPUから独立していることができ、グラフィックレンダリングにおける演算の実行を専門に行うことができ、強力な並列演算能力を有することができる。
【００３１】
高いレンダリング効率、より僅かなCPU占有、良好な能力、および使い易いインタフェースを有する技術スキームを獲得するため、本開示の例によって提供される、グラフィックレンダリングエンジンおよびグラフィックレンダリングエンジンを実施するための方法は、以下のようにすることができる。
【００３２】
グラフィックレンダリングエンジンインタフェースを生成することができる。グラフィックレンダリングエンジンインタフェースは、D3DインタフェースおよびGDIをカプセル化することによって、またはOpenGLインタフェースおよびGDIをカプセル化することによって、生成することができる。本開示のグラフィックレンダリングエンジンインタフェースが生成された後、D3Dレンダリング関数を用いるスキームと、GDIレンダリング関数を用いるスキームとを提供することができる。代替として、OpenGLレンダリング関数を用いるスキームと、GDIレンダリング関数を用いるスキームとを提供することができる。したがって、本開示の例によって提供されるグラフィックレンダリングエンジンは、デュアルコアグラフィックレンダリングエンジンと見なすことができる。実際、同じコンピュータにおいて、ある時点では、グラフィックレンダリングエンジンは、1つのレンダリングモードに、すなわち、D3Dレンダリングモード、GDIレンダリングモード、またはOpenGLレンダリングモードにある。本開示の例におけるグラフィックレンダリングエンジンでは、D3DインタフェースおよびGDIを一緒にカプセル化でき、またはOpenGLインタフェースおよびGDIを一緒にカプセル化できるので、互換性を良好にすることができ、インタフェースを使い易くすることができる。加えて、異なる瞬間には、D3Dインタフェース、GDI、およびOpenGLインタフェースの1つを呼び出して、グラフィックスをレンダリングすることができる。したがって、より僅かなCPUリソースしか占有しないことができ、レンダリング効率は高い。グラフィックレンダリングの包括的性能を高めることができる。包括的性能は、高いレンダリング効率、より僅かなCPU占有、良好な互換性、および使い易いインタフェースを含むことができる。
【００３３】
本開示の例における、グラフィックレンダリングエンジンおよびグラフィックレンダリングエンジンを実施するための方法を、本明細書において以下で添付の図面を参照して説明することができる。
【００３４】
図1を参照すると、図1は、本開示の一例による、グラフィックレンダリングエンジンを実施するための方法を説明するフローチャートである。
【００３５】
この例によって提供される方法は、以下のブロックを含む。
【００３６】
ブロック100において、第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースのレンダリング関数情報を抽出することができる。
【００３７】
ブロック101において、第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースをグラフィックレンダリングエンジンインタフェースとしてカプセル化することができる。
【００３８】
グラフィックレンダリングエンジンは、外部インタフェースとすることができる。2つのグラフィック処理インタフェースをグラフィックレンダリングエンジンインタフェース内にカプセル化する(すなわち、それによって提供する)ことができる。例えば、第1のグラフィック処理インタフェースは、D3DインタフェースまたはOpenGLインタフェースとすることができる。第2のグラフィック処理インタフェースは、GDIとすることができる。2つのグラフィック処理インタフェースのレンダリング効果は、同じとすることができる。レンダリング効率、CPU占有、互換性、およびインタフェースユーザビリティは、異なることができる。
【００３９】
コードレベルにおけるグラフィックレンダリングエンジンインタフェースの表現形式は、GDIのそれと同様とすることができる。GDIの互換性は、高くでき、使い易くできるので、グラフィックレンダリングエンジンインタフェースは、良好な互換性およびユーザビリティを有することができる。
【００４０】
ブロック102において、レンダリング関数情報に従って、グラフィックレンダリングエンジンのメンバ関数を定義することができる。
【００４１】
メンバ関数は、グラフィックレンダリング関数を実施するために使用することができる。メンバ関数は、2つのモードで実施することができる。実施モードの一方は、第1のグラフィック処理インタフェースのメンバ関数とすることができ、他方の実施モードは、第2のグラフィック処理インタフェースのメンバ関数とすることができる。同じメンバ関数に関しては、メンバ関数がどちらのグラフィック処理インタフェースに属するかに関係なく、メンバ関数のレンダリング効果は、同じとすることができる。
【００４２】
ブロック103において、グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースまたは第2のグラフィック処理インタフェースを呼び出すことによって、メンバ関数に対応するレンダリング関数を実施することができる。すなわち、グラフィックレンダリングエンジンは、現在のシステム環境に従って、グラフィックレンダリングエンジンインタフェースを介して、グラフィック処理インタフェースを自動的に選択して、対応するレンダリング関数を実施することができる。
【００４３】
実際に、第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースのレンダリング関数は、以下の4つのカテゴリに分類することができる。
【００４４】
第1のカテゴリは、レンダリングエンジンの初期化、レンダリングフローの制御、およびデバイスステータスの管理などの関数を含むことができる。
【００４５】
第2のカテゴリは、様々な形状、文字、およびグラフィックスのレンダリング、リソースの選択、ならびに座標および視角の制御などの関数を含むことができる。
【００４６】
第3のカテゴリは、座標の計算および表現関数とすることができる。
【００４７】
第4のカテゴリは、ブラシ、ペン、フォント、およびイメージといった、様々なレンダリングリソースの作成および提示などの関数を含むことができる。
【００４８】
第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースをカプセル化するため、それらの共通のレンダリング関数情報を抽出することが必要なことがある。すなわち、上記の4つのカテゴリのレンダリング関数情報を抽出することができる。第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースのレンダリング関数情報は、限定することなく、上記の4つのカテゴリを含むことができる。上記の4つのカテゴリは、説明のための例である。
【００４９】
レンダリング関数情報が抽出できた後、第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースをグラフィックレンダリングエンジンインタフェース内にカプセル化することができる。抽出したレンダリング関数情報に従って、グラフィックレンダリングエンジンインタフェースのメンバ関数を定義することができる。
【００５０】
図2を参照すると、実際には、グラフィックレンダリングエンジンインタフェースのメンバ関数は、RenderDevice関数と、RenderTarget関数と、Size and Coordinate関数と、Resources関数とを含むことができる。
【００５１】
RenderDevice関数は、クラスRender Deviceとして表現することができる。クラスRender Deviceは、上記の第1のカテゴリ内のレンダリング関数を実施するために使用することができる。
【００５２】
RenderTarget関数は、クラスRender Targetとして表現することができる。クラスRender Targetは、上記の第2のカテゴリ内のレンダリング関数を実施するために使用することができる。
【００５３】
Size and Coordinate関数は、
クラスFSize、
クラスFPoint、および
クラスFRect
として表現することができる。
【００５４】
Size and Coordinate関数は、様々なレンダリング関数のパラメータとして使用することができ、上記の第3のカテゴリ内のレンダリング関数を実施するために使用することができる。
【００５５】
Resources関数は、
クラスPen、
クラスBrush、
クラスFont、および
クラスImage
として表現することができる。
【００５６】
Resources関数は、上記の第4のカテゴリ内のレンダリングリソースのレンダリング関数を実施するために使用することができる。上記のレンダリングリソースは、例として列挙されており、ここには列挙されていない他のレンダリングリソースも存在することができる。
【００５７】
本開示のこの例によって提供される第1のグラフィック処理インタフェースは、D3DインタフェースまたはOpenGLインタフェースである。第2のグラフィック処理インタフェースは、GDIである。
【００５８】
D3DインタフェースおよびGDIがグラフィックレンダリングエンジンにカプセル化される場合を例に取ると、本開示の例によって提供されるグラフィックレンダリングエンジンを用いてグラフィックがレンダリングされる場合、簡単なレンダリングコードの一セクションは、以下の通りである。
RenderDevice dev;
dev.InitAsD3DRenderDevice(); //このブロックの後、RenderDeviceは、D3Dモードにないことがあり得、GDIモードに静的に変換されることがあり得る。
dev.InitAsD3DRenderDevice(); //
RenderTarget* pRT = dev.GetRenderTarget();
Image* pImage = new Image(“TestImage.bmp"); //リソース生成
Brush* pRedBrush = new Brush(RGB(255, 0, 0));
pRT->SelectBrush(*pRedBrush); //リソース選択
dev.BeginScene(); //レンダリングフロー-開始
pRT->DrawImage(pImage, 100, 100); //グラフィックレンダリング
pRT->FillRect(Rect(0,0,40,40)); //赤い長方形をレンダリングする
dev.EndScene(); //レンダリングフロー-終了
dev.Present();
delete pImage;
delete pRedBrush;
【００５９】
図3を参照すると、図3は、本開示の別の例による、グラフィックレンダリングエンジンを実施するための方法を説明する図である。
【００６０】
グラフィックレンダリングエンジンによって提供される外部インタフェースは、グラフィックレンダリングエンジンインタフェースとすることができる。グラフィックレンダリングエンジンインタフェース内には、異なる利点を有する2つのグラフィック処理インタフェースが存在することができる。2つのグラフィックインタフェースのレンダリング効果は、同じとすることができる。したがって、本開示のこの例におけるグラフィックレンダリングエンジンは、システム環境に従って選択されたより良いグラフィック処理インタフェースを用いて、グラフィックスをレンダリングして、グラフィックレンダリングエンジンの包括的性能を高めることができる。
【００６１】
本開示のこの例では、グラフィックレンダリングエンジンインタフェースは、グラフィックレンダリング関数を実施するためのD3DモードおよびGDIモードを、すなわち、RenderDevice関数、RenderTarget関数、Size and Coordinate関数(Size、Point、およびRect)、ならびにResources関数(Brush、Pen、Font、およびImage)などのレンダリング関数のためのD3DインタフェースおよびGDIを提供することができる。すなわち、2つのグラフィック処理インタフェース、すなわち、D3DインタフェースおよびGDIを提供することができる。各グラフィック処理インタフェースは、レンダリング関数を有することができる。2つのグラフィック処理インタフェース内の同じレンダリング関数は、同じレンダリング効果を達成することができる。異なるグラフィック処理インタフェースは、異なるレンダリング効率、CPU占有、互換性、およびインタフェースユーティリティを有することができる。D3Dモードは、静的および動的にGDIモードに変換することができる。図3の変換ブリッジ、リソース管理モジュール、およびエラー処理モジュールは、D3DモードからGDIモードへの動的変換のために役立てることができる。
【００６２】
OpenGLインタフェースおよびGDIが、グラフィックレンダリングエンジンインタフェース内にカプセル化される場合、グラフィックレンダリング関数を実施するためのOpenGLモードおよびGDIモードを提供することができる。すなわち、OpenGLインタフェースおよびGDIを提供することができる。各グラフィック処理インタフェースは、レンダリング関数を有することができ、2つのグラフィックレンダリングエンジン内の同じレンダリング関数は、同じレンダリング効果を有することができる。異なるグラフィック処理インタフェース内の同じレンダリング関数のレンダリング効率、CPU占有、互換性、およびインタフェースユーティリティは、異なることができる。
【００６３】
本開示のこの例では、D3Dインタフェース(第1のグラフィック処理インタフェース)およびGDI(第2のグラフィック処理インタフェース)をグラフィックレンダリングエンジンインタフェース内にカプセル化することができる。グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースを呼び出すことによって、メンバ関数のレンダリング関数を実施するためのプロセスを、本明細書において以下で説明することができる。
【００６４】
メンバ関数のうちで、RenderTarget関数を例に取ると、グラフィックレンダリングエンジンインタフェースが、RenderTarget関数を使用してレンダリング関数を実施する場合、Rendererを使用してRenderTargetDataにおいてグラフィックスをレンダリングするために、RenderTarget関数を使用することができる。D3Dモードでは(すなわち、グラフィックレンダリングエンジンインタフェースは、D3Dインタフェースを呼び出すことによって、レンダリング関数を実施することができる)、グラフィックレンダリングエンジンインタフェースは、D3DRendererを使用してD3DRenderTargetDataにおいてグラフィックスをレンダリングすることができる。GDIモードでは(すなわち、グラフィックレンダリングエンジンインタフェースは、GDIを呼び出すことによって、レンダリング関数を実施することができる)、グラフィックレンダリングエンジンインタフェースは、GDIRendererを使用してGDIRenderTargetDataにおいてグラフィックスをレンダリングすることができる。D3DモードをGDIモードに変換できるプロセスは、RenderTargetDataおよびRendererを変更できるプロセスである。グラフィックレンダリングエンジンインタフェースにおけるRenderTargetDataの構造を、図4に示すことができる。RenderTarget関数は、Rendererと、RenderTargetDataとを含むことができる。Rendererは、D3DRendererと、GDIRendererとを含むことができる。RenderTargetDataは、D3DRenderTargetDataと、GDIRenderTargetDataとを含むことができる。D3DRendererは、D3Dレンダリング方法を使用することができ、GDIRendererは、GDIレンダリング方法を使用することができる。D3DのD3DUSAGE_RENDERTARGETテクスチャは、D3DRenderTargetData内にカプセル化することができる。GDIのDCおよびHBITMAPは、GDIRenderTargetData内にカプセル化することができる。
【００６５】
RenderTarget関数のコードは、以下の通りである。
class RenderTarget
{
private:
Renderer* m_pRenderer;
RenderTargetData* m_pRenderTargetData;
};
【００６６】
RendererおよびRenderTargetDataは、上で宣言される。
【００６７】
グラフィックレンダリングエンジンインタフェースを用いて、D3DインタフェースまたはGDIを呼び出すことによって、RenderTarget関数に対応するレンダリング関数を実施するためのプロセスを、本明細書において以下で説明することができる。
【００６８】
a)グラフィックレンダリングエンジンが始動する、すなわち、初期化されるとき、デフォルトでは、D3Dインタフェースを使用して、RenderTarget関数を実施することができる。初期化コードは、以下の通りである。
m_pRenderer = new D3DRenderer; //RendererをD3DRendererとして初期化することができる。
m_pRenderTargetData = new D3DRenderTargetData //RenderTargetDataをD3DRenderTargetDataとして初期化することができる。
【００６９】
b)グラフィックレンダリングエンジンを実行するためのプロセスにおいて、(ビデオメモリが不十分である場合など)致命的なレンダリングエラーが発生した場合、ソフトウェアの障害(collapse)を防止するためGDIを使用してグラフィックのレンダリングを継続するために、変換操作が必要とされ得る。この状況は、本開示の例において説明される動的変換処理とすることができる。D3DモードがGDIモードに変換される場合、以下の処理が必要とされ得る。
Renderer* pNewRenderer = new GDIRenderer;
//D3DRenderからGDIRenderへの変換を実施するために、m_pRenderer内の内容(D3D)を、変換ブリッジを介してGDIに変換して、pNewRendererに収めることができる。
SAFE_DELETE(m_pRenderer);
m_pRenderer = pNewRenderer;
//RenderTargetDataのモードをD3DモードからGDIモードに変換するための処理は、Rendererのそれと同様とすることができ、ここでは、それを繰り返さない。
【００７０】
図5を参照すると、図5は、本開示の一例による、グラフィックレンダリングエンジンを用いて静的変換を実施するための方法を説明するフローチャートである。
【００７１】
グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースまたは第2のグラフィック処理インタフェースを呼び出すことによって、メンバ関数に対応するレンダリング関数を実施するための処理を、本開示の以下の例において説明することができる。方法は、以下のブロックを含むことができる。
【００７２】
ブロック200において、グラフィックレンダリングエンジンが始動することができる。
【００７３】
ブロック201において、第1のグラフィック処理インタフェースが正常に使用できるかどうかを判定することができる。第1のグラフィック処理インタフェースが正常に使用できるかどうかを判定するための方法は、現在のOSが第1のグラフィック処理インタフェースをサポートできるかどうかをチェックするステップであって、現在のOSが第1のグラフィック処理インタフェースをサポートできる場合、第1のグラフィック処理インタフェースは正常に使用できると判定し、サポートできない場合、第1のグラフィック処理インタフェースは正常に使用できないと判定する、ステップを含むことができる。方法は、現在のOSが第1のグラフィック処理インタフェースをサポートできると判定した場合、グラフィック処理インタフェースを初期化するためのプロセスにおいて、エラーが発生したかどうかを判定するステップであって、エラーが発生した場合、第1のグラフィック処理インタフェースは正常に使用できないと判定し、エラーが発生しなかった場合、第1のグラフィック処理インタフェースは正常に使用できると判定する、ステップをさらに含むことができる。
【００７４】
第1のグラフィック処理インタフェースが正常に使用できる場合、ブロック202において、グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースを呼び出すことによって、メンバ関数に対応するレンダリング関数を実施することができる。
【００７５】
第1のグラフィック処理インタフェースが正常に使用できない場合、ブロック203において、グラフィックレンダリングエンジンインタフェースを用いて、第2のグラフィック処理インタフェースを呼び出すことによって、グラフィックをレンダリングすることができる。
【００７６】
上で説明したように、第1のグラフィック処理インタフェースが正常に使用できるかどうかは、グラフィックレンダリングエンジンが始動したときに判定することができる。第1のグラフィック処理インタフェースが正常に使用できない場合、第2のグラフィック処理インタフェースを呼び出すことによって、グラフィックをレンダリングすることができる。上記の処理は、異なるグラフィック処理インタフェースの間の静的変換を指し得る。静的変換プロセスは、D3DインタフェースおよびGDIがグラフィックレンダリングエンジンインタフェース内にカプセル化される場合を例に取り、本明細書において以下で説明することができる。
【００７７】
静的変換は、グラフィックレンダリングエンジンをD3Dモードで初期化するように(すなわち、上記の「コード」において言及されたInitAsD3DRenderDevice)ユーザが命令したときに、現在のOSがD3Dモードをサポートできず、またはD3Dを初期化するステップにおいてエラーが発生したことが検出されることがあり、現在のプロセスを、グラフィックレンダリングエンジンをGDIモードで初期化できるプロセスに変換できることを指し得る。変換プロセスは、プログラムが初期化されるときに実行できるので、グラフィックレンダリングエンジンは、そのとき、いかなるリソースも生成しなくてよい。したがって、静的変換プロセスは、単純であることができる。
【００７８】
図6を参照すると、図6は、本開示の一例による、グラフィックレンダリングエンジンを用いて動的変換を実施するための方法を説明するフローチャートである。
【００７９】
グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースまたは第2のグラフィック処理インタフェースを呼び出すことによって、メンバ関数に対応するレンダリング関数を実施するためのプロセスを、本明細書における以下の例において詳細に説明することができる。動的変換は、グラフィックレンダリングエンジンが第1のグラフィック処理インタフェースとして正常に初期化され、グラフィックレンダリングエンジンを実行するためのプロセスにおいて、(ビデオメモリが不十分であるなど)致命的なレンダリングエラーが発生し、ソフトウェアの障害を防止するため第2のグラフィック処理インタフェースを使用してグラフィックのレンダリングを継続するために変換操作が必要とされ得ることを指し得る。
【００８０】
動的変換シナリオでは、上記のブロック200から202を最初に実行する必要があり得る。すなわち、第1のグラフィック処理インタフェースが正常に使用できる場合、グラフィックレンダリングエンジンインタフェースを用いて、最初に第1のグラフィック処理インタフェースを呼び出すことによって、メンバ関数に対応するレンダリング関数を実施することができる。その後、以下のブロック300から301を実行することができる。すなわち、第1のグラフィック処理インタフェースが異常であることが検出された場合、第2のグラフィック処理インタフェースを呼び出して、グラフィックをレンダリングすることができる。
【００８１】
ブロック300において、第1のグラフィック処理インタフェースを使用してメンバ関数に対応するレンダリング関数を実施できるときに、例外が発生したかどうかを判定することができる。
【００８２】
ブロック301において、第1のグラフィック処理インタフェースを使用してメンバ関数に対応するレンダリング関数を実施できるときに、例外が発生した場合、グラフィックレンダリングエンジンインタフェースを用いて、第2のグラフィック処理インタフェースを呼び出すことによって、グラフィックをレンダリングすることができる。
【００８３】
動的変換フローは、D3DインタフェースおよびGDIをグラフィックレンダリングエンジン内にカプセル化できる場合を例に取り、本明細書において以下で説明することができる。
【００８４】
動的変換は、グラフィックレンダリングエンジンがD3Dインタフェースとして正常に初期化され、グラフィックレンダリングエンジンを実行するためのプロセスにおいて、(ビデオメモリが不十分であるなど)致命的なレンダリングエラーが発生し、ソフトウェアの障害を防止するためGDIを使用してグラフィックのレンダリングを継続するために変換操作が必要とされ得ることを指し得る。
【００８５】
図3に示されるように、リソース管理、エラー管理、および変換ブリッジモジュールが、D3DモードからGDIモードに変換するためのサービスを提供することができ、本明細書において以下で説明することができる。
【００８６】
A)リソース管理:D3DモードがGDIモードに動的に変換されるプロセスでは、すべてのD3DリソースをGDIリソースに変換する必要があり得る。リソースは、D3Dのテクスチャおよびサーフェス、ならびにテクスチャおよびサーフェスを維持するためのステータスパラメータを含むことができる。したがって、これらのリソースは、あらかじめ管理しておくべきである。本開示のこの例では、変更され得るこれらのリソースは、リストを用いて維持することができる。
【００８７】
RenderTargetを例に取ると、グローバルリスト:
list<RenderTarget*> g_pRTList;
が存在し得る。
RenderTargetの構築関数では、変更され得るこれらのリソースをリストに追加することができる:g_pRTList.push_back(this)。
破壊関数では、変更され得るこれらのリソースをリストから削除することができる:g_pRTList.erase(this)。
【００８８】
本開示の例におけるグラフィックレンダリングエンジンにおいて管理される必要があり得る他のリソースは、以下のものを含むことができる。
【００８９】
【表１】
0005805864.tif 000002
【００９０】
B)エラー管理:本開示のこの例におけるグラフィックレンダリングエンジンは、致命的なD3Dエラーが発生したときに、D3DモードをGDIモードに変換できることを保証するために、各D3D呼び出しに対して厳格なエラー管理を実行することができる。各D3D呼び出しは、呼び出しが成功したかどうかを報告するために、HRESULTを返すことができる。本開示のこの例によって提供されるグラフィックレンダリングエンジンにおいて定義される致命的なD3Dエラーは、以下のものを含むことができる。
【００９１】
【表２】
0005805864.tif 000003
【００９２】
C)変換ブリッジ
【００９３】
D3Dレンダリングにおいて例外が発生した場合、動的変換フローを動的に実行することができる。
【００９４】
動的変換プロセスは、
管理するすべてのリソースの初期ステータスフラグをD3DからGDIに変更することと、
カプセル化された変換関数のグループとすることができ、D3DリソースをGDIリソースに変換するために使用できる、変換ブリッジによって、管理するすべてのリソースを処理することと、
すべてのD3Dリソースを解放することと、
グラフィックレンダリングエンジンインタフェースを用いて、GDIを呼び出すことによって、グラフィックスをレンダリングすることと
を含むことができる。
【００９５】
変換ブリッジの変換操作は、以下のものを含むことができる。
【００９６】
【表３】
0005805864.tif 000004
【００９７】
上述の方法を用いる場合、システム条件によって容認され得、レンダリング環境が正常であり得るならば、デフォルトでは、D3Dインタフェースを用いてグラフィックを描くことができる(すなわち、グラフィックレンダリングエンジンはD3Dモードにある)。D3Dモードを用いて、ビデオカードを高速化することができ、D3Dモードによって、最も高いレンダリング効率および最も低いCPU占有を達成することができる。
【００９８】
(ディスプレイドライバをインストールできないなど)システム条件によって容認され得ず、または(ビデオメモリが不十分など)エラーがD3Dレンダリングプロセスにおいて発生した場合、グラフィックレンダリングエンジンの作業モードを、静的モードまたは動的モードで、シームレスにGDIモードに変換することができる。グラフィックスは、互換性の要件を満たすために、GDIを用いてレンダリングすることができる。
【００９９】
本開示の例によって提供されるグラフィックレンダリングエンジンを実施するための方法を用いて、以下の技術的効果を達成することができる。
【０１００】
第1のグラフィック処理インタフェースと第2のグラフィック処理インタフェースとは、2つの異なるグラフィック処理インタフェースとすることができるので、本開示の例では、異なる利点を有する2つの異なるグラフィック処理インタフェースを一緒にカプセル化して、グラフィックレンダリングエンジンインタフェースを形成することができる。アプリケーションのインタフェースをレンダリングするためのプロセスにおいて、グラフィックレンダリングエンジンインタフェースは、システム環境に従って、グラフィック処理インタフェースを自動的に選択して、対応するレンダリング関数を実施することができる。プログラマは、どのグラフィック処理インタフェースを呼び出すかについて注意を払う必要がなくなり得る。代わりに、プログラマは、グラフィックレンダリングエンジンインタフェースを呼び出すことによって、グラフィックスをレンダリングすることができる。2つの異なるグラフィック処理インタフェース、すなわち、D3DインタフェースおよびGDIをカプセル化するための処理、ならびに実際のグラフィックレンダリングプロセスにおける2つの異なるグラフィック処理インタフェースの間の変換のためのプロセスは、上述の例において説明することができる。OpenGLインタフェースおよびGDIを一緒にカプセル化するためのプロセス、ならびに変換プロセスも、上で説明したものと同様である。本開示の例によって提供されるグラフィックレンダリングエンジンは、2つのグラフィック処理インタフェースの利点を有することができる。本開示の例によって提供されるグラフィックレンダリングエンジンは、高いレンダリング効率、より僅かなCPU占有、良好な互換性、および使い易いインタフェースといった包括的性能を有することができる。
【０１０１】
本開示の一例によって提供されるグラフィックレンダリングエンジンは、本明細書において以下で説明することができる。
【０１０２】
図7を参照すると、図7は、本開示の一例による、グラフィックレンダリングエンジンを説明する概略図である。
【０１０３】
本開示のこの例によって提供されるグラフィックレンダリングエンジンは、
第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースのレンダリング関数情報を抽出するための、情報抽出モジュール10と、
第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースをグラフィックレンダリングエンジンインタフェースとしてカプセル化するための、インタフェースカプセル化モジュール11と、
情報抽出モジュール10によって抽出されたレンダリング関数情報に従って、グラフィックレンダリングエンジンインタフェースのメンバ関数を定義するための、関数定義モジュール12と、
グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースまたは第2のグラフィック処理インタフェースを呼び出すことによって、メンバ関数に対応するレンダリング関数を実施するための、レンダリング処理モジュール13と
を含むことができる。
【０１０４】
実際に、第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースのレンダリング関数は、以下の4つのカテゴリに分類することができる。
【０１０５】
第1のカテゴリは、レンダリングエンジンの初期化、レンダリングフローの制御、およびデバイスステータスの管理などの関数を含むことができる。
【０１０６】
第2のカテゴリは、様々な形状、文字、およびグラフィックスのレンダリング、リソースの選択、ならびに座標および視角の制御などの関数を含むことができる。
【０１０７】
第3のカテゴリは、座標の計算および表現関数とすることができる。
【０１０８】
第4のカテゴリは、ブラシ、ペン、フォント、およびイメージといった、様々なレンダリングリソースを表すことができる。
【０１０９】
第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースをカプセル化するため、情報抽出モジュール10は、第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースの共通のレンダリング関数情報を抽出する必要があり得る。すなわち、上記の4つのカテゴリのレンダリング関数情報を抽出することができる。第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースのレンダリング関数情報は、限定することなく、例として列挙された、上記の4つのカテゴリを含むことができる。
【０１１０】
レンダリング関数情報が抽出できた後、インタフェースカプセル化モジュール11は、第1のグラフィック処理インタフェースおよび第2のグラフィック処理インタフェースをグラフィックレンダリングエンジンインタフェースとしてカプセル化することができる。その後、関数定義モジュール12は、レンダリング関数情報に従って、グラフィックレンダリングエンジンインタフェースのメンバ関数を定義することができる。
【０１１１】
実際には、グラフィックレンダリングエンジンインタフェースのメンバ関数は、RenderDevice関数と、RenderTarget関数と、Size and Coordinate関数と、Resources関数とを含むことができる。各関数は、図2に示すことができ、ここでは繰り返さない。
【０１１２】
図8を参照すると、図8は、本開示の一例による、グラフィックレンダリングエンジン内のレンダリング処理モジュールを説明する概略図である。
【０１１３】
この例は、レンダリング処理モジュール13によって、グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースまたは第2のグラフィック処理インタフェースを呼び出すことによって、メンバ関数に対応するレンダリング関数を実施することを、本明細書において以下で詳細に説明することができる。レンダリング処理モジュール13は、
グラフィックレンダリングエンジンが始動したときに、第1のグラフィック処理インタフェースが正常に使用できるかどうかを判定するための、インタフェース判定ユニット130と、
第1のグラフィック処理インタフェースが正常に使用できる場合、グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースを呼び出すことによってメンバ関数に対応するレンダリング関数を実施し、第1のグラフィック処理インタフェースは正常に使用できないとインタフェース判定ユニットが判定した場合、グラフィックレンダリングエンジンインタフェースを用いて、第2のグラフィック処理インタフェースを呼び出すことによってグラフィックをレンダリングするための、インタフェース呼び出しユニット131と
を含むことができる。
【０１１４】
上で説明したように、第1のグラフィック処理インタフェースが正常に使用できるかどうかは、グラフィックレンダリングエンジンが始動したときに、レンダリング処理モジュール13のインタフェース判定ユニット130によって判定することができる。第1のグラフィック処理インタフェースが正常に使用できない場合、インタフェース呼び出しユニット131によって第2のグラフィック処理インタフェースを呼び出すことによって、グラフィックをレンダリングすることができる。上記の処理は、異なるグラフィック処理インタフェースの間の静的変換を指し得る。静的変換プロセスは、D3DインタフェースおよびGDIがグラフィックレンダリングエンジンインタフェース内にカプセル化される場合を例に取り、本明細書において以下で説明することができる。
【０１１５】
静的変換は、グラフィックレンダリングエンジンをD3Dモードで初期化するように(すなわち、上記の「コード」において言及されたInitAsD3DRenderDevice)ユーザが命令したときに、現在のOSがD3Dモードをサポートできず、またはD3Dを初期化するステップにおいてエラーが発生したことが検出されることがあり、現在のプロセスを、グラフィックレンダリングエンジンをGDIモードで初期化できるプロセスに変換できることを指し得る。変換プロセスは、プログラムが初期化されるときに実行できるので、グラフィックレンダリングエンジンは、そのとき、いかなるリソースも生成しなくてよい。したがって、静的変換プロセスは、単純であることができる。
【０１１６】
図9を参照すると、図9は、本開示の一例による、グラフィックレンダリングエンジン内の別のレンダリング処理モジュールを説明する概略図である。
【０１１７】
この例は、レンダリング処理モジュール13によって、グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースまたは第2のグラフィック処理インタフェースを呼び出すことによって、メンバ関数に対応するレンダリング関数実施することを、本明細書において以下で詳細に説明することができる。この例では、グラフィック処理インタフェースの動的変換プロセスを実施することができる。図8に示された例における、インタフェース判定ユニット130およびインタフェース呼び出しユニット131を別にして、レンダリング処理モジュール13は、
メンバ関数に対応するレンダリング関数を実施するために、インタフェース呼び出しユニット131が第1のグラフィック処理インタフェースを呼び出したときに、例外が発生したかどうかを検出し、インタフェース呼び出しユニット131に検出結果を通知するための、例外検出ユニット132
をさらに含むことができる。
【０１１８】
例外検出ユニット132が、例外を検出した場合、インタフェース呼び出しユニット131は、さらに、グラフィックレンダリングエンジンインタフェースを用いて、第2のグラフィック処理インタフェースを呼び出すことによって、グラフィックをレンダリングすることができる。
【０１１９】
上記のグラフィックレンダリングエンジンが始動したとき、第1のグラフィック処理インタフェースが正常であることをインタフェース判定ユニット130が判定できた場合、インタフェース呼び出しユニット131は、グラフィックレンダリングエンジンインタフェースを用いて、第1のグラフィック処理インタフェースを呼び出すことによって、メンバ関数に対応するレンダリング関数を実施でき、第1のグラフィック処理インタフェースが異常であることを例外検出ユニット132が検出できたとき、第2のグラフィック処理インタフェースを呼び出すことによって、グラフィックをレンダリングする。上記の処理は、異なるグラフィック処理インタフェースの間の動的変換モードとすることができる。具体的な動的変換方法は、本開示の例によって提供されるグラフィックレンダリングエンジンの第3の例のフローにおいて説明することができ、ここでは繰り返さない。
【０１２０】
本開示の例によって提供されるグラフィックレンダリングエンジンは、以下の利点を含むことができる。
【０１２１】
第1のグラフィック処理インタフェースと第2のグラフィック処理インタフェースとは、2つの異なるグラフィック処理インタフェースとすることができるので本開示の例では、異なる利点を有する2つの異なるグラフィック処理インタフェースを一緒にカプセル化して、グラフィックレンダリングエンジンインタフェースを形成することができる。アプリケーションのインタフェースをレンダリングするためのプロセスにおいて、グラフィックレンダリングエンジンインタフェースは、システム環境に従って、グラフィック処理インタフェースを自動的に選択して、対応するレンダリング関数を実施することができる。プログラマは、どのグラフィック処理インタフェースを呼び出すかについて注意を払う必要がなくなり得る。代わりに、プログラマは、グラフィックレンダリングエンジンインタフェースを呼び出すことによって、グラフィックスをレンダリングすることができる。2つの異なるグラフィック処理インタフェース、すなわち、D3DインタフェースおよびGDIをカプセル化するための処理、ならびに実際のグラフィックレンダリングプロセスにおける2つの異なるグラフィック処理インタフェースの間の変換のためのプロセスは、上述の例において説明することができる。OpenGLインタフェースおよびGDIを一緒にカプセル化するためのプロセス、ならびに変換プロセスも、上で説明したものと同様である。本開示の例によって提供されるグラフィックレンダリングエンジンは、2つのグラフィック処理インタフェースの利点を有することができる。本開示の例によって提供されるグラフィックレンダリングエンジンは、高いレンダリング効率、より僅かなCPU占有、良好な互換性、および使い易いインタフェースといった包括的性能を有することができる。
【０１２２】
上述の例についての上述の説明によって、本開示の技術分野の当業者は、本開示の例が、ソフトウェアおよび必要なハードウェアを用いて実施できること、またはハードウェアを用いて実施できることを知ることができる。背景に寄与する本開示の例における技術スキームのすべてまたは一部は、コンピュータソフトウェア製品によって実施することができる。コンピュータソフトウェア製品は、ROM/RAM、ディスク、またはCDなどの、記憶媒体内に記憶することができる。記憶媒体は、命令を含むことができ、命令は、本開示における上述の例の各々を実行するために、または例の一部において説明された方法を実行するために、(パーソナルコンピュータ(PC)、サーバ、またはネットワークデバイスなどの)コンピュータによって実行することができる。
【０１２３】
本明細書で説明および例示されたものは、様々な変形を伴った本開示の例である。本明細書で使用される用語、説明、および図は、もっぱら例として説明され、限定としては意図されていない。本開示の範囲内で多くの変形が可能であり、本開示の範囲は、すべての用語が、別段の指摘がなければ、最も広い合理的な意味をもつとされる、以下の特許請求の範囲およびその均等物によって確定されることが意図されている。
【符号の説明】
【０１２４】
10  情報抽出モジュール
11  インタフェースカプセル化モジュール
12  関数定義モジュール
13  レンダリング処理モジュール
130  インタフェース判定ユニット
131  インタフェース呼び出しユニット
132  例外検出ユニット
【図１】
0005805864.tif 000005
【図２】
0005805864.tif 000006
【図３】
0005805864.tif 000007
【図４】
0005805864.tif 000008
【図５】
0005805864.tif 000009
【図６】
0005805864.tif 000010
【図７】
0005805864.tif 000011
【図８】
0005805864.tif 000012
【図９】
0005805864.tif 000013