JP2004506262A - グラフィックハードウェアおよびソフトウェアの開発 - Google Patents
グラフィックハードウェアおよびソフトウェアの開発 Download PDFInfo
- Publication number
- JP2004506262A JP2004506262A JP2002517620A JP2002517620A JP2004506262A JP 2004506262 A JP2004506262 A JP 2004506262A JP 2002517620 A JP2002517620 A JP 2002517620A JP 2002517620 A JP2002517620 A JP 2002517620A JP 2004506262 A JP2004506262 A JP 2004506262A
- Authority
- JP
- Japan
- Prior art keywords
- application
- blocks
- block
- platform
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 46
- 238000012545 processing Methods 0.000 claims description 82
- 238000011161 development Methods 0.000 claims description 35
- 230000008569 process Effects 0.000 claims description 27
- 230000008901 benefit Effects 0.000 claims description 10
- 238000011068 loading method Methods 0.000 claims description 8
- 238000013507 mapping Methods 0.000 claims description 6
- 230000007717 exclusion Effects 0.000 claims description 5
- 238000012544 monitoring process Methods 0.000 claims description 3
- 238000007781 pre-processing Methods 0.000 claims description 2
- 230000007246 mechanism Effects 0.000 abstract description 15
- 230000010354 integration Effects 0.000 abstract description 4
- 230000006870 function Effects 0.000 description 101
- 150000001875 compounds Chemical class 0.000 description 31
- 238000013459 approach Methods 0.000 description 22
- 238000011156 evaluation Methods 0.000 description 21
- 238000013461 design Methods 0.000 description 15
- 238000012546 transfer Methods 0.000 description 14
- 238000004891 communication Methods 0.000 description 12
- 238000004088 simulation Methods 0.000 description 12
- 238000007726 management method Methods 0.000 description 11
- 238000013515 script Methods 0.000 description 11
- 230000003993 interaction Effects 0.000 description 9
- 238000013468 resource allocation Methods 0.000 description 9
- 238000005034 decoration Methods 0.000 description 8
- 238000003384 imaging method Methods 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 7
- 230000000007 visual effect Effects 0.000 description 7
- 239000000872 buffer Substances 0.000 description 6
- 230000008859 change Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 206010065042 Immune reconstitution inflammatory syndrome Diseases 0.000 description 5
- 230000006399 behavior Effects 0.000 description 5
- 230000000694 effects Effects 0.000 description 5
- 230000002452 interceptive effect Effects 0.000 description 5
- 238000004806 packaging method and process Methods 0.000 description 5
- 230000002829 reductive effect Effects 0.000 description 5
- 238000011144 upstream manufacturing Methods 0.000 description 5
- 238000005538 encapsulation Methods 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 238000009877 rendering Methods 0.000 description 4
- 238000003860 storage Methods 0.000 description 4
- 239000002131 composite material Substances 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000036961 partial effect Effects 0.000 description 3
- 241000191291 Abies alba Species 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 150000007514 bases Chemical class 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000001427 coherent effect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000003908 quality control method Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000002123 temporal effect Effects 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 238000012800 visualization Methods 0.000 description 2
- 241001481833 Coryphaena hippurus Species 0.000 description 1
- PEDCQBHIVMGVHV-UHFFFAOYSA-N Glycerine Chemical compound OCC(O)CO PEDCQBHIVMGVHV-UHFFFAOYSA-N 0.000 description 1
- 241001247287 Pentalinon luteum Species 0.000 description 1
- VYPSYNLAJGMNEJ-UHFFFAOYSA-N Silicium dioxide Chemical compound O=[Si]=O VYPSYNLAJGMNEJ-UHFFFAOYSA-N 0.000 description 1
- 239000000853 adhesive Substances 0.000 description 1
- 230000001070 adhesive effect Effects 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000000386 athletic effect Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000008275 binding mechanism Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000009414 blockwork Methods 0.000 description 1
- 210000002421 cell wall Anatomy 0.000 description 1
- 230000002860 competitive effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 230000000593 degrading effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000013213 extrapolation Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000009940 knitting Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000036515 potency Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000003245 working effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/20—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterised by details of the game platform
- A63F2300/203—Image generating hardware
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/6009—Methods for processing data by generating or executing the game program for importing or creating game content, e.g. authoring tools during game development, adapting content to different platforms, use of a scripting language to create content
- A63F2300/6018—Methods for processing data by generating or executing the game program for importing or creating game content, e.g. authoring tools during game development, adapting content to different platforms, use of a scripting language to create content where the game content is authored by the player, e.g. level editor or by game device at runtime, e.g. level is created from music data on CD
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/66—Methods for processing data by generating or executing the game program for rendering three dimensional images
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Processing Or Creating Images (AREA)
- Stored Programmes (AREA)
- Image Generation (AREA)
Abstract
【選択図】図13B
Description
(発明の背景)
(発明の分野)
本発明はコンピュータグラフィクスに関し、より詳細には、グラフィクスハードウエアおよびソフトウエアの開発に関する。
【0002】
(関連技術)
(初期のグラフィクスシステム)
Giravion−Dorandからの、1954年版のDX−50のヘリコプター訓練器などの初期の画像システムは、光学および機械的システムを用い、そしてデータベース、画像システム、および表示システム間の区別をしなかった。これらのシステムハードウエア中枢構造は、当時の利用できるハードウエア技術に関連するリアルタイム性能および画像品質目標の意欲的背景から生まれた。画像生成技術の誕生は、Ivan SutherlandのSKETCHPADシステムで始まった。Evans & Sutherandによって、10年後に導入されたCT3は、今日もなお使用されている画像生成アーキテクチャを形成した。NASAに初めて供給されたこのシステムは、プログラマブブルでないグラフィクスハードウエアに接続され、そのソフトウエアを実行させるフロントエンドプロセッサのDIGITAL EQUIPMENT CORPORATIONのPDP−11から構成されていた。このシステムの継続の技術革新は、その画像システムからデータベースを分離し、そしてカリグラフィックな表示器を装備したPDP−11/40上に、実行するモデリングツールを導入することであった。CT3は、エッジアンチエイリアジング機能およびGouraudシェーディング機能を有し、900形のポリゴンを25Hzで生成可能であり、そして1以上の関連表示サブシステムへの出力を有し、ハードウエアまたはソフトウエアインタフェースを介して、シミュレーションホストに接続され、その画像生成をデータベースで駆動されるシステムとして定義した。そのようなシステムは図1に示される。画像生成102には、データベース104からのデータを基に、画像を生成することが示される。その画像は次に、1以上の表示装置106に表示される。
【0003】
(シーングラフツールキット)
初期の1990年台のもの以来、汎用のワークステーションは、リアルタイムの画像生成機能を実現するために、SGIのIRIS PERFORMERなどの洗練されたソフトウエアを用い、専用のハードウエア画像生成装置に増々匹敵するようになった。例えば、シーングラフはグラフィックスの抽象物として用いられた。シーングラフは、高級レベルのシーンかつ描写記述用言語である。シーングラフは、ツールキットのアプリケーションプログラミングインタフェース(API)の部分として用いられる。シーングラフの考えは、PERFORMERおよび類似品を強調したもので、それは画像データベースを表し、処理の場としての役目を行い、そして新規に開発された拡張に対する連結点である。PERFORMERはシーングラフの抽象物を用いて、ハードウエアおよび性能に関する項目の制御を維持しつつ、アプリケーション開発者に柔軟性を与える。それはまた、開発者のために、出発点として人気があったサンプルアプリケーションをも導入した。PERFORMERは、汎用のグラフツールキットにおいてシーングラフの初めての使用者ではなかった。しかしながら、PERFORMERは、開発者の便利さまたはハードウエアの独立性よりも性能重要性に焦点を合わせた。
【0004】
IRIS PERFORMERのユーザの領域外では、中間ソフトウエア層はアプリケーションの性能を落としているという共通の考えが存在する。例えば、ゲーム業界での歴史的認識は、ツールキットはただ、プロトタイプ開発用に過ぎず、アプリケーションは、インストール前に書き直されなければならないということである。この点とは対照的に、IRIS PERFORMERおよびPARADIGM ENTERTAINMENTのVISKITは、インテリジェントでかつ最適化されたソフトウエア層がアプリケーション性能を堅実に改善できていることを示している。
【0005】
(第4の要素)
画像シミュレーション業界におけるIRIS PERFORMERの成功は、OPENGLのようなインタフェースよりもより抽象的であるが、古典的な画像生成のインタフェース制御定義よりも、より柔軟性のあるいツールキットのレベルのAPIの考えを流行させた。画像生成装置の構造に、第4の要素(画像シミュレーションのランタイム、すなわち、シーングラフを越えたさらなる機能を提供した高級レベルのソフトウエア)の導入へのこの導きは、古典的画像生成装置のターンキー機能を再生成する必要があった。これは図2に示される。この図において、データベース202内の情報は、ランタイムソフトウエア204によって用いられる。この結果のデータはグラフィックスワークステーション206によって用いられ、1以上の表示装置208上において表示する画像を生成する。
【0006】
そのようなシステムの例には、AechelonのC−Nova、RaytheonのRightView、ThomsonのSpace Magic、the Equipe Simulation Real Time、Multigen−ParadigmのVega、および、WormaldのWIGSが含まれ、それぞれはIRISに上の層に置かれる。そのシーングラフAPIおよび画像生成ランタイムの対は、画像シミュレーションを改善させた。すなわち、危険性、日程、および費用を減少させた。開発者は、指定企業ベンダーの強化に依存しない機能を加味でき、統合者がシステム構成において独自の技術を使用しかつ保持するのを支援し、そして画像生成界のニーズへの商業的グラフィックスハードウエアの能力に、より良く整合させ得る。
【0007】
しかしながら、ソフトウエア技術の進歩は、新しい障壁の発見を導き得る。このことは、そのシーングラフに関しても真実であり、ここにおいて開発者は一貫して同じ技術問題に遭遇する。
【0008】
小さい拡張モデル(Weak Extension Model)。そのシーングラフは、階層的アーキテクチャ、BSP定義、スイッチ範囲の詳細レベル(LOD)、および類似の横断特性を表現するのに良い構造である。しかしながら、アプリケーション開発者がコールバック機能を付加し、シーングラフ要素の再定義を可能にすように拡張されると、問題が出現する。この「ツリー修飾(tree decoration)」という比喩は、シーングラフを臨界的であるが暗黙の順序従属性に変換し、任意の2以上の拡張が不一致になりがちであるという結果を有するシーングラフ横断の意義を密かに変えている。
【0009】
制限されたコード再利用。別々の開発者が、拡張モデル意味競合のために、共通のシーングラフに融合され得る独立した機能を構築することは、不可能でなくとも困難である。このことは、それらには独立のソフトウエアプロバイダからのサブ構成要素を統合化するフレームワークが不足しているため、統合者が固有の画像シミュレーションランタイム環境を開発するように導き、この結果、同じ基本機能の多数のバージョンを生むことになる。このことは、提案する技術評価者を悩ませ、彼等はあるマシーンがある機能を可能していることを知っているが、ある特定の競争者が所望通りにそれを実現しているかどうかを知ることができない。そして、あるプログラムの弱い手段を別のプログラムからの強い手段に置換する方法が存在しない。
【0010】
統合化の困難。たとえ統合化タスクの最後の20%が、見掛け上80%の時間と費用を必要としても、これを支援するツールがわずかしかない。拡張モデル問題が統合化時間において表面化(異なったサブ構成要素が初めて共に動作する時)し、そして開発者がこのシーングラフの内部作用の輪郭把握、理解、または変更できない場合、シーングラフは部分的に責任がある。シミュレータが「殆ど常に」フレームレートで実行していることをテストで示された場合でも、この開発者は、このシーングラフが、フレーム拡張を起こさせるために、異なって何を行っているかを知るのに通常迷う。
【0011】
アプリケーション状態の複製。シミュレーションのアプリケーションは、オブジェクトの位置、光源、および他の状態要素を計算または管理する。この同じ情報は、自己の性質により不透明な形態としてシーングラフにもまた現われなければならなく、そしてこれは、同期と更新時の問題を有して、2つの間のアプリケーション状態の複製を要求する。
【0012】
シーングラフは自己の成功の犠牲者である。すなわち、それはグラフィクスの抽象物として良好に働くので、それは、アプリケーションの抽象物としてさらなるサービスの中に押しこまれたが、それはアプリケーションの抽象物ではない。これらの問題は、シーングラフの実現の欠陥というよりは、元来の構造不整合の印である。完全に異なった抽象およびこれに関連するデータ構造は、必要とされかつアプリケーションの最深部の本質を表現できる。新タイプのリアルタイムのグラフィックスソフトウエアは必要であり、これは、アプリケーションレベルの概念および関連事項のために、より高級レベルの対応パーツとして、シーングラフを補完する。
【0013】
新しいファクターは、これらの問題に前例のない緊急性を加える。すなわち、より低コスト3Dグラフィックスハードウエアデバイスは、画像生成装置において働く機能、品質、および性能を有するが、これに関与するソフトウエアはこれらを有しない。多くの場合、次世代のハードウエアは、通常の訓練アプリケーションに必要とされるよりもさらなる機能を提供する。しかしながら、このことは、アプリケーションの構築がより容易でかつより費用がかからないということを意味しない。画像生成装置をワークステーションよりは、これらの構成要素から構築することの方がより困難になりがちで、このことは、丁度、幾人かの統合者が、ベンダーに合わされたIRIS実行者用APIの出現前に、強力な汎用のワークステーションを、古典的な専用画像生成装置よりも、理解するののが難しいと判断したのと同じである。低価格の点で、この分野での驚くべき性能を包含することは、高技術グラフィックスのアプリケーションソフトウエアの移植性に対応する必要があり、そしてこれは同じように、アプリケーションをあるハードウエアシステムから別のシステムに移動できる可搬型構成要素として考えることを意味していることは、発明者に認識されていた。ハードウエアベンダーは、同調かつ伝達するアプリケーションへの道筋として、標準機能のある別の手段を提供可能にさせることによって、ハードウエア能力の差別化を促進するソフトウエアが必要とされている。
【0014】
図3Aおよび図3Bは、異なった機能を有した異なったハードウエアプラットフォームの機能を用いる方法で、ゲームソフトウエアを開発することの問題を示す。図3Aは、SONY PLAYSTATION2のプラットフォームに顧客専用化されたゲーム開発の階層化アプローチを示す。図3Bは、パーソナルコンピュータ(PC)のプラットフォームに顧客専用化されたゲーム開発の階層化アプローチを示す。ハードウエアとゲームソフトウエア間の一様でない境界線によって提案されるように、顧客専用化の階級は必要である。さらに、必要な顧客専用化の現象は、図示するように、上層へと拡張する傾向である。ゲームソフトウエアおよびゲーム内容間の境界もまた、必ず顧客専用化される。同じように、ゲーム内容および開発ツール間の境界も顧客専用化される(ゲーム内容の開発が図4にある例に関してさらに示される。この図は、レベルエディタを用いて、音、モデル、アニメーションおよび挙動などの内容の種々の局面の合体されたものを示す。)。
【0015】
基本的に従来努力と異なるアプローチが必要とされ、この従来努力は、機能の同じ重要な実現をさせ、そしてより低レベルのハードウエアインタフェースのシステム依存型の手段およびシーングラフAPI間に、「つなぎ目(seam)」を置いた。これらの低レベルアプローチは、移植可能な3Dグラフィックのベンチマークパッケージによって証明されたように、元来弱点を有する。低レベルの拡張メカニズムは、移植性のアプリケーションの最適化から、例えば、マルチプロセッシングを透明に挿入することを不可能にすることによって、ハードウエアベンダーを制限する。それらはまた、低レベルAPI開発者によって認可された特定のアプローチを用いて、高級レベル設計の実現を要求することによって、変革を抑制する傾向がある。
【0016】
ハードウエアベンダーが、OpenGLの関連する拡張メカニズムを用いて、新機能を追加することは実に難しく、そしてそのようにした後で、アプリケーション開発者が書き替えるように誘発され、そしてこれらのシステム依存型の拡張を含む製品を再リリースしなければならない。この問題をより高いレベルの抽象物を提供することによって解決される新規のソフトウエアのアーキテクチャが必要とされ、この抽象化は、それらのハードウエアの相違をアクセスするために、ハードウエアベンダーに、実存の方法、コンパイルされたアプリケーションソフトウエアの実現機能を変えるメカニズムを提供する。
【0017】
(発明の要旨)
これらの関連事項と直面して、これらの問題を一斉に解決し、そしてこのようにすることにおいて、リアルタイム画像生成装置の展望を、コンピュータグラフィックスのアプリケーション分野で拡張できるアプローチが提供され、そしてこのアプローチは、ゲーム、訓練、ネットワーク上の画像化、およびコンピュータグラフィックスが用いられる他の分野に限定されてないことを含む。この新規の技術は、下記のセクションで開示されるが、ソフトウエアプラットフォームおよびアプリケーションフレームワークの概念をベースにしている。これらのアイデアは、現在の画像生成ランタイムアプリケーションを、グラフィックスシステムを実現するに必要な接続性、機能、および挙動を定義する新しいフレームワークと置換する。このすべてが種々のリアルタイム構成要素をランタイムアプリケーションの中で動的に統合する統合化機構を用いたソフトウエアプラットフォームに関連して生じる。結局のところ、ハードウエアを開発努力の中心的焦点として置き、このソフトウエアプラットフォームは機能的に、少なくともシミュレーションホストコンピュータ、データベース開発者、および画像システムの調達および保守に責任のある人によって見えるように、グラフィックスのアプリケーションである。
【0018】
革新的なソフトウエアのアーキテクチャの、グラフィカルアプリケーションプラットフォーム(GAP)が提供される。ある実施形態では、このGAPは、実行型の論理ブロックを含むアプリケーションのリアルタイムのカーネル(ARK)および構成要素を含む。GAPは、画像生成装置、ワークステーション、およびプラットフォームおよびフレームワークの概念をリアルタイムのグラフィックスドメインに拡張することによるシーングラフ達成の上に構築する。このことは、画像生成関連と現代のハードウエアとソフトウエアの現実間のギャップを、内容、ハードウエアおよびアプリケーションを分離することによって橋渡しをすることである。この新規のアプローチはまた、新しい低コストで高性能のグラフィックスハードウエアに関しての選択と収集プロセスに関連する、急に発生する関連事項を解決する技術を提供する。
【0019】
上述した本発明および本発明の他の特徴および利点は、添付の図面とともに、後述の本発明の好適な実施形態の詳細な説明からより明瞭になる。
【0020】
(好適な実施形態の詳細な説明)
ここで、本発明の好ましい実施形態を図面を参照して説明する。ただし同じ参照番号は、同一かまたは機能上類似の要素を表す。また、図面において、各参照番号の最上桁は、この参照番号が初めて用いられた図面に対応する。特定の構成および処理を説明しているが、これは説明の目的のためだけになされたことを理解すべきである。他の構成および処理は、本発明の精神および範囲を逸脱すること無く用いられることを当業者は理解する。本発明が種々の他のデバイスおよびアプリケーションにも用いられる得ることは、当業者にとって明らかである。
【0021】
(1.概要)
次のセクションで開示される発明は、ソフトウエアのプラットフォームおよびアプリケーションのフレームワークの概念をベースにしている。これらのアイデアは、現代のグラフィックのアプリケーションの構造、フレームワーク、またはライブラリを、画像生成装置を実現するのに必要な接続性、機能および挙動を定義した新規のフレームワークと置換する。このすべては、種々のリアルタイム構成要素を、リアルタイムアプリケーションで動的に統合する統合メカニズムを用いるソフトウエアのプラットフォームの関連で生じる。
【0022】
この概要セクションは次のように編成される。
【0023】
A.プラットフォームおよびフレームワーク
B.グラフィカルアプリケーションのプラットフォーム
C.グラフィカルアプリケーションのフレームワーク
D.GAPの特徴
E.ブロック、接続、および拡張
1.ブロック構造およびインタフェース
2.ブロック間の接続
3.構成要素としてのブロックのパッケージ化
4.ブロック実行モデル
F.GAPの拡張化
G.GAPに従う世界
(A.プラットフォームおよびフレームワーク)
本明細書で用いられる用語のプラットフォームは、プログラムを実行する完全な環境である。最も共通のプラットフォームは、システムおよび言語に関係するランタイムライブラリを有したオペレーティングシステムである。内部のLispインタプリタに介して、ユーザ拡張の方法で共に一体化した、低レベルのテキストマネージャー機能を有したEMACSのようなアプリケーションは、アプリケーションレベルのプラットフォームの革新的な先駆者である。本発明のアプローチおよびその先駆者の相違を描くには、ウエブのブラウザを類似品として用いることができる。
【0024】
スクリプトおよびプログラム拡張がパッケージされた場合、現代のウエブブラウザは、ウエブページの「プログラム」を実行するプラットフォームを表す。ブラウザはまた、アプリケーションでもあり、そしてアプリケーションとプラットフォームの区別は微妙で、かつ度々見逃される。アプリケーション部分は、ネットワーク化されたペーパレス通信(HTMLブラウジングとエディテング、電子メイル、ニュースリーデイングなど)、グラフィカルユーザインタフェース、およびお好みのウエブサイトにリンクするようなナビゲーション支援)に関連する機能を提供する。プラットフォーム部分は、「プログラム」(HTML、Java(R)、CGIスクリプトなどのフェッチ)、これらのプログラムの解釈のための標準化されたセマンティクス、およびHTML、Java(R)、そしてスクリプト言語で書かれたプログラムを評価するランタイム「エンジン」をロードするメカニズムから成る。
【0025】
歴史的には、ブラウザは、これら2つの機能を別々の局面であらわにしなかった。1つの局面は、ウエブページ、Java(R)アプレット、またはブラウザのGUIまたは機能を構築した他のものに再定義または拡張するCGIスクリプトを作ることができず、そして外部の開発者がこのブラウザのインタフェースを異なったHTMLプラットフォームに移動させることができなかった。もしブラウザ開発者がそのような能力のもを設計をしたら、何が変わったか。彼等は、HTML、Java(R)、スクリプト言語をフェッチかつ実行できた「ブラウザ仮想マシン(browser virtual machine)」(BVM)を構築しただろう。これはプラットフォームになっただろう。どんな人でもそれを走らせるが、それについて少ししか知らないだろう。なぜならば、彼等は、以前のウエブブラウザと同じであるが、BWMによって実行可能なコードのモジュールで実現された「ブラウザアプリケーション」を構築しただろう。これは、エンドユーザが見るアプリケーションであり、そしてここにはルックアンドフィールが存在する。しかしながら、彼等は、変わり易さをBVMに構築するので、開発者は、例えば、「GUIモジュール」を彼等固有のもののひとつに置換するか、または、「HTMLモジュール」に新規機能を拡張するための、標準ブラウザのアプリケーションの各局面を変形し得る。
【0026】
ブラウザ開発者はこれらの長所を認識し、そして、ウエブブラウジングが、HTML、Java(R)Script、およびJava(R)を統合する、新規のアプリケーションを開発する基礎としての役目を果たすことができるように、プラットフォームおよびフレームワークアプローチに移動させようとしている。モジュールの拡張かつ置換するこの能力を提供することは、アプリケーションが、慣習的であるよりもより高級な程度の柔軟性および一般性を有するということを必要とする。フレームワークは、本発明に従うと、どのアプリケーションを構築するかで定まる構成セットのAPIよりも、包括的であるが変更容易なアプリケーションのこの種のタイプとして、考えられ得る。
【0027】
2つの階層的クリスマスツリーキッドを照合することはこの差を説明することになる。
【0028】
構成セット。頑丈なツリー、ライト(lights)の箱、装飾品の箱、およびホックなし。取り扱い書「やって見よう(Go for it)」、および美しい写真が付属する。
【0029】
フレームワーク。装着済みのライト、ホック、およびわずかな装飾品がプリーインストール(pre−installed)された同様のツリー。このホックは、作製されるどんな追加装飾の装着も可能にする。実存するライトおよび装飾品もまた取り除かれ得る。
【0030】
フレームワークは、独立した開発者が、正確に同じ方法で共通の概念に依存するモジュールを書くことを可能にし、そしてそれは、プログラミングの複雑さが標準と新規アプリケーションとの差だけに限定されるので、開発を最小にする。構成セットのアプローチは常に、結果のアプリケーションの複雑さに比例した努力を必要とする。これらの相乗効果は、フレームワークの長所である。すなわち、それは、新規の開発プロジェクトを増分努力型に変換し、そして他の人と共用できるモジュールを奨励づける。これらの考え、すなわち、プラットフォームとフレームワークは、本明細書内で開示されるもので、ハードウエアの区分の各ビットをアクセスする移動型の、高性能のアプリケーションを開発するためのソフトウエア技術の中心である。これらの概念をブラウザからリアルタイムグラフィックス領域に変換する場合、完全なグラフィカルアプリケーションプラットフォームを実現するために、時間、同期、並列処理、およびロードマネージメントなどのブラウザに現われない追加の条件が処理されなければならない。
【0031】
(B.グラフィカルアプリケーションプラットフォーム)
グラフィカルアプリケーションプラットフォーム(GAP)は、グラフィカルアプリケーション開発のためのプラットフォームをインプリメントする。その広さおよび拡張性により、効率的でかつ移植性のよい、次世代の実時間のグラフィックスアプリケーションのインプリメンテーションが可能になる。その三つの主なセクションは、以下の通りである。
【0032】
カーネル。アプリケーション実時間カーネル、すなわち、ARKは、アプリケーションレベルの実時間スレッドマネジャーである。それは、各利用可能なCPU上で走行している一つ以上のARKスレッドのそれぞれによって実行されるブロックを列挙する決定論的なスケージュールに従ってコードブロックを呼び出す。システム基礎構造要素のセットもまた、ARKの中に構築される。これらの要素は、コンポーネントを動的にロードおよびアンロードし、ブロックの実行をモニタし、そして、スレッド管理、メモリ共有、相互排除、および同期化を支援する。
【0033】
コンポーネント。機能のインプリメンテーションは、実行可能なコンポーネントとしてパッケージングされ、そしてこのコンポーネントは、強力なネゴシエーションベースのリソース割当スキームをサポートする。標準コンポーネントは、表示構成および位置外挿および他の機能等の概念をインプリメントする。この他の機能は、オブジェクトのモーフィング(morhing)、先進の表面シェーディング(Shading)、ダイレクトI/O転送(transfer)、および普遍的なテクスチャ(texture)、地形(terrain)、オブジェクト、および文化的機能等をチューニングするシステム特有性に従う。コンポーネントは、ハードウェア製造業者の装置を通じて特定のハードウェアに再書き込みされる、移植可能なインプリメンテーションを有する。この構造およびチューニングスキームは、GAPの基本的な「差別化されるが移植可能な」機構である。この構造およびチューニングスキームを通じて、アプリケーション開発者は、対象(what)および理由(why)に焦点を合わせ、この方法(how to)をプラットフォーム開発者および同業のハードウェアパートナーに任せる。
【0034】
接続。接続は、実行可能な内部のブロック間またはコンポーネント間のデータの流れをインプリメントする。それらは、上流ブロックから下流ブロックへの一方向の移送に影響を及ぼす。それらは、通信パターンを変更するために「プラグボード」を提供する。通信パターンの変更は、新しいブロックを挿入する場合または古いものを置き換える場合の必須のタスクである。例えば、潜在的に可視のオブジェクトを抽出するためにグラフを横切らせる一つのブロックとオブジェクトを受信し、かつそれらを描く別のブロックとの間の接続を考慮する。新しいブロック、例えば、所与のサイズよりも小さいオンスクリーンの映像を有する任意のものを拒絶するものをこれら二つの間に挿入することは望ましくあり得る。そのようにすることは、横切るのと描くのとの間の接続を削除し、横切るのと拒絶するのとの間および拒絶するのと描くのとの間の接続を加えることを意味する。ARKは、このようなランタイム(run−time)の再構成を再コンパイルなしで効果的な並行処理を意識した接続機能を通じてインプリメントする。
【0035】
(C.グラフィカルアプリケーションフレームワーク)
GAPは、また、グラフィカルアプリケーション開発のためのフレームワークを提供する。完全なグラフィックスアプリケーションが提供され得、開発者は、その完全なグラフィクアプリケーションを直接使用し得、または、望み通りに変更および拡張し得る。標準のアプリケーションの提供によって、共通の名前付けおよび構造フレームワークが派生されたアプリケーション用に確立され、この派生アプリケーションは異質の機能とうまく組み合った柔軟性を非常に具体的な意味のあるコンテキストの中に収容する。
【0036】
設計は、複数のCPUおよび複数のグラフィックスデバイスへの拡張をサポートしているが、実際、これは、より小さい構成のための任意のオーバーヘッドを意図していない。この考えは、進歩した構成において、より十分に収容される構造を提供するだけのことである。フレームワークアプリケーションは、グラフィカルアプリケーションのための広範囲のクラスの共通の重要な構造を提供する。この構造は、取り除かれ、置き換えられ、拡張され、そして切断および再接続され得るブロック間の接続でもって露出されおよび隠され得るブロックから構築される。これにより、ある開発者は、カスタムアプリケーションをインプリメントするのに必要と判断される量のGAPフレームワークを再成形することが可能となるが、このアプリケーションはシステムを論理的に損なわず、そして、所望ならば、他の開発者によって拡張可能である。それは、さらに、開発者は、変えたGAPの部分を理解することのみが必要であることを意味する。
【0037】
アプリケーションフレームワークは、いくつかのフェーズ(phase)を定義し、フェーズのそれぞれは、潜在的に並行な実行スレッドに応答する。コンポーネントは、これらの種々のフレームワークフレーズ間に分割される。GAPアーキテクチャは、正確なパイプラインの実行のためにデータへの並行アクセスの自動検出を提供する。この機能は、透明であるが効果的な並行処理程度(parallelism)をすべてのレベルのインプリメンテーションにおいて可能にしつつ、ハードウェアアーキテクチャからの独立性を提供する。このGAPの性能は、複雑な複数スレッドのアプリケーションに対して開発時間を大きく縮小し得る。
【0038】
(D.GAPの機能)
GAPの機能は、四つのグループに組織化される。カーネルは、ハードウェアリソースおよびパブリックなデータ構造へのアクセスを提供する。標準プラットフォーム機能は、共通してアプリケーションに用いられるタスクをインプリメントする。市場指向の機能は、特定のドメインの概念を処理する。そして、アプリケーションの特定の機能は、独自性を特定のアプリケーションに提示する。
【0039】
アプリケーション実時間カーネル(ARK)。プロセス管理、実行スレッド、およびプロセッサ、グラフィックスパイプライン、ディスプレイ、テクスチャメモリ、フレームバッファメモリ、およびシステムメモリのような物理的リソース、相互アクセス排除、明示的データ共有、および内在のデータプライバシー;高精度カウンタ、タイマー、および日時計の時間;非同期ファイルシステム動作およびメモリ転送;およびランタイムコンポーネントのロードとアンロードとを含む。
【0040】
標準プラットフォーム機能。入力デバイス管理;モーフィング、補間(interpolation)、変形(deformation)、および評価;空間的音声処理;活性(activity)ロギングおよび再生;構成ファイル構文解析(parsing)および評価;座標システム処理(精度管理および明瞭度(articulation))グラフを含む;およびオブジェクト、テクスチャ、マテリアル(material)、および音のページング等を含む。
【0041】
市場指向機能。これらは、産業の標準的な概念である。基本的なビジュアルシミュレーションに対して、これは、暦表時;地球基準の一時的位置、太陽系オブジェクト位置および外観;天体領域および星座の視覚化;地形の高さ、視界交差の線、複数点の地形続き、オブジェクトの相互視認決定(intervisibility determination)、および衝突検出;一様でない層状の霧、地平圏のもや、雨雲(scud cloud)、動的な雲の容積、および方向性を持つ地平圏の輝き;雨、みぞれ、雪に対する空間的な影響;多くの他の機能を有する大気モデル等をサポートする普遍的なモデルを含む。
【0042】
アプリケーション特有の機能。フレームワークを特定のアプリケーションに拡張するかまたは再成形する要素。例えば、これは、運動モデル、コマンドライン処理、環境変数処理、グラフィカルユーザインターフェースのカスタマイゼーション、およびアプリケーション特有のデータベースのローディングおよびデコーディング論理を含み得る。
【0043】
同時に、ARKおよび標準機能は、グラフィカルアプリケーションプラットフォーム(図5参照)を定義する。これは、一つ以上の市場指向機能のセットと組み合わされた場合、包括的な開発および開発プラットフォームを定義する。GAPを基礎とする開発者は、これらの機能、市場指向集合からの機能、および顧客アプリケーション特有の機能を用い、それらのアプリケーションをインプリメントする。
【0044】
(E.ブロック、接続、および実行)
(1.ブロックの構造およびインターフェース)
ブロックは、GAPフレームワークの基本的要素であり、双方向のビジュアルコンピューティングの「アトム(atoms)」を定義する。それらは、GAP内の実行の基本ユニットであり、入力および出力連鎖の終了点である。一旦構築されると、ブロックは、入力および出力点と他のブロック上のコンパチブルな点との間に接続を構成することによって、アプリケーション(またはカプセル化ブロック)に結合される。あるブロックは、入力を提供するブロックのアイデンティティ(identity)または出力に接続するブロックのアイデンティティ(identity)を知らない。ブロックインターフェース定義に明記されたデータにより、ARKは、コンパイルされたブロックのためにこのランタイムの動的接続機能を不可視でかつ効率的にインプリメントすることができる。ブロックのコンテンツは、図6に示され、以下の要素から成る。
【0045】
入力接続点605。名前は、内部および外部の両方に接続を形成する場合に用いられる。タイプは、混合されたデータ構造であり得、その場合、アクセスは、集合体の「名前」の上に加わった、「名前のメンバー」に向けられ得る。
【0046】
出力接続点610。出力点は、本来のオブジェクトから派生されたパブリック状態要素に対応する。これら内部オブジェクトへのアクセスは、対応する出力点に接続された他のブロックに提供される。
【0047】
プライベート状態要素615(ブロックインスタンス(instance)データを含む)。
【0048】
標準関数620。construct()、destruct()、およびinitialize()等の標準機能は、オブジェクトにライフタイムサービスを提供し、evaluate()関数は、ブロックの処理をインプリメントする。
【0049】
一例において、大抵のブロックは、もともとそのシステム用にコンパイルされ、且つ、最適化されたアセンブラー、CおよびC++コードで実行される(このため、我々の性能指向の戦いは、「一度の書き込みで、どこにおいてもコンパイルする」と大声で叫ぶ)。コンパウンドブロック(Compound blocks)として知られる他のものは、より簡単なブロックをプロセッシンググラフとして一緒に編み合わせることによって純粋に表現され得る。これらの網状物は、ブロックへのリンクおよびブロックからのリンクおよびブロックの入力および出力から内部ブロックへの連鎖および内部ブロック間の連鎖を定義し、単一のスクリプトによって定義されかつインプリメントされる。
【0050】
(2.ブロック間の接続)
接続は、ブロックを一緒に連結する。それらは、本質的に一般的なトポロジーを通じたサブルーチンの呼び出し(invocation)のための引数(argument)を特定するための手段である。このトポロジーにより、関数がコンパイルされた後に接続トポロジーへの変化が可能である。各ブロックの入力点から任意の他のブロックのコンパチブルな出力点への単一の接続が確立され得る。
【0051】
多くの接続プロパティは、データが内部データメンバー(本来のオブジェクトから派生される)から一つのブロックの出力点(生産者−下流)を通じて入力点(別の消費者)に流れる一方向パイプラインとしてそれらを視覚化することによって説明される。接続は、ランタイムの時に生成され、実行する間に形成されおよび消去され得る。例えば、視点を風景を通じて移動させることは、幾何学的ページング機能が新しいアニメーションコンポーネントを新たにページングされた幾何学的図とともにロードすることを引き起こし得る。入来するアニメーションブロックは、カメラ位置に取り付けられる必要があり、この接続は、上記のように形成される。一旦接続されると、カメラ位置のデータは、ブロックの入力点に関連する内部アクセサ関数(accessor function)が呼び出された場合に新たにロードされたブロックに対して利用可能になる。
【0052】
並行モードに関係なくこのデータフローモデルを維持することによって、ARKは、並行して実行するブロックの間での共有データへのコヒーレント(coherent)なアクセスを提供し、異なる速度で同期するか、または、非同期で動作するブロック間のデータの散発的な発生と消費とを可能にし、そして同時に処理されるデータのいくつかの複数メガバイトフレームを有して、パイプラインを処理するために一時的なコヒーレンスを提供する。
【0053】
(3.コンポーネントとしてのブロックのパッケージング)
コンポーネントは、GAP環境における最も高レベルのオブジェクトである。それらは、反復使用の広域のリソース割当プロセスに基づいて、ブロックの新しい集合を生成するための工場であり、そして、このプロセスは、通常かなり異なる物理的実感を有する、論理的に同一の代替物間のものを選択する。
【0054】
コンポーネントは、ランタイムでの以下の形態の質問に慎重に答えるように設計される。
【0055】
「特定のハードウェア構成および利用可能なリソースに関する拘束条件が与えられた場合、特定の機能を挿入するために何がフレームワークに加えられるべきか」
この質問が困難であるのは、局所的および広域的な情報の両方に依存するからである。
【0056】
局所的には、ある機能のいくつかの利用可能なインプリメンテーションの一つは、ハードウェアまたは他のリソースの利用可能性等の拘束条件に基づいて選択され得る。図7を参照のこと。広域的には、あるインプリメンテーションが、重大なリソースの過剰な使用を避けるため、または、画質または描写速度(rendering rate)等のアプリケーション選好に基づいて最適化するために、別のものより好まれ得る。
【0057】
各代替のインプリメンテーションは、システムメモリ、テキスチャメモリ、CPU要求条件、そしてデータ転送帯域幅等のリソースのリストを有し、これらは、リソースのネゴシエーションが必要な場合には、これらの条件を縮小させ、そして、リソースが十分余っている場合には、この条件を拡張可能にするために使用される特定のインプリメンテーションと情報のインスタンスを首尾よく作るために必要とされる。
【0058】
コンポーネントは、さらに、新しいリソースをシステムに導入し得る。図19を参照のこと。各代替のインプリメンテーションは、該当する代替物によって提供されたリソースのリストを含む。新しいリソースは、さらに、リソースネゴシエーション情報を有し、新しいリソース上で次のネゴシエーションにおける供給側の取引をサポートする。
【0059】
アプリケーション内のコンポーネントが識別された後、それぞれは、そのリソース要求について質問される。その答えは、代替のインプリメンテーションおよびそれらの要求されたリソースのリストにある。これらの要求の集計は、ランタイム多次元リソース割当タスクを特定する。
【0060】
単一の解決法がある場合、選択された代替物は、各コンポーネントに通信され、次いで、各コンポーネントは、対応するインプリメンテーションのインスタンスを作り、このインプリメンテーションは、このインプリメンテーションのブロックの入出力のリンクとなるこのコンポーネントの入出力のリンクを有する。
【0061】
代替のインプリメンテーションの一以上の組み合わせがリソース拘束条件に適合する場合、選択された構成は、コンポーネント定義に含まれる重み付けパラメータおよびアプリケーション開発者によって提供された評価等式に基づいている。この好適な解決法は、次いで、選択された代替物のインスタンスを作り、それらをフレームワークに連結するコンポーネントに通信される。
【0062】
リソースが過度に申し込まれた場合、従って、直接的な解決法はなく、そしてシステムはネゴシエーションフェーズに入る。このネゴシエーションフェーズでは、各ブロックは、そのリソース要求のうちのどれが縮小され得るかということおよびそのようなトレードオフを形成したことに対するペナルティは何かということを質問される。典型的な例は、ぼやけた画像のペナルティに対して4分の1に縮小され得るテクスチャメモリリソースおよび余分なCPU利用およびデータ転送帯域幅消費を費やして完全な事前ローディングするよりも増分ページング機能によって最小化されたシステムメモリリソースである。このネゴシエーションは、受け入れ可能な構成が達成されるまで継続する。
【0063】
リソース割当プロセスは、コンポーネントのインプリメンテーションが、全ての必要なリソースが利用可能にならない限りインスタンスを作られないことと利用可能なリソースに応答していくつかの代替物のうちのどれが選択されるかについての適切な決定とを確実にする。
【0064】
(4.ブロック実行モデル)
図8に戻って、リソースネゴシエーションが完了された後、アプリケーションを含むブロックは、フレームワークのフェーズ間に、コンポーネント定義に明記されたように分配される。この結果、それぞれが0以上のブロックを含むフェーズリストが生じる。例えば、アプリケーションが標準データベース・ページングコンポーネントを含まない場合、データベース・ページングフェーズリストが空になる。それぞれの空でないフェーズリストは、潜在的に並行のアプリケーションのフェーズを定義する。
【0065】
空でないフェーズは、実行のステージにマッピングされる。ステージは、図9に示すように、ARKが単一のスレッドにおいて実行するフェーズの集合である。結果として生じる実行のステージは、決定論的実行オーダーリストを生成することによって、実行のために準備される。この決定論的実行オーダーリストは、フェーズのブロックリスト内のブロックの全体の順序の中の接続によって強要された対様式のブロック順序(ordering)を配列する。フェーズからステージへの処理の結果で生じる実行オーダーリストは、ARKへの入力であり、そしてこのようなリストの評価は、主たるARK処理機能である。連続の実行環境において、単一のARKスレッドは、各パス間ブロックの一部または全てを選択しかつ実行する実行オーダーリストを超えて連続して繰り返す。ARKは、図10に示すように、ブロックが異なるかまたは比較的主要な速度で走行する場合をサポートする。この図は、単一のARKスレッドマネジャーおよびその実行オーダーリストを表す。
【0066】
ARK内の並行サポートは、単一のプロセッサ上の複数のスレッド(マルチ−スレッディングまたはマルチ−プログラミングと称する)、複数のプロセッサのそれぞれの上の単一のスレッド(マルチ−プロセッシング)、およびこれらのモードの任意の組み合わせを統御する。並行実行において、T1〜Tnの複数のARKスレッドがあり、それぞれは、図11に示すように、それ自体のブロック実行オーダーリスト(EOL)を有する。
【0067】
平坦化されたアプリケーショングラフを複数のリストに変換することは、概して、ブロックのいくつかの間の接続がARKスレッド境界(異なるリストにおける上流および下流ブロックを有する)を広げることを引き起こす。これは、共有データに対する重大な影響、および大きな利点をアプリケーション開発者にもたらすようにARKによって不可視で処理されるケースを有する。
【0068】
(F.GAPの拡張)
標準およびユーザ開発の両方のGAP機能は、コンポーネントとして設計されかつインプリメントされ、そしてそれ自体でそれらは、並外れた程度の柔軟性およ潜在的な効果を享受する。それらは、既存のコンポーネントを置き換え得、コンポーネント内の個々のブロックを置き換え得、既存の接続を変更し得、それ自体を既存のブロック間に挿入し得、およびそれらの代替のインプリメンテーションのそれぞれを有した所望の並行処理領域を定義し得る。これらのタスクのそれぞれは、シーングラフの匿名の「ツリー・デコレーション」モデルに対立するものとして、処理、効果、およびリソース影響をラベリングすることによって隠さずに行われる。GAP拡張モデルにおける完全性は、任意のコンポーネントが殆どの任意のGAPベースのアプリケーションにも加えられ得ることを保証する。コンポーネントは、それらの必要性のネゴシエーションを行い、ARK最新統合プロセス(late−integration)は、アプリケーションにおいて定義された選好を履行しながら、新しく挿入されたコンポーネントの要求に基づいてアプリケーションを広域的に調整する。
【0069】
GAPの「普遍的なテクスチャ」機能を実行プロセスの例として考える。その所望は、単一の10,900テラバイト−テクスチャマップとしての地球表面のセンチメートル解像度の表示等の莫大な範囲のテクスチャ画像を有するアプリケーションを提供することである。この技術は、異なるハードウェアプラットフォーム上の同一のデータベースを用いる能力を提供するために、幾何学的細区分からのテクスチャページングの分離を含め、多くの実際的な利点を有する。これは、Cosman(1990)が最初に、Evans&Sutherland ESIG−4000画像生成装置は何であるかについての文脈において記載している。これは、グローバルテクスチャ(global texture)として既知である。
【0070】
普遍的なテクスチャコンポーネントは、そのタスクを3ステップのプロセスでインプリメントする。すなわち、データをディスクからまたはネットワークを介してメインメモリに移動させるステップ、データをメインメモリからグラフィックスデバイステクスチャメモリに移動させるステップ、および画像情報およびフレーム毎を基礎とするダウンロードテクスチャを用いて普遍的テクスチャ概念をインプリメントするステップである。GAPインプリメンテーションは、これらのステップをいくつかの潜在的に並行処理するフェーズに分離し、それぞれは、ARK接続を用いて相互接続されたいくつかのブロックを有し、全ては、リソース要求および選好に基づいて特徴付けられる。このインプリメンテーションは、ディスク転送のために効率がより高いダイレクトI/Oを用い、国際日付変更線および極でのキャッシュ更新複雑性を統御するテクスチャキャッシュとしてメインメモリを用い、普遍的テクスチャ意味論をインプリメントするために必要とされるようにテクスチャ処理詳細を再定義する。このコンポーネントがGAPベースのアプリケーションに挿入される場合、それは、普遍的テクスチャ機能を、更新または他のモジュールの再コンパイルを要求することなく正しく提供し、グラフィックスハードウェアの範囲にわたってそのようなことを行う。
【0071】
普遍的テクスチャをインプリメントするのに有用な特別の機能(例えば、E&S広域テクスチャユニット、SGIクリップマップハードウェア、SGIUMAビジュアルワークステーション、S3テクスチャ圧縮モード等)を提供するハードウェアベンダは、標準GAPインプリメンテーションをハードウェアの異なる機能にアクセスするものと置き換え得る。このようなベンダの局在性は、グラフィックス以上のものを定義する。それらは、さらに、ネゴシエーションの間に解決されたように、テクスチャロード待ち時間および他のコンポーネントとの相互作用のような問題に基づいてそれらのインプリメンテーションを適合させるために、並行モデルおよびアプリケーション構造を明記する。
【0072】
図12に示される地球眺望画像等の普遍的テクスチャ機能を用いるアプリケーションは、それらが実行された場合にベンダ特有のチューニングを受け継ぎ、そして以前にリリースされたGAPベースのアプリケーションソフトウェアでさえ新しいハードウェアの利点にアクセスするために変更または再リリースを要求しないので、ハードウェア開発者が、それらの新しい機能の選定速度をいかに大きく増大し得るかを示す。
【0073】
(G.GAPによる世界)
GAPアーキテクチャは、新しいインプリメンテーション技術を実時間画像化市場にもたらしている。これは、垂直なアプリケーションレベルの機能をそれらのインプリメンテーション環境から分離する。この分離は、従前からもつれ合った、アプリケーション開発者、コンテンツ開発者、およびハードウェア開発者のタスクを以下のようにもつれを解くことによって、グラフィックスおよびマルチメディアアプリケーションのモジュール性を拡張する。
【0074】
アプリケーションおよびコンテンツの分断。GAPは、コンテンツから大きく独立してアプリケーションを形成する。これは、モデル構築者によってコンテンツとともにパッケージングされた挙動モジュールが、移植可能な挙動定義を提供し得るからである。モデリングツールとGAPとの間の意味論上のブリッジは、モデリングツール内の活性な(active)コンテンツによって表示された特性が、このコンテンツがGAPベースの実時間ソフトウェアに用いられた場合に示されたものと一致することを確実にする。
【0075】
コンテンツおよびハードウェアの分断。GAP環境は、コンテンツレベルの設計をハードウェアレベルのこれらの決定の表現から分離する。その構造により、コンテンツ開発者によってではなくハードウェアベンダによって、標準GAPコンポーネントのポーティング(porting)およびチューニング(turning)を通じて、各ハードウェアプラットフォームに合せられる意図の標準定義に基づくコンテンツの開発が可能になる。
【0076】
ハードウェアおよびアプリケーションの分断。GAPは、アプリケーション開発者の独特のハードウェア特徴への依存性を取り除き、特定のハードウェアおよびオペレーティングシステムの組み合わせよりも、「仮想の」画像化プラットフォームのためのアプリケーション開発が可能になる。逆に、GAPは、ハードウェアベンダがハードウェアの独特の特徴を既存のアプリケーションに統合することを可能にし、アプリケーションを特別のハードウェア機能に引き付けることについてのベンダの関心を和らげる。
【0077】
(II.GAPおよびARK)
(A.プラットフォームおよびフレームワーク)
開発者は、かれらがソフトウェアをポートする場合に、一般的に、「私は、私のアプリケーションをWindows(R)プラットフォームに移動させた」または、「Power PCプラットフォーム上で利用可能である」と言うことによって、プラットフォームのことを評するが、定義があまりにルーズであり、我々の目的に供することができない。用語「プラットフォーム」が本明細書で用いられる場合、それは、いくつかの種類のプログラムを実行するために自己に包含された環境を意味する。最も共通するプラットフォームは、システム関連および言語関連のランタイムライブラリと一緒のオペレーティングシステムである。EMACSのようなアプリケーションは、ユーザ拡張可能な方法で内部リスプインタープリターによって一緒に結ばれた低レベルのテキストマネジメント機能を提供し、アプリケーションレベルのプラットフォームの進化論的な先祖である。本明細書に記載されたプラットフォームの種類は、EMACSのようなアプリケーションおよび伝統的なオペレーションシステムプラットフォームとは異なる。差異および差異の原因を明らかにするため、3Dグラフィックスの話題をわきに置き、空間音声を少しの間わきに置き、そして概念が自明であるウェブブラウザ空間におけるプラットフォームおよびフレームワークについて考える。
【0078】
Java(R)soft Java(R)環境において、Java(R)仮想マシン(JVM)は、Java(R)バイトコードを実行するためのプラットフォームである。JVMをバイトコードの形態の標準Java(R)クラスで組み合わせると、Java(R)アプリケーションのためのプラットフォームが生成される。類似の意味において、ネットスケープおよびマイクロソフトのインターネットエクスプローラーは、双方、HTMLを実行するためのプラットフォームを含む。スクリプトリングかつプログラミングの拡張でパッケージングされた場合、これらのブラウザは、ブラウザアプリケーションのコンテキスト内のウェブページを実行するためのプラットフォームを表す。オペレーションシステムコンテキストにおいて、プログラムおよびシェルスクリプトは、HTMLページを置き換え、そしてオペレーティングシステムはプラットフォームである。
【0079】
ブラウザはまた、アプリケーションであるが、アプリケーションおよびプラットフォームの間の区別は微妙であり、しばしば、見落とされる。ネットスケープのアプリケーションは、ネットワークされたペーパレスの通信(HTMLブラウジングおよびエディティング、電子メール、ニュースリーディング、その他など)、グラフィカルユーザインターフェース、および好みのウェブサイトへのリンクのようなナビゲーション支援に関連する機能を提供する。ネットスケープのプラットフォームの局面は、「プログラム」をロードする機構(HTML、Java(R)、CGIスクリプト等のフェッチ)、これらのプログラムの意義のための標準化された意味(semantics)、およびHTML、Java(R)、そしてスクリプト言語で書かれたプログラムを評価するランタイムの「エンジン」から成る。歴史的に、ネットスケープのブラウザ製品は、これらの二つの役割を別々の局面として顕示しなかった。人は、ウェブページ、java(R)アプレット、ブラウザのGUIまたは他の「内側に構築された(built in)」機能を再定義または拡張するCGIスクリプトをつくることができず、また、ユーザは、ナビゲータブラウザインターフェースを異なるHTMLプラットフォームに移動させることもできない。しかし、ネットスケープがその能力があるように設計されたらどうなるだろうか。
【0080】
1.それらは、HTML、Java(R)、およびスクリプト言語をフェッチし、実行することができる「ブラウザバーチャルマシン」を構築するだろう。これは、プラットフォームとなるだろう。全員がそれを走行させるだろうが、それについて知っているものは小数であるだろう。なぜなら、・・・。
【0081】
2.それらは、機能においてネットスケープナビゲーターと同一であるが、BVMによって実行可能なコードのモジュールでインプリメントされる「ブラウザアプリケーション」を構築するだろう。これは、エンドユーザが見て、見て感じる(look−and−feel)のすべてがそこにあるアプリケーションであるだろう。例外として・・・。
【0082】
3.それらは、「拡張および置換」能力をBVMに構築するだろう。このため、開発者は、標準ブラウザアプリケーションのあらゆる局面を造り直すことができる。例えば、「GUIモジュール」をそれら自体の一つと置き換えること、または、「HTMLモジュール」を新しい機能とともに拡張することができる。
【0083】
ネットスケープおよびマイクロソフトの双方は、このアプローチの重要性を認識する。それぞれは、HTML、Java(R) Script、およびJava(R)を統合する他のアプリケーションを開発するための基礎として機能し得るウェブブラウジングへのプラットフォームおよびフレームワークのアプローチに対するサポートを公表している。マイクロソフトは、現在、ユーザインターフェースを置き換えさせ、標準機能を再定義するプラグ内蔵(plug−in)のモジュールを受け入れ、他のアプリケーション内のHTMLレンダリングをサポートするプラグ内蔵モジュールとして機能し得るブラウザを提供する。この競合したプラットフォームの設計および構造は、全く異なっている。
【0084】
・・ネットスケープのアプローチは、アプリケーションから独立したオペレーティングシステム内の完全なブラウザプラットフォームであることである。それらは、CORBAコンポーネントプログラミングモデルを使用し、それらのCORBAインプリメンテーションはJava(R)で書かれている。
【0085】
・・マイクロソフトのインターネットエクスプローラーおよびインターネットエクスプローラーアプリケーションキットは、オペレーティングシステムをブラウザを行うためのプラットフォームとして定義するための戦い(fight)におけるキー機能のためのWindows(R)オペレーティングシステムサービスに依存する。IEAKは、COMコンポーネントプログラミングモデルおよびCOMベースのActiveXコンポーネントを用いる。
【0086】
・・SunのJava(R)は、第三の観点を取り、それらのプログラミング言語を普遍的なプラットフォームとして配置する。それらは、言語のランタイム環境におけるオペレーティングシステム機能性を含み、それらのインタープリタ内の本来利用可能な要素としてブラウジング(AWT、Java(R)2D、Java(R)3D等)に必要なあらゆる機能の管理を委任する。
【0087】
モジュールを拡張するおよびモジュールに取って代わる能力を提供することは、アプリケーションが通例のものよりより高度の柔軟性および一般性を有するように構築されることを要求する。「アプリケーションフレームワーク」は、まさにこの種類の変わり易いアプリケーションであるように定義される。アプリケーションフレームワークは、(おそらく潜在的な能力を有するにもかかわらず)完全なアプリケーションであるがことが明白に意図されることに留意のこと。この完全なアプリケーションは、アプリケーションが構築され得る構成セットよりもむしろ、すでに一般的な事項を標準的な方法で行っている。二つのアプローチ間の相違は、二つのクリスマスツリーキットを対比することによって、明らかになされ得る。
【0088】
1.構成セット:頑丈なツリー、光の箱、装飾の大きな箱、およびフックがない。「Go for it」という取扱説明書が付属し、そして美しいツリーの写真(demos;−)である。
【0089】
2.フレームワーク:光、フック、および事前に取り付けられた少しの装飾を有する同じツリー。フックにより、何でも付加的な装飾を取り付けることができる。(光および装飾を取り除くこともできる。)
ある意味、これは、程度の問題にすぎないが、重要な概念である。
【0090】
フレームワークは、独立した開発チームが、全く同一の方法で共通の概念について「話す」(その概念を信頼してモジュールを書き込む)ことができる構造を提供する。それは、さらに、プログラミングの複雑さが、標準のアプリケーションと新しいアプリケーションとの間の相違を制限されるために開発が容易になることを意味する。標準アプリケーションが共通機能の大部分を提供する場合、したがって、この相違は小さい。構成セットのアプローチは、常時、結果としてのアプリケーションの複雑さに比例するプログラミング労力を要求する。これらの効力は、フレームワークの相乗効果を定義する。フレームワークは、新しい開発を増分したのものに変化させ、他のものと共用され且つ他のものにライセンス提供し得るモジュールを助成する。
【0091】
これらの概念が、ブラウザから実時間グラフィックの世界に翻訳された場合、それは、良好な調和であるが、ブラウザの類似性の部分ではない、いくつかの要求の多い問題が、対処されなければならない。これらの問題は、時間、同期、並行処理、および性能管理を含む。プラットフォーム(platform)およびフレームワーク(framework)の観念は、本明細書において記載された本発明の基本であり、そして、移植性があり、高性能の、メディアリッチなアプリケーション(ハードウェアによって提供された相違の全ビットを使用する)を可能にする。
【0092】
本明細書において記載されたプラットフォームおよびフレームワークの概念のインプリメンテーションにより、結果として他のプラットフォームからの二つの主要な相違が生じる。
【0093】
−−まず、互換性以前に性能のために設計することによって、CORBA(R)およびCOM(R)コンポーネントインターフェースによって直面する複雑さの多くは回避される。特に、これらのそれぞれは、他のものの支配を探求するので、それらは、互いのコンポーネントを外部機能インターフェースを通じてサポートすることを試みる。:Internet Explorer(R)のようなCOM(R)ベースのアプリケーションは、CORBA(R)コンポーネントを含み得、Netscape(R)のようなCORBA(R)ベースのアプリケーションは、COM(R)コンポーネントを含み得る。このような互換性は、性能および複雑さの点で有意な支出に達する。ここでは、外部の互換性は、必要とされない。インターフェースモデルは、アプリケーション目的および根底をなすインプリメンテーションに最も良く適合するように構造化され得る。
【0094】
−−第二に、マルチスレッディングは、我々のプラットフォームの固有の機能としてサポートされる。コンポーネントインターフェースは、不可視の並列処理を効率的にインプリメントする場合にパートナーであるように(アプリケーションレベルの実時間カーネルと共に)設計される。これは、順番に並んだロックが各エントリポイントを完了しない限りそれ自体スレッドセーフ(thread−safe)でなく、かつ、コンポーネント構築者に対する並列処理の問題がそのままになっているCOM(R)およびCORBA(R)と対照的である。
【0095】
これらの相違は、GAPを他のミドルウェア(middleware)のフレームワークから区別する。
【0096】
(B.アプリケーションプラットフォームとしてのGAP)
図13Aを参照して、GAPは、グラフィカルアプリケーション開発のためのプラットフォームをインプリメントする。目的のアプリケーションの関連のある割合は、アプリケーション開発者によってGAPに加えられ得る新しい能力と組み合わせて、ブロックと呼ばれる拡張モジュールの形態でGAPによってサポートされる機能(facilities)内に表現可能である。GAPの「プラットフォームフード(platformhood)」は、この構造から生じる。
【0097】
カーネル。アプリケーション実時間カーネル(ARK)、アプリケーションレベルの実時間スレッドマネジャー。ARKは、各利用可能なCPU上で実行する一以上のARKスレッドのそれぞれによって実行されるブロックを列挙するスケジュールによってブロックを呼び出す。システム構造基盤エレメントの非常に小さいセットは、ARKに付随する(およびある場合には、ARKに構築される)。これらのエレメントは、コンポーネントを動的にロードおよびアンロードし、ブロック実行をモニタし、スレッド管理のようなタスクにおいて、メモリ共用、相互排除、および同期化を支援する。
【0098】
ARKは、効率的に構成可能な実時間の性能を中心とするグラフィックバーチャルマシンの定義および実行フレームワークを最も良好に考えられ得るモジュラー的なフレームワークを提供する。ARKは、データの流れを管理し、グラフィックスプロセスの処理のすべてをスケジューリングするように設計される。それは構造および意図を理解し、ついで、その意図を実時間で効率的かつ頑丈に管理することによりアプリケーションを少しづつ要約する洗練された接着剤である。可能な限り薄くかつ軽くなるように設計されるが、ARKは、最初から効率的なランタイムインプリメンテーションに対応するように設計された頑丈なアプリケーション定義のセマンティクス(semantic)からパワーを得る。ARKは、アプリケーション定義(データの流れおよび処理スケジューリングを含む)を明示的かつモジュール的にする。それは、より遅い機能インターフェース(すなわち、処理とデータの流れを分離する)よりも、高度に効率的なデータインターフェースを有するモジュール的なコードセグメント間のインターフェースを抽象化する。それは、開発者に、マシンのコンポーネントの垂直的な(vertical)機能開発を可能にする全体のアプリケーション機構への明示的な定義および関連の各コードモジュールを強要する。これらのコンポーネントは、素早くかつ現在のプログラミング方法論(c/c++等)とは別個に開発される。すなわち、ARKは、標準プログラミングの方法論の開発者の使用上への直接的な影響を殆どまたは全く有さない。したがって、ARKは、事実上、全体のアプリケーションに対する新しい機能レベルの駆動モデルを定義する。この新しいアプリケーション駆動モデルは、(忠実に再構成可能なマルチスレッドされたアプリケーションのために必要な)自動的に再構成可能なマルチ−スレッド・マルチ−プロセス・マルチ−バッファの、単一スレッドコードモジュールのデータ管理を固有に提供する。ARKは、システムモジュール間に流れる全てのデータを管理するが、データ構造に寛容であり、複数の開発者にまたがってさえもユーザ定義のデータ構造のランタイム拡張を許可および管理する。要約すると、ARKは、アプリケーションを、そのコードモジュール、データ構造、およびデータの流れから定義する能力を提供する。すなわち、それは、定義時間のセマンティクスを(データの流れおよびモジュールスケジューリングの制御を介して)実施する効率的なランタイムカーネルとして動作するために必要なすべてを提供する。
【0099】
ブロック。ARKについてのすべては、新規かつ力強いネゴシエーションベースのインターフェース定義をサポートする置き換え可能なコンポーネントにグループ化されるブロックを用いてインプリメントされる。用語「モジュール」は、三つのタイプのブロックへの一般的な参照である。その三つのタイプのブロックは、演算を行うシンプルブロック、内部的にインスタンス化されたブロックを接続するコンパウンド(compound)ブロック、およびシンプルおよびコンパウンドブロックの接続されたネットワークであるスーパーブロックである。コンポーネントは、特殊なメタブロックである。それらは、スーパーブロックの集合をリソースネゴシエーションの完成時に配達する「ブロックファクトリー」である。システムに関連するブロックに加えて、多数の標準的な機能レベルのコンポーネントが、GAPに提供される。これらのエレメントは、共通して用いられる機能(ウィンドウを開く、4元数(quaternion)を補間する、位置を通報する、システムに特有のチューニングに従順な機能(オブジェクトをモーフィングする、バンプマップされた表面のシェーディング、ダイレクトI/O転送)、およびGAPベースのアプリケーション(ユニバーサルテクスチャ、テラ引(terrain)、オブジェクト、およびカルチャ(culture))を区別すると信じる機能をインプリメントする。ブロック自体は、参照コードに移植可能にインプリメントされ、そしてハードウェア製造者の装置で特定のハードウェアのために特別にチューニングされる。この構造およびチューニングスキームは、GAPの主要な「区別されるが、移植可能である」メカニズムである。
【0100】
接続。ブロックは、上流ブロックから下流ブロックへのデータの流れを表わす一方向の接続によってリンクされる。接続は、設計の重大なエレメントである。それは、新しいブロックを挿入するかまたは古いブロックを置き換える場合に必須のタスクである通信パターンを変更するために「プラグボード(plug board)」を提供するからである。例えば、潜在的に可視のオブジェクトを抽出するためのグラフを横断させるコンポーネントと、オブジェクトを受け取り、次いで、それを描くコンポーネントとの間の接続を考慮する。本発明では、新しいコンポーネント、例えば、これら二つの間で、所与のサイズより小さい画面上の投影を有するものを拒絶するものを挿入することが望み得る。そのようなことを行うことは、横断および描画間の接続を削除すること、および横断と拒絶との間、および拒絶と描画との間の接続を追加することを意味する。これは、ARKの特殊なランタイム接続機能を通じて何らのブロックを再コンパイルすることなく、サポートされる。
【0101】
元からコンパイルされ、そして最適化されたコード(アセンブラー、C、C++等)は、ブロック開発のための第一のインプリメンテーションモードとしてサポートされ得る。本来のコードアプローチは、純粋な翻訳に比較して移植性を制限するが、スピードに対するニーズがある。ブロックは、コンパイラーの互換性の程度において移植性があり、ブロックの開発者は、異なるプラットフォーム上において、条件付きのコンパイルまたはその代わりのインプリメンテーションを必要とし得る。
【0102】
元からコンパイルされたモジュールおよび言語に依存しないインターフェース定義のGAPサポートは、開発者がARKのためのアプリケーションを構築した場合にすでに開発済みの技能およびコードを使用し得ることを意味する。
【0103】
いくつかのブロックは、他のブロックを一緒に処理しているグラフ(graph)に組み入れることによって純粋に表現され得る。これらのタイプのブロックは、処理を行う「シンプルブロック(simple blocks)」に対立するものとして「コンパウンドブロック(compound blocks)」呼ばれる。接続専用のブロックを開発することは、ブロックへのおよびブロックからのリンクおよびブロック入力からのおよび出力への連結および内部でインスタンス作成されたブロック間の連結を定義することを意味する。これは、スクリプト言語または特別の軽い接続構文分析を通じてなされ得る。このような網目状のブロックは、ランタイムブロックコードを必要とせず、各「リンクからリンクへ(link−to−a−link)」を単一のリンクに自動的に崩壊させる(collapsing)ことによって、または、等価的にコンパウンドブロックを使用前に拡張されるマクロと考えることによって処理され得る。
【0104】
処理している負荷(duties)が軽いまたはまれな場合にスクリト言語を用いてブロックをインプリメントすることが望ましくあり得る。翻訳されるスクリプトは、コンパイラの変形物に無関係にGAPインプリメンテーションにわたって保証された移植性を提供する。この計画は、柔軟性のあるスクリト機構(主として、マーク・アンド・スイープ廃物収集のように非決定論的処理を扱い、および、引数をインタプリータにおよびインタプリータから整列させる)を作成することであり、その結果、種々の言語が、同一の構造基盤によってサポートされ得る。
【0105】
(C.アプリケーションフレームワークとしてのGAP)
GAPは、グラフィカルアプリケーション開発のためのフレームワークも提供する。これは、開発者が直接使用し得るまたはそのほかに、望むように変更および拡張し得るグラフィックスアプリケーションである。このアプリケーションは、エンドユーザに配信され得る、著しく能力のある双方向グラフィックスビューアー(viewer)を提供する。アプリケーション開発者は、GAPベースの製品を出荷する前にカスタムブロックを追加すること、および標準のもののいくつかと置き換えることによってアプリケーションに新形態をとらせ得る。標準のアプリケーションを提供することによって、共通のネーミングおよび構造フレームワークが、派生されたアプリケーションのために確立される。混合および調和の柔軟性が、具体的なコンテキストにおいて組み込まれる。
【0106】
概念的に、フレームワークアプリケーションは、以下の方法で設計される。第一に、GAPが処理するアプリケーションの分類が考えられる。これは、グラフックスに富むゲームおよび双方向エンターテイメント、従来のビジュアルシミュレーション、ビデオおよびフィルム製品および無線放送における実時間アプリケーション、および特命リハーサルに用いられる高度な地形空間(geo−spatial)情報システム;1〜8の範囲のCPUおよび1〜6のグラフィックスパイプラインのハードウェア構成;およびWindows(R)98、Windows(R) NT、およびUnix(R)ライクの(IRIX、Solaris、およびLinux)オペレーティングシステムを含む。次に、これらのアプリケーションは、それらが必要とする共用体を処理し得る一般的な構造を見出すように試験される。得られる構造は、統一アプリケーションフレームワークを定義する。この統一アプリケーションフレームワークは、次いで潜在的な並行処理実行フェーズにセグメント化される必要がある。次いで、フレームワーク内のキー機能は、標準コンポーネントとして表現される。それらを含むブロックと同調するコンポーネント定義は、標準のブロックを定義する。
【0107】
ハードウェアの高度化においてアプリケーションドメインおよびレベルにわたる共通の基盤を見出すために努力を発揮することは、Gが、より低いコスト、より高い容量のプラットフィームに移動する(migrate)ような高度な機能のために自然なホームを提供することを意味する。
【0108】
設計は、複数のCPUおよび複数のグラフックスデバイスへの拡張をサポートするが、これは、より小さい構成に対するオーバーヘッドを意味しない。高度な構成においてより完全に常駐させる構造が提供され得る。いくつかの重要な特徴が、GAP一般に対する設計を暗示し得るフレームワークアプリケーションの設計の間に現れる。ここに要約がある。
【0109】
−−本発明の実施形態において、この設計は、アプリケーションの種々の部分におけるデータフローの間のバッファとして、大抵は、データがレンダリング期間にわたって再利用される洗練されたキャッシュの形態の、洗練された高レベルのデータ構造を採用する。ブロック形態において、これらの構造は、小さい制御インターフェースおよび暗黙の内部プロセッシングを有する。例は、オブジェクトグラフ、アーティキュレーショングラフ(articulation graph)、アトラス(atlas)および索引マップ、オブジェクト、イメージ、およびオーディオキャッシュ、および、コマンドおよびクラシフィケーション(classification)およびビンズス(bins)を含む。
【0110】
−−初期のプロセッシングコンポーネントは、概して、それら自体の両方と後部側との間で非同期である。終末ステージは、より簡単であり、イメージ演算レートで同期して実行する。
【0111】
−−大抵の接続は、フェーズに対してローカルである。二つの主要な例外がある。より低いレベルのGAP標準ブロックのいくつかへの連結は、どこにでも発生するが、並列処理に対して容易であるように見える。少数の連結は、ブロックグラフの前端近くから後端近くに移動し、短絡的な非同期の実行を行い、そして終端の間にパイプラインを形成する。
【0112】
フレームワークとして、このアプリケーションは、広い分類のグラフィカルアプリケーションのために共通のすべてを包含する構造を提供する。すなわち、取り除かれ、置き換えられ、および拡張され得るブロックから構築された構造であり、切断および再接続され、露出および隠され得るブロック間の接続を有する。これにより、開発者は、システムの残りを無処理かつ他のものによって拡張可能なままにしながら、アプリケーションをインプリメントするのに必要なだけのGAPフレームワークに新形態をとらせることができる。また、それは、開発者が、変化させる必要があるだけのGAPを理解および接触することのみが必要であることを意味する。
【0113】
これは、図13Aおよび13Bに示されている。図13Aは、ARKによって提供された機能を用いるグラフィックスソフトウェアを示し、複数のハードウェアプラットフォームのいずれかの上での実行を促進する。対照的に、図13Bは、アプリケーションに特有である機能を用いるグラフィックスソフトウェアを示し、複数のハードウェアプラットフォームのいずれかの上での実行を促進する。
【0114】
この柔軟性は、図14Aおよび14Bに示されるように、ハードウェア開発者にさらに利用可能であることに留意のこと。図14Aでは、ハードウェアプラットフォームの開発者は、ARKによって提供された機能を用い、これにより、異なるソフトウェアプログラムがプラットフォーム上で実行することができる。図14Bは、これに対して、ハードウェア開発者が代わりに、デバイス特有の機能を用いる場合を示し、これにより、異なるソフトウェアプログラムがプラットフォーム上で実行することができる。
【0115】
図15は、類似の機能を行う異なる機能の利用可能性を示す。ここで、この機能は、シェーディング機能である。一般的なシェーダーが利用可能である。さらに、異なるシェーダーもまた、異なるグラフィックスソフトウェアによって開発されそして採用され得る。同様に、さらに他のシェーダーが異なるハードウェアデバイスのために採用され得る。
【0116】
図16Aおよび16Bは、本発明の実施形態における、ARK、アプリケーション、および二つのハードウェアプラットフォーム、プレイステーション2(Playstation2)およびパーソナルコンピュータそれぞれの間の論理的な関係を示す。それぞれは、機能、すなわち、拡張が、ソフトウェア開発者(ハードウェアの属性を導入するために)か、またはハードウェア開発者(ソフトウェアの属性を導入するために)のいずれかによってどのように生成され得るを示す。また、これらの図は、C++等のツールがソフトウェアの開発を促進するためにどのように用いられ得るかを示す。図16C〜16Eおよび18は、種々のソフトウェアプラットフォームとGAPとの間の論理的な関係をさらに示す。
【0117】
図17は、実行中のデータフローの観点からこれらの関係を示す。アプリケーションは、出力オブジェクトおよびシーングラフ(scene graph)を生産するように示される。示された実施形態では、ハードウェアは、最終的には、GAPマイクロコードを介してアクセスされる。
【0118】
(D.GAPの理解)
フレームワークアプリケーション、コンポーネント、フェーズ、ブロック、接続、および実行セマンティックスを記載する前に、フレームワークおよびアプリケーション開発者の観点からのGAPの主要なエレメントが考慮される。
【0119】
(1.ブロック)
ブロックは、GAPフレームワークの基本的なエレメントであり、本発明による双方向ビジュアル演算の「アトム」を定義する。用語「モジュール」は、三分類のブロックのいずれも意味する一般的な用語である。この三分類のブロックは、ブロック、スーパーブロック、およびコンポーネントである。ブロックは以下によって構築される。
【0120】
−−標準テンプレートを編集することまたはコーディングによって、コード発生ツールを用いてGAPブロックインターフェース定義を生成する。この定義は、各入力および出力接続ポイントおよび全機能のタイプおよび名前を特定する。これは、ブロックが他のブロックに対して提示するインターフェースを集約的に特徴付ける。
【0121】
−−コンパイルされる手続またはインタプリータ入力スクリプトを要求されたブロックの実行可能なエレメントに結合する。これらの手続は、コンストラクター機能、初期化機能、デストラクター機能、およびブロックの暗示的演算としての単一の手続を含む。ブロック初期化機能は、特別のARKデータ割当機能を用いて内部データを割り当てる。本発明の実施形態において、文字の値および固有のオブジェクトから派生された動的に割り当てられたデータタイプのみが、接続を介してアクセスされ得る。
【0122】
−−一旦構築されると、ブロックは、その入力および出力ポイントと、他のブロック上のコンパチブルなポイントとの間に接続を構成することによって、アプリケーションまたはより高レベルのブロックにリンクされる。
【0123】
実行可能なブロックコンテンツは、他のブロックによるデータ出力に実際に関連する、特別な変数または関数に関連して分散されたCまたはC++コードであり得る。時折、ブロックは、プロセッシンググラフに接続されたいくつかの他のブロックを含む。これらは、「コンパウンドブロック」と称され、それらの定義における内部のネスティングは、任意の有限の深さに支持される。今後、実行可能なブロックコンテンツは、さらに、どのようなスクリプト言語または言語がサポートされたとしても、スクリプトであり得る。
【0124】
ブロックは、GAP内の原子的(atomic)な実行ユニットであり、入力および出力連結が生成される(attach)レベルである。接続の詳細は、後に提示されるが、本発明の実施形態では、ブロックは、その入力を提供するブロックのアイデンティティまたはその出力に接続するブロックのアイデンティティを知らないことを理解することは重要である。ブロックインターフェース定義に特定化されるデータにより、ARKは、不可視かつ効率的に、コンパイルされたブロックのためのこのランタイムダイナミック接続機能をインプリメントすることができる。
【0125】
何がブロックを定義するか。ある例では、図6に模式的に示されるように、ブロックは、以下のエレメントを含む。
【0126】
1.以前に言及されたように、各ブロックは、一組の0以上の入力接続ポイントを有する。各入力ポイントは、名前およびタイプを有する。名前は、ブロックに接続をつくる場合に用いられ、そして、入力を介して利用可能なデータは、この名前によって内部的に参照される。タイプは、CまたはC++構造によって表わされる混合されたデータ構造であり得る。この場合、ブロック内のアクセスは、これに対するシンタックス(syntax)は現在決定されていないが、この集合「名前」に加えて「名前のメンバー」へのものであり得る。
【0127】
2.ブロックは、一組の0以上の出力ポイントを有する。出力ポイントのそれぞれは、さらに、名前およびタイプを有する。これらの名前は、互いにおよびブロック内の入力名とは別個でなければならない。各出力ポイントは、固有のオブジェクトベースクラスから派生され、ランタイムに割り当てられるブロックの内部データメンバーまたは、このようなオブジェクトのメンバーのいずれかに対応する。これらの内部オブジェクトへのアクセスは、対応する出力ポイントに接続される他のブロックに提供される。
【0128】
3.ブロックは、出力ポイントを介して共有されない、一組の内部の固有のオブジェクト、および、固有のオブジェクトベースクラスから派生されない一組の他の内部オブジェクトを有し得る。固有のオブジェクトベースクラスから派生されないオブジェクトは、接続を通じて共有されない場合があり、ブロックベースクラスから派生されたオブジェクトだけが接続を有し得る。
【0129】
最後に、各ブロックは、1以上の関数を含み得る。construct()、destruct()、およびinitialize()の関数は、オブジェクトライフタイムサービスを提供し、evaluate()関数は、ブロックのプロセシングをインプリメントする。元のコンパイルされたブロックでは、ブロックが実行されるべき場合はいつでも、ARKは、サブルーチンコールを介してそれを呼び出し、インタープリットされたブロックでは、登録されたインタプレータが関数定義としての評価関数の本体と共に呼び出される。
【0130】
(2.標準ブロック)
図5に示されるように、GAPブロックの分類は、三つの広いファミリーを有する。すなわち、ARKおよびGAP基盤構造(infrastructure)をインプリメントするブロック、ハードウェアおよびパブリックデータ構造に対するグローバルなリソース管理(resource manager)を表わすブロック、および、アプリケーションレベルの機能(feature)を提供するブロックである。機能は、さらに、それらの開発者対象者の大きさ(breadth)に基づいて細分される。すなわち、多くのアプリケーションに有用である標準ブロック、特定の産業内の広い使用のためのマーケット指向(market−oriented)のブロック、および特定のアプリケーションの詳細をインプリメントするアプリケーション特有(application−specific)のブロックである。図5は、この細分化を図によって示す。ARK関連の基盤構造およびリソースマネジャーブロックは示されない。それらは、ARK自体のエレメントとして含まれる。
【0131】
ここでは、各ファミリーおよび対象の代表的なブロックを挙げる。
【0132】
1.基盤構造(infrastructure)。プロセス、制御スレッド、および物理的なプロセッサを管理する。ブロックインターフェースセマンティックスをインプリメントする。相互のアクセス排除、明示的なデータ共有、および暗示的なデータプライバシーを提供する。日時クロックおよび高精細の実時間タイムクロック、カウンター、およびタイマーをインプリメントする。メモリ転送および非同期のディスクアクセス等のデータ移動を行う。GAP実行の間のコンポーネントのローディングおよびアンローディングによる動的なバインディングをサポートする。効率的な低レベルのパラレリズムアウェアキュー、スタック、リスト、およびアレイデータ構造。シーングラフ、ワーキングセット、およびイメージキャッシュを含む高レベルのパブリックデータ構造。
【0133】
2.リソース管理(Resource Manager)。マルチプルプロセッサ、グラフィックスパイプライン、ディスプレイチャネル、テクスチャリソース、フレームバッファストレージ、およびメモリのような物理的なリソースのアクセスおよび割当。能力、容量、ステータス、および性能についてのリポートデータ。
【0134】
3.標準機能(Standard Feature)。キーボードおよびジョイスティック等のヒューマン入力デバイスに対する抽象化デバイス管理。属性のモーフィング、補間、変形、および評価。空間オーディオプロセッシング。活性ロギングおよびプレイバック。構成ファイル構文分析および評価。精度管理および連鎖を含む座標システムプロセッシング。音、ビジュアル、交差、およびアニメーションのカリング。オブジェクト、形状、テクスチャ、マテリアル、および音声の暗示的データベースのページング。
【0135】
4.マーケット指向の機能(基本的なビジュアルシミュレーションサブセット)。天文暦時間をサポートする宇宙モデル;地球基準の経時的測位;太陽、月、および星の位置および出現;および星領域および星座の視覚化。地形の高度;視界線の交差、多点地続き、衝突検出、およびオブジェクト内部視界決定。寄せ集めの層状の霧、水平線のもや、ちぎれ雲、動的な雲の容積、方向性の水平線輝き、雨、みぞれ、雪、および水面下の効果を有する大気モデル。
【0136】
5.アプリケーション特有の機能(Application−Specific Feature)。これらは、開発者がGAPを特定のアプリケーションにつくりなおすために書くブロックである。「地球の眺望」デモのために、これは、モーションモデル、コマンドライン処理、環境変数処理、グラフィカルユーザインターフェースカスタマイゼーション、アプリケーション特有のデータベースローディングおよびデコーディングロジック、スプラッシュスクリーン、およびウェブサイトへの連結のためのブラウザを生む能力を含む。
【0137】
ARKおよび標準ブロックは共にGAPである。GAPは、産業のマーケット指向のブロックに結合された場合、マーケット指向の開発および配置プラットフォームを定義し、そして、最終的に、0以上のセットのマーケット指向のブロックおよびアプリケーション特有のブロックのカスタム集合によるGAPは、完全なアプリケーションを定義する。
【0138】
GAPは、ハードウェアプラットフォームの詳細について良好にチューニングされかつ構造化される実行可能なアプリケーションを生産するために、ランタイムに自動的に「再構成」され得るアプリケーションコンポーネント間の内部関係を定義するために非常に高レベルの構造を提供することによって、新しいレベルのプログラム再利用をアプリケーションの間にインプリメントする。これにより、移植可能でかつ区別された実時間アプリケーションの準備を可能にする機能レベルの「デバイスドライバ」を介してハードウェアプロバイダによってグラフィックス、ビデオ、オーディオ、演算、および、ネットワーキングに関連するブロック等のハードウェア関連のブロックの交換が可能になる。これは、PCおよび、ケーブルセットトップボックスおよび向上されたテレビを含む他のデバイスハードウェアプラットフォーム用の高度なグラフィックスアプリケーションを構築するアプリケーション開発者にとって重要な利点である。
【0139】
「GAPバーチャルマシン」の最初の命令セットまたは「GAPオペレーティングシステム」のシステムサービスとなる基盤構造、リソース、および標準ブロックを考慮する。マーケット指向のブロックは、本発明の標的とするマーケットの機能を追加することによって、このコアの命令セットを拡張する。それらは、別々にパッケージングされるが、全く同一の方法で用いられる。機能およびリソースを表すブロックは、接続と一緒に織り込まれて、開発者が変更および拡張し得るフレームワークアプリケーションを形成する。この変更のプロセスは、ブロック間の連結が説明された後に議論される。
【0140】
3.ブロックインターフェースの定義
インターフェースは、外界からブロックまたはコンポーネントを分離する「セル壁」である。インターフェースは、コネクション構成に対する名前付けされたターゲットとして機能するブロックの入力コネクションおよび出力コネクションの公開定義である。インターフェースは、また、ブロック内の機能を特定する。インターフェースはタイプ分けされ、タイプは、為されるコネクションに整合しなければならない。タイプの安全性およびデータの完全性について、各入力ポイントおよび出力ポイントは、また、潜在的なコネクションが完成されるリンクに整合する必要がある、特定のタイプを有する。出力ポイントは、また、出力ポイントへのリンクによってアクセスされるブロック内部のデータのアイデンティティをもプライベイトに特定する。入力ポイントは、ローカル変数またはアクセッサ機能が入力コネクションを介してブロック内に流れるデータを読み出し、書きこむことに対応することを(明示的に、または、暗示的に)特定する。
【0141】
マクロを用いてブロック入力にアクセスし得、それにより、ブロック構成およびARKインプリメンテーションは手続され、インターフェースインプリメンテーションのさらなる考慮が行われる。このマクロアプローチは、また、書き換えるブロックを必要とすることなく、テストされる代替技術を可能にする。このマクロアプローチは、異なるGAPインプリメンテーションにおいて異なるデータ結合メカニズムを可能にする。
【0142】
4.ブロック間のコネクション
単一(single)コネクションが、各ブロック入力ポイントから任意(any)の他のブロックの互換性(compatible)出力ポイントに確立され得る。
【0143】
1. この定義において用語「単一(single)」は、ファンイン(fan−in)が入力接合ポイントにおいて特定できないことを意味する。
【0144】
2. 「互換性(compatible)」は、インタフェース互換性およびデータタイプ互換性を意味する。インターフェース定義名(または識別子)は整合する必要があり、このエンドポイントデータタイプは整合する必要がある。文字列出力は、例えば、浮動小数点入力に接続され得ない。
【0145】
3. 最後に、宛先として「任意(any)」の出力ポイントを許容にすることは、出力接合ポイントにおいて任意のファンアウトを支援することを意味する。
【0146】
コンポーネントはスーパーブロック「ファクトリ」であり、ブロックを使用するところで使用され得るということを上述した。コネクションの文脈において、この違いは、コンポーネントがリソースに接続され得ることのみであり、リソースは、コンポーネントに対して指定されたコネクションポイントとして知られたブロックである。コネクションの多くの特性は、一方向パイプラインとしてコネクションを思い描くことによって説明され、この一方向パイプラインにおいて、データは、内部固有オブジェクト派生データメンバから、あるブロックの出力ポイント、プロデューサ、別のブロックの入力ポイントへのダウンストリーム、消費者を通って流れる。代替の見方は、コネクションを、ダウンストリームブロックによるアップストリームブロックの内部データへのアクセスとして解釈する。このアプローチは、コネクションアーキテクチャの性能、制限、そしてセマンティックをさらに明らかに表現する。
【0147】
コネクションはランタイムにおいて作成され、実行の間に行われ、壊され得る。例えば、あるシーンを通ってアイポイントが動くことにより、ジオメトリページング機能は、新たにページングされたジオメトリとともに新たなアニメーションコンポーネントをロードし得る。この入来のアニメーションブロックは、カメラ位置リソースに取りつけられる必要があり、そのコネクションは上述したように行われる。一旦、接続されると、その情報を所有するブロック内からのカメラ位置出力データは、内部アクセッサ機能またはブロックの入力ポイントに関連する代表変数がそれぞれ呼び出されるか、アクセスされる場合、新たにロードされたブロック内で利用可能である。
【0148】
ブロックおよびコンポーネントは、ともに、GAPを構築するのに必要な特別の抽象化を提供する。それらは、その機能がコンパイルされた後にコネクショントポロジへの変更を可能にする一般的なコネクショントポロジを通って、サブルーチン呼び出しについての引数を特定するための手段をインプリメントする。それらは、また、データをコピーするのではなく、間接ハンドルを交換することによって、コネクションに沿って、データの効率的な転送を支援する。
【0149】
シーンの背景に起こっていることは、一見しただけで見えるかもしれないものよりもかなり洗練されている。ブロックを任意のマルチ処理トポロジ上のこの明瞭なデータフロープログラミングモデルで提示することは、ARK内の基本設計制約である。すべてのGAP関連データタイプを基礎とするARKおよびオブジェクトモデル内の複雑さの多くは、コネクションが上記のように動作し、極めて効率的であり、かつ、支援するという幻想を生み出すために存在している。
【0150】
−−同時実行ブロック間で共有データのコヒーレントアクセス。
【0151】
−−異なるレートで非同期または同期的に動作するブロック間のデータの見掛け散発生成または消費。
【0152】
−−メガバイトのデータが、一度に移動するいくつかのフレームデータでコネクションを通って流れるように見える必要がある、時間逐次処理パイプラインについての一時的なコヒーレンス。
【0153】
ブロック間のコネクションを行うこと、および、壊すことは、まれな事象であり得るが、コネクションを介してアクセスされたデータの量は、秒ごとに数百メガバイトのデータであり得る。それで、インプリメンテーションは、より遅いコネクション構築を犠牲にしても、より速いアクセスを常に好むべきである。
【0154】
コネクションは、GAP環境の決定的な要素である。コネクションは、ブロックが効率的な通信を維持し得、一方で、ライタイムにおいて、かつ、ライタイムの間、相互接続トポロジの柔軟な再構成を支援する、機構である。この機能は、「再構成を通ったランタイムアプリケーション最適化」の基礎であり、これは、ソフトウェア開発者およびハードウェア製造者によって提供されたアドオンブロックを通ってGAPベースアプリケーション開発者に提供される。
【0155】
5.コンポーネントとしてのパッケージングブロック
コンポーネントは、GAP環境における最もハイレベルなオブジェクトである。それらは、繰返しグローバルリソース割り当てプロセスに基づいてブロックの新たな集合を生成するためのファクトリを表す。それらは、以下の形式の質問に賢明に応答するように設計されている:「利用可能なリソース上で特定のハードウェア構成および制約がある場合に、特定の機能を挿入するためには標準フレームワークに何を追加すべきですか」。
【0156】
これは、応答するのが困難な質問である。なぜなら、それは、ローカル情報とグローバル情報との両方に依存するからである。ローカルには、ある機能のいくつかの利用可能なインプリメンテーションは、ハードウェアまたは他のリソースの可用性などの制約に基づいて選択され得る。グローバルには、重要なリソースの酷使を避けるため、または、画像品質またはレンダリングレートなどのアプリケーション優先度に基づいて最適化するために、あるインプリメンテーションが、別のインプリメンテーションより好ましくあり得る。例えば、機能AおよびBが、より多くのメモリか、または、より多くの処理を用いてインプリメントされ得る場合、そのとき、全体のメモリ使用および全体のCPU使用の両方が、利用可能なリソース内で、結果として生じたフレームレートに基づいて、特定の選択とフィットするように、それぞれのうちの一方のインプリメンテーションが選択される。
【0157】
コンポーネントは、コンピュータ選択可能バンドルにおいてインプリメンテーションの賢明さをパッケージ化したものである。それらは、正しい「変形物(variations)」が再使用機能のインプリメンテーションにおいてなされるという確信をもって、開発者が新たなアプリケーション内で以前に書かれたソフトウェアを再使用することを可能にするものである。
【0158】
構造的には、コンポーネントは、機能の1つ以上の代替のインプリメンテーションについてのコンテナである。このハイレベルの表記は、代替のインプリメンテーションのリストが示される、図7において図示される。
【0159】
それぞれの代替のインプリメンテーションに関連するのは、リソース(例えば、システムメモリ、テキスチャメモリ、CPU要件およびデータ転送帯域)のリストであり、それらは、リソース交渉が必要な場合、これらの要件を減らすために用いられる特定のインプリメンテーションおよび情報のインスタンスを成功に作成するのに必要であり、リソースが大量にある場合、その要件をおそらく拡大することが必要である。コンポーネントは、また、リソースをシステムに導入し得、それにより、それぞれの代替のインプリメンテーションは、その代替によって提供されたリソースのリストを含む。新たに作成されたリソースのそれぞれは、また、リソース交渉情報を有する。この情報は、新たなリソースに対して後の交渉における供給者側の取引を支援する。最終的に、代替のインプリメンテーションは、スーパーブロックのリストを含む。そのスーパーブロックは、実際のインプリメンテーションである。それぞれは、アプリケーションフレームワークの実行の特定のフェーズに関連し、そのフェーズ内で実行されるブロックのリストを提供する。図19は、単一の代替インプリメンテーションのコンテンツを示す。
【0160】
アプリケーション内のコンポーネントを識別した後、それぞれはそのリソース要件を尋ねられる。その応答は、代替インプリメンテーションおよびそれらに必要なリソースのリストである。これらの要件を集積することにより、代替物の少なくとも1つの構成がシステム制限内にフィットするかどうかを解決できる多次元リソース割り当て問題が生じる。
【0161】
−−単一の解決法が存在する場合、選択された代替物は各コンポーネントと通信され、それは、次いで、そのインプリメンテーションのブロック内および外へのリンクとなるコンポーネントの内および外へのリンクとの対応するインプリメンテーションのインスタンスを作成する。
【0162】
−−代替のインプリメンテーションの1つより多い組み合わせがリソース制約とフィットする場合、次いで、選択された構成は、アプリケーション開発者によって提供されたコンポーネント定義および評価式に含まれる重み付けパラメータに基づいている。この好ましい解決法は、次いで、コンポーネントと連絡され、そのコンポーネントは、選択された代替物のインスタンスを作り、それらをフレームワークにリンクする。
【0163】
−−リソースが予約過多の場合、したがって、直接的な解決法がなく、そして、そのシステムは、交渉フェーズになり、そこでは、各ブロックは、そのリソース要件のうちのどれを減らすことができるか、および、トレードオフを行うにはどんなペネルティがあるかを尋ねられる。典型的な例は、不明瞭な画像のペナルティにおいて1/4だけ減少され得るテキスチャメモリリソース、および、余剰CPU利用化およびデータ転送帯域消費を犠牲にした完全なデータのプリローディングではなく、インクリメンタルページングによって最小化されたシステムメモリリソースである。コンポーネントが減少したリソースで適切な代替インプリメンテーションのインスタンスを作れると受容可能な構成が見出されるまで、または、制約された環境内で「強い意思をもった」余計なコンポーネントが存在する場合、解決法がないことがわかるまで、交渉は続く。この極端な場合において、このポーネントのいずれかは取り除かれ、そのプロセスは再スタートされ、または、そのプロセスが終了する。
【0164】
リソース割り当てプロセスは、すべての必要なリソースが利用可能でない場合、コンポーネントのインプリメンテーションのインスタンスを作れないこと、および、いくつかの代替物のどれかについての適切な決定が利用可能リソースに応答して選択されることを確実にする。例えば、本発明のある実施形態において、ユニバーサルテキスチャコンポーネントは、SGIインプリメンテーションにおいてのみ提供される「クリップマップ」リソースに依存するインプリメンテーションを有し、そして、依存しないインプリメンテーションを有する。前者の場合、そのインプリメンテーションは、利口なSGI無限リアリティハードウェア(InfiniteReality hardware)の利点を有し得、他のケースにおいて、一般的なソフトウェアバージョンが使用される。
【0165】
コンポーネントは、また、リソースをそのシステム内に導入し得る。時には、これらの新たなリソースが物理的なリソースを管理するが、他の場合には、それらは、他のブロックの接合ポイントを表す。例えば、モーフィングコンポーネントを取りつけた場合、モーフィングが使用されるたびに他のコンポーネントがこれらを取りつけ得るように、モーフィング直前、モーフィング中およびモーフィング後の接合ポイントを知ることはまた有用である。巧妙には、そのような「コンポーネント上のコンポーネント」接合は、第1のコンポーネントが存在する場合にのみ意味を為すことに留意されたい。これは、コンポーネントが見つからないリソースに起因してロードされない場合に、常に問題になるとは限らないことを意味する。それは、単に、計画された臨時性がアプリケーションの設定において具体化されていなかったことを意味する。
【0166】
6.実行のフェーズおよびステージ
アプリケーションフレームワークは、実行のいくつかのフェーズを定義し、そのフェーズは、潜在的な並列実行のスレッドに対応する。コンポーネント内の代替のインプリメンテーションのそれぞれは、1つ以上のスーパーブロックを含み、それぞれは、処理の単一フェーズに関連している。スーパーブロックは、また、新たなフェーズ(例えば、前の例の場合におけるモーフィングフェーズ)を定義し得る。各アクティブコンポーネントの選択された代替のインプリメンテーションのスーパーブロックのインスタンスが作られると、それらは、特定のフェーズに関連し、同様に、コネクションによってリソースにリンクされる。
【0167】
所望なコンポーネントのインスタンス化の結果は、フェーズのリストである。各フェーズに関連するのは、ゼロまたはより多くのスーパーブロックのリストである。これらのリストの多くは空であり得る。例えば、アプリケーションが、置換を定義することなく、標準データベースページングコンポーネントを抑制する場合、データベースページングフェーズリストは空であり得る。空でないフェーズリストのそれぞれは、アプリケーションの潜在的な並行フェーズを定義する。ある例のアプリケーションフレームワークに対して、これらのフェーズリストを図8に示す。
【0168】
次いで、空でないフェーズは、実行のステージにマッピングされる。実行ステージは、それぞれ、フェーズの集合を表し、ARKは単一のスレッドで実行する。ステージ構造を図9に示す。フェーズ−ステージマッピングを生成するためのアルゴリズムは当該分野において公知であり、単純な「すべてのフェーズが単一スレッド順次実行に対する単一ステージにマッピングされたもの」から「各フェーズが最大の並行処理で独立ステージにマッピングされたもの」までの範囲がある。
【0169】
次いで、実行順序リストを生成することによって実行の結果としてのステージが実行のために作成され、そのリストは、コネクションによって課せられた一対のブロック順序を、フェーズブロックリスト内においてブロックの全体の順序へと構成する。後述するように、ARKは、これらのリストにわたって繰返し、各参照ブロックのevaluation()関数を呼び出す。
【0170】
ステージは、大変複雑な表示(異なるレートで実行しながら、なお、共有データを読み出し、更新する単一アプリケーション内の多くの「制御のメインループ」)の単純な表現を提供する。
【0171】
(7.シーケンシャル実行および並列実行)
ARKベースのアプリケーションを実行するための準備は、アプリケーション目録(manifest)に列挙されたコンポーネントのロードを含む。この目録は、アプリケーションの最上位のレベルにおいて必要とされたユーザによって開発されたブロック、第三者ブロック、および市場指向ブロックのそれぞれを列挙する。ロードした後、これらのコンポーネントは、上述したリソースの割り当て、インプリメンテーション、インスタンス化、およびフェーズ/ステージ間のマッピングプロセスに関与する。コンパウンドブロックは、他のブロックへのリンクのみからなるコンパウンドブロックは、そのサブブロックおよびリンクをインスタンス化して、それらの定義によって示された接続を作成することにより再帰的に拡張される。これらのタスクの結果、アプリケーション実行の各ステージの定義が作られる。この定義のそれぞれは、ブロック実行オーダーリストならびにブロックおよび構成された接続の対応するセットを有する。
【0172】
この前処理から生じた実行オーダーリストはARKへの入力であり、このようなリストの評価はARKの基本的なタスクである。図10は、実行オーダーリストを実行する単一のARKスレッドマネージャを有するこの構造を示す。
【0173】
シーケンシャル実行環境では、各パスの間、単一のARKスレッドがいくつかのまたは全てのブロックを選択しそして実行する実行オーダーリストにわたって連続的に反復する。ブロックが異なる速度で動作する場合についての部分的な実行が存在する。例えば、いくつかのブロックは60Hzで動作し、いくつかのブロックが30Hzで動作する場合、ARKは60Hzで反復するが、全部の時間で60Hzのブロックを選択するか、その半分の時間で30Hzのブロックを選択する。
【0174】
簡単なブロックは、開発者の観点から最高の精細度の潜在的な並列処理を示すが、上述のように、実際には、簡単なブロックは、実行の実際の原子的な要素である実行オーダーリストである。これは、各ブロックが単一のブロック実行オーダーリストによって参照され、このオーダーリストは、ブロック内の特定の機能ではなくブロックであり、ARKによってスケジュールされ、潜在的な並列ARKスレッドによって実行される。
【0175】
並列実行は、図11によって示されるように、各ブロックのそれぞれがブロック実行オーダーリストを有する複数のARKスレッドが存在するより高度な場合である。支援された並列処理モードは、単一のプロセッサ(多重スレッドまたは多重プログラミングとして公知である)、マルチプルプロセッサのそれぞれに関する単一のスレッド(多重処理と呼ぶ)、および多重プログラミングおよび多重処理の任意の組み合わせを含む。
【0176】
並列実行において、ARKスレッド1つにつき複数の独立ブロック実行オーダーリストが存在する。平坦化されたアプリケーショングラフを複数のリストに変換することは、ブロック間のいくつかの接続にARKスレッド境界を拡張させ、この境界は、共有されたデータに対する重要な意味を有する異なるリストにおける上流および下流ブロックを有する。このケースは、ブロック開発者には非可観性であるが、余分な場面の背景加工がこの状況を適切に処理することを必要とするため、ARKを設計および実現する開発者には非可観性ではない。
【0177】
ブロック間のリンクもこのようなリンクのデータが存在または不在であっても、ブロックの実行を駆動も妨害もしない。ブロック実行は、実行オーダーリストによって制御されるのみである。この実行リストは、実行の前後のいずれかで作成され、実行の間に変化し得る。GAPの「ブロック間の動的接続にわたってフローするデータ」構造と「ブロック入力におけるデータの存在によって制御された実行」との間の著しい差異が存在する。GAPは、スケジューラブロック(または実行前の静的解析)によって作成された1つ以上のブロック実行オーダーリストに従うことによってブロックを実行する「エンベデッドアプリケーションレベルオペレーティングシステム」と似ている。
【0178】
GAPは、並列実行に対する例示的な設計者のための、明確に理解するために必要な開発者なしで有用な処理リソースを使用するために自動的におよび効率的に拡張するプログラムを書き込む能力を提供する。さらにGAPは、リアルタイム指向の並列処理を提供する。これらは、他のプラットフォームおよびプログラム環境と比較するとGAPの強力な利点および独特な利点である。
【0179】
(8.フレームワークアプリケーション)
図20は、本発明による例示的なグラフィックアプリケーションの予備的な構造を示す。データのフローは、「表示解像度」とラベル付けされた区別されたブロックにおいて開始し、このシステムを介して入力デバイスおよび出力デバイスまで継続する。この図は、処理フェーズをラベル付けしないが、処理フェーズは、黒い輪郭のブロックにほぼ対応する。この図は、標準的なアクティブ領域(active terrain)もオブジェクトモーフィングもヒューマン入力デバイス管理コンポーネントも含まない。
【0180】
(III.アプリケーション開発)
(A.アプリケーショングラフ)
アプリケーショングラフは、アプリケーションの基礎的表現および/またはアプリケーションリアルタイムカーネルの応用の一部である。ARKはこの図を使用して、データおよびグラフ中に説明された処理フローに基づいた仮想マシンであるかのようにアプリケーションを実行する。このアプリケーショングラフは、処理ブロック、データインターフェース、およびデータ接続からなる。このようにアプリケーションを編成することは、通常のオブジェクト指向のプログラミングモデルに直交する態様である。ARKは、アプリケーションにわたって使用されたデータ構造も処理しているコンポーネントのインプリメンテーションも命令しない。しかし、ARKは、開発者により多くのアプリケーションを明確に定義させ、それにより、カーネルにデータフローのメッセージおよびアプリケーションの処理(その全体においてアプリケーションを理解する際の多くの固有の最適化を作成する(設計のこのレベルにおいて))を管理させる。
【0181】
(B.コンポーネント)
さらにARKは、機能性をアプリケーショングラフに挿入する目的のために、パッケージングおよびランタイム管理セマンティックを定義する。このセマンティックは、コンポーネントの概念に基づく。コンポーネントは機能性の特性レベルパッケージングである。ARKは、実行することに対して責任を有する現在のアプリケーショングラフでなく、アプリケーションにおいて潜在的に使用され得る要素およびインターフェースを処理するランタイム定義辞書も含む。コンポーネントは、既存の定義を拡張することを可能にし、新しい定義にこのランタイム辞書を追加する。コンポーネントはまた、最終的にリソースを交渉するために使用され、その結果コンポーネントは、どのリソースがコンポーネントに対して利用可能であるかに基づいて、どのようにしてシステムにコンポーネント自身を挿入するかを制御し得る。これに対応して、ARKのランタイムリソース管理およびパフォーマンスモニタリングは、これらの同一の特性レベルのコンポーネントに基づいて破壊される。ARKは、リクエストを作成するコンポーネントリクエストに関する全てのリソースを割り当てる。さらにARKは、これらのリソース(メモリ、時間、処理、バス帯域幅等)のコンポーネント利用をトラッキングする。従って、カーネルに対して、コンポーネントが完全なオペレーティングシステムになるべきプロセスと酷似している(コンポーネントはリソース割り当て/モニタリングの粒度である)。しかし、コンポーネントがどのようにして相互作用する(アプリケーショングラフを介して)かについての知識のために、ARKカーネルは、より多くのインテリジェントコンポーネントとして動作し得る。ARKは、関連していないタスクの集合のほとんどない知識を有する代わりに、どれくらい多くのコンポーネントが特定の全体のアプリケーション構造にわたって適合するかについての非常に詳細な知識を有する。
【0182】
(C.コンポーネント辞書)
ARKは、モジュールに書かれて構成されたアプリケーションの全体の理解を維持しなければならないため、ARKは、アプリケーショングラフ概念の完全な辞書を維持する。この辞書は、ARKアプリケーショングラフを作成するいくつかの明瞭な構造に基づいてアプリケーションのセグメントを定義することができる。これらの構造は、処理ブロック、データインターフェース、データ接続、およびデータオブジェクトを含む。これらの構造の定義はその構造自体がモジュラーでなければならない。実際には、ARKベースのアプリケーションマシンの開発者は、抽象化「基礎」処理ブロック内のデータインターフェースおよび接続ポイントレイアウトすることによってそのアプリケーションを定義することを強く促進する。この種の設計および開発は、その部分的な定義、拡張、およびカプセル化は、その辞書が処理する必要があるキー概念であることを決定する。このARKは、構造的な定義、部分的な拡張、全体の拡張、および機能的置換の全てを明確に理解されたアプリケーショングラフ定義にアセンブルすることを可能にする必要がある。さらに、ARKは、これらのアプリケーション定義がアプリケーションランタイムにおいて関心のある態様で構成されることを必要とする。従って、辞書の動作は、シンプルなブロック、ブロックのためのデータインターフェース、インターフェースのようなブロックを接続する接続、コンパウンドブロック、および基礎ブロックを含む。
【0183】
(D.処理ブロック)
(1.一般的なブロック)
プロセッシングブロックは、アプリケーショングラフ内部に発生する原子的なプロセッシングを含む。プロセッシングブロックは、入力フィールド、内部格納フィールド、および出力フィールドを有する。一般的に入力フィールドは読み出し専用であり、ARKによって自動的に更新される。内部格納フィールドは、読み出し/書き込まれ、通常のc++/cフィールドアクセスを介してブロック自体(一般的に)によってのみ更新される。出力フィールドは、入力フィールドまたは内部格納フィールドのいずれかのシャドウであるに過ぎない。その結果、ARKは、ブロックと直接相互作用することなく出力の伝達を管理し得る。ブロック間の通信のみがその入力およびその出力を介して存在する。しかし、ブロックはまた、ARKのリソースマネージャと相互作用し、ブロックにおいて使用されたリソースにわたって交渉することが可能である。このようなリソースは、ブロックプロセッシング時間、メモリ割り当て、バス利用、およびセマンティックな定義のリソースセクションにおいて定義される他のリソースを含む。
【0184】
ブロックはいくつかの関数インターフェースを定義する。主にこれらのインターフェースは、初期化、イニシャライズアウトプット(initializeOutput)リセット、および評価関数からなる。ARKは初期化関数を使用して、ブロックをそのリソースに割り当てさせる。ARKは初期化出力関数を使用して、ブロックに、ARK対して出力フィールドのストーレッジとしてARKに対して格納定義させる。ARKはリセットを使用して、ブロックの内部状態フィールドを十分に定義されたデフォルト値にリセットする。ARKは、評価関数を使用してブロックにそのプロセッシング(ブロックの入力および現在の内部状態フィールドに基づくプロセッシング)を実行させる。
【0185】
ブロックスケジューリングがARKによって実行される。このスケジュールは、簡単で決定論的である必要があるが、ポート/コネクタにおいて利用可能なデータに関連付けられ得る。ほとんどのブロックは、ブロックの入力が「十分な」データをリフレッシュした時はいつでも、現在のアプリケーショングラフ(階層的である)の入力からアプリケーショングラフを通ってスケジューリングブロックに単に直線的に移動することによってスケジューリングされる。「十分なデータ」の概念は、ブロックをグラフに挿入する場合、そのブロックの入力において利用可能なデータにブロックのスケジューリングを関連付けるコンポーネントを挿入することによって定義される。スケジューリングのレベルは、ループ構造物、大きなサイズのワークリスト、および実行による直線パスを可能にするが、反復またはスタックに基づくクロック実行に基づいて任意のスケジューリングを可能にしない。
【0186】
(2.シンプルなブロック)
シンプルなブロックは、アプリケーショングラフ階層におけるリーフプロセッシングノードである。シンプルなブロックは、ARKがブロックをスケジューリングする時はいつでも実行される評価関数を有する。シンプルなブロックは、単にそのブロックの入力および出力を通って流れるタイプのデータプロセッシングのためのポイントをスケジュールするに過ぎない。
【0187】
(3.コンパウンドブロック)
コンパウンドブロックは、1つのブロックにカプセル化されるアプリケーショングラフの内蔵セクションである。これは、このブロックがブロックに含まれたグラフの入力をその入力として有することを意味する。このブロックは、グラフに含まれたブロックの出力に対応する出力を有する。上記のレベルからコンパウンドブロックは、シンプルなブロックとしてスケジューリングされるのみであり得る(原子的に、ブロックの入力におけるデータ利用性に基づいて)。
【0188】
(4.基本コンパウンドブロック)
さらにコンパウンドブロックは名前空間を含む。この名前空間は、コンパウンドブロック内で流れるデータのためのデータヒッチポイントを生成するために使用される。これらのデータヒッチポイントは、コンパウンドブロック内部に命名され、コンポーネントに対してプラグイン機構を提供して、関数性を、所定の「基本」構造を有するブロックに追加する。任意のコンパウンドブロックは、命名されたコネクタをブロックのその内部に追加することによって基本ブロックになり得る。これらのコネクタは、データプロセッシングおよびプロセッシングフローの点からコンパウンドブロック自体についてのセマンティックを定義する場合、重要である。さらにこれらのコネクタは、プロセッシングの構成、スケジューリングの構成、およびプロセッシングブロック自体のインプリメンテーションおよび設計に大幅に直交する構成を作成する潜在的なバッファリングを提供する。ここで、このアイデアは、どのようにしてこのコンパウンドブロックを機能させるのか、およびどのタイプの拡張をコンパウンドブロックが処理するのかを定義する基本ブロックの元の開発者次第である。
【0189】
(5.フェーズ)
全体のアプリケーションに直接プラグインするコンパウンドブロック(最も高いレベルのコンパウンドブロック)がフェーズと呼ばれ、基本的なコンパウンドブロックのみ特化される。フェーズは、コンパウンドブロックのシステムにおいていくつかの理由のために選ばれる。第1に、フェーズは、全体のアプリケーションの所望の構成粒度のレベルを提供する。第2に、フェーズは、アプリケーションレベルの特性を拡張または置換するために望まれるコンポーネントのためにプラグイン粒度の所望のレベルを提供する。第3に、フェーズは、現在、ARKがスレッドを使用し得る粒度のレベルとして作用する(各フェーズは、必要であれば、個々のスレッドにマッピングするように構成され得る)。
【0190】
(6.ステージ)
ステージは、特定のスレッドにマッピングされるフェーズのグループ化である。ある極端な場合は、フェーズとステージとの間の一対一のマッピングであり、このマッピングは、利用可能なプロセッサおよび基本的なコンテキストスイッチングを最大限に使用する。他の極端な場合は、1つのみのアプリケーションステージ(このステージは、コンパウンドブロックについて定義された同一の簡単なスケジューリングアルゴリズムに基づいてアプリケーションフェーズの全てを実行する)が存在する。本質的には、ステージは、フェーズの同期化、通信、条件の実行のメインループを含む。
【0191】
(7.ブロックの要約)
ブロックは、ARKに基づくアプリケーションにおいて発生する原子的な(atomic)処理を説明するために使用される。この処理のスケジューリングは、ARKの意味に基づいて明示的に行われる。これは、現在のプログラミングシステムで開発された大抵のアプリケーションにおいて使用された制御フローに基づいた暗示的な協同スタックとはかなり異なる。ARKベースの処理の明示的な性質は、リアルタイム相互作用および性能の観点から、はるかに多くの決定論的なアプリケーションへと導く。さらに、このアプリケーションの目的の高いレベルの理解に基づくと、いくつかの最適化を可能にする。
【0192】
ブロックはARKの基本的な構築ブロックである。ブロックは、それ自体が階層的に定義される。この定義は、入力および出力を有する処理構造の再帰的なコンパウンドの表示としてアプリケーションの表示に作用する。このように、全体のアプリケーションは、入力および出力を有する1つの大きなコンパウンドブロックである。さらに、アプリケーションは十分に定義された相互接続(フェーズ)を用いて機能的分離可能な断片に分解される。これらの分離可能な断片がコンパウンドブロックであり、このブロック自体が興味深い態様で構成かつインスタンス化され得る。さらに、これらの分離可能な断片は、処理およびデータフローに関して定義された自体の構造を有するコンパウンドブロック自体である。
【0193】
(E.データインターフェース)
(1.一般的な説明)
ARKは、データインターフェースを明示的に定義することによって起こるアプリケーションとの全ての通信を説明する。これらのデータインターフェースは、大抵の現在のプログラミングシステムによって提供された機能的な通信メカニズムに基づくスタックとは実質的に異なる。データインターフェースは、型データにアクセスし、ただし、インターフェース上のデータの「プロバイダ」(処理ブロック)およびデータの「ユーザ」(別の処理ブロック)は、直接的にインタラクトしないか、または互いの認識を有しない。さらにこの「要約」にもかかわらず、データインターフェースブロックは、直接的に接続可能であり(インプリメンテーションでは)、仮想的または非仮想的な機能呼び出しを介して、スタック上でデータを処理することなく、内部データを露出することをしばしば可能にする。このタイプの高速な直接アクセスは、全体のグラフ内の処理ブロックのARK認識およびスケジューリングのおかげでのみ管理可能である。
【0194】
ARKベースのアプリケーションを指定することは、そのデータインターフェースの定義から開始すべきである。通常の機能的プログラミングでは、コードモジュールが分解され、機能的プログラミングインターフェースは、この相互作用を抽象化するために定義される。オブジェクト指向のアプリケーションでは、この抽象化は、全体のアプリケーション内の個別の「オブジェクト」の性質、およびこれらのオブジェクトが、どのようにして互いに抽象的に相互作用し得るかに従ってさらに分解される。ARKアプリケーションでは、その機能的またはオブジェクト構造のみに基づくアプリケーションを定義するのではなく、アプリケーションが全体のアプリケーション構造における種々の位置において利用可能なデータインターフェースの点において説明される。これらのインターフェースは、システムの相互作用を表し、データフローを説明するが、インターフェースに接続する処理ブロックのための固有の構造を提供する。再び、このレベルの説明は、個々のシステムオブジェクトまたはモジュールの暗示的な領域からデータのフローを利用し(take)、その説明をより高いレベルで明示し、構成可能にする。実際、これらのインターフェースは、アプリケーションオブジェクト/モジュールがシステムの多くの異なる部分におけるインターフェースに接続することを可能にするが、全体のアプリケーション構造と意味的に一致する態様でさらに相互作用する。従って、データインターフェースは、全体のアプリケーションに対する全体の特性のドライバモデルを提供する。システムの個々のコンポーネントが、同意されたデータインターフェースを介して相互作用するが、データインターフェース自体のみを理解し、当該のブロックはまた、インターフェースの他の側上のブロックについて関心を持たない。
【0195】
(2.ピン)
このARKは、いくつかのレベルでアプリケーションデータインターフェースを定義する。データインターフェース定義の最も低いレベルはピンと呼ばれる。ピンは、ブロックによって送信または受信された(別のブロックから来るまたは別のブロックに行く)原子的なフィールドへのアクセスを表すように定義される。従って、ピンは、固有のオブジェクト(整数、浮動小数点、オブジェクト、ハンドル、ベクトル等)内のフィールドに直接的に対応するデータインターフェースを提供する。ピンは2つのタイプ(入力および出力)に分離される。入力ピンは、出力ピンに接続されなければならず、またはその値は定義されない。入力ピンは、ブロックの評価中に、内部フィールドのようにより多くアクセスされる。実際には、基本的な考えは、ARKが、ブロックが実行する場合、ブロックの入力ピンの全てが確かなデータを全て含むことを保証することである。しかし出力ピンは、わずかに異なる意味を有する。出力ピンは、オブジェクトに含まれるブロックまたはブロックの内の1つにおける対応するフィールドを有しなければならない。ARKは、ブロックからの相互作用なしで出力ピンの値を通過させることに対して責任がある。これは、ARKが各出力ピンに対してピンマッピングを出力するフィールドを有しなければならないことを意味する。要するに、ブロックが実行する場合、ARKは、ブロックの入力の全てを確定させかつ利用可能にする。ブロックが実行を終了する場合、ARKは、概念的に、ブロックの出力をブロックの出力に接続された他に入力にのせる。インプリメンテーションにおいては、これは、ARKが、このブロックの出力に接続された他のブロックが意味的に適切な時間においてデータ値をサンプルすることを可能にすることを意味する。
【0196】
(3.ポート)
ピンが共にグループ化されてポートと呼ばれるデータインターフェースのより高いレベルの説明を形成する。ポートは本質的には階層的であり、複雑なピングループ化に対して、ポリモルフィックタイプのシステムを提供する。ポートはピンのリストおよび他のポートとして定義される。ポートは、第1に、ポートのインスタンスが作成される前のポートタイプのシステムを介して定義される。これは、標準的なポートのタイプが、標準的なインターフェースを介して個々の処理ブロックを取り付けるようと努める複数の開発者によって定義され使用されることを可能にする。このポートタイプは、標準的なインターフェースのみならず、アプリケーションの標準的な点を有するようにコネクタ(以後定義される)によってさらに使用され得る。このアプリケーションでは、このインターフェースが存在し、特定の意味を有する。ポート定義はランタイムにおいて拡張可能であり、ポリモルフィックである。単にポートは、標準的な態様で階層的に共にグループ化されるピンの態様(ハードウエア世界における標準的なソケットを作成するように極めて類似しているもの)を表すに過ぎない。
【0197】
(4.ピン/ポート相互作用)
ピンおよびポートは通常簡単かつ自動的である。ARKは、データを出力ピン/ポートから接続された入力ピン/ポートに伝達させることに対して責任がある。通常、この伝達は、ARKの内部で自動的に発生し、そしてブロックの評価を含む内部ARKラッパー機能において、ARKが行う最小のセットアップが実行される。しかし、このARKは、定義されるべき「相互作用」ポート/ピンを可能にする。相互作用ポート/ピンは、ARKに、処理するための新しいデータインを「引き込む(put)」か、または処理するためのデータアウトを「押し出す(push)」ことを尋ねる。この相互作用押し出し/引き込みの意味は、この柔軟性がより細かいグレイン(grain)の方法でアプリケーションまたは互いに相互作用するブロックを生成することを可能にする。相互作用ピン/またはポートは、特定のはるかにより高価なデータバッファリングを要求し、このセクションの以下に説明される特別なバッファリングされたコネクタに接続されたポートによって使用されるのみであり得ることに留意することは重要である。
【0198】
(5.データ接続)
データ接続は、1つのブロックの入力ピン/ポートと別のブロックの類似のタイプの出力ピン/ポートとの間の接続である。ARKは、接続の1つのタイプ(簡単な接続)を提供するだけである。簡単な接続は、2つのブロック間の抽象化インターフェースの安全な直接アクセスを提供する。簡単な接続は、2つのピン/ポート間の意味のある値のコピーを介した簡単なデータフローを表す。しかし、簡単な接続のインプリメンテーションは、電気的類似を用いてよりわかりやすく説明される。この類似では、実際に入力は別のブロックの出力に電気的に接続される。従って、ブロックBの入力がブロックAの出力に接続される場合、ブロックBのポートは、その入力ピンをサンプリングする時に、ブロックAの実際のデータを効率的にサンプリングする。これは、ブロックAおよびBが意味的に一致する態様で実行されるのみであり、そしてAおよびBが異なるスレッドで評価される場合にマルチバッファリングブロックAのデータにさらなる配慮を払うことをそのARKが確実にさせる理由の場合のみ安全である。
【0199】
(6.データコネクタ)
(簡単なコネクタ)
コネクタはデータに対するハブ状のヒッチポイントである。2つのタイプのコネクタがある。簡単なコネクタは、コンパウンドブロックに接続させる任意のブロックから離れているコンパウンドブロックの内側に存在するデュアルサイドポートのように動作する。簡単なコネクタに関して重要なことは、簡単なコネクタは、独立して開発されるが、なおさらに相互作用するコンポーネントための予め定義された名前の空間を提供することである。コンポーネントが基本的なブロックを追加する場合、コンポーネントは、ブロックを挿入し、これらのブロックのポートを予め存在するコネクタに接続することによって機能的に追加する。従って、コネクタはコンパウンドブロックの全体の構造を提供し、本来の開発者が通信のために使用するインターフェースを定義する。
【0200】
(バッファリングされたコネクタ)
バッファリングされたコネクタは、構造的な名前の空間ばかりではなく、コネクタを通過するデータフローについての追加の意味を提供する。バッファリングされたコネクタは、コネクタを通過するデータフローのファンインおよびファンアウトの両方を支援することが可能である。さらに、バッファリングされたコネクタは、ワークキューおよびデータルータとして使用され得る。バッファリングされたコネクタは、より多くのモジュール化かつ構成可能なアプリケーションコンポーネントを可能にするより多くの関心のあるデータハブ接続点を許容する。バッファリングされたコネクタもまた、ARKによって表現されたように、アプリケーションの構造に対してさらにより多くの定義を提供する。しかし、バッファリングされたコネクタは、ランタイムコストを有する。バッファリングされたコネクタは、コネクタがバッファリングするデータのための記憶装置を有しなければならない。さらに、バッファリングされたコネクタは、アプリケーションフェーズが関心のある方法で拡張、置換、および構成されることを可能にするように、いくつかの簡単なデータフィルタリングおよびルーティングオプションを支援しなければならない。バッファリングされたコネクタは、各データ要素をダウンストリームブロックに連続的に提供することによってファンインを可能にすることに対して有用である。さらにバッファリングされたコネクタが利用可能である。なぜならARKは、ブロックがコネクタのバッファにおいて利用可能な要素の数に基づいてスケジュールされることを可能にするためである。従って、簡単なループ構成は、作業/機能性のハイレベルな部分に対してインプリメントされ得る。これはまた、処理ブロックが簡略化されることを可能にし、入力のセットに関して作用する一方で、ARKは、現在の構成に基づいて利用可能な入力に基づいて繰り返して処理ブロックをスケジューリングする。バッファリングされたコネクタは、またイベント駆動マルチスレッド(クロスフェーズ)内部ブロック通信に対して特に利用可能である。
【0201】
(7.データインターフェースの要旨)
データインターフェースはARKにおいて基本的なものである。データインターフェースは、コードモジュールが抽象化インターフェースを用いてリアルタイムアプリケーションの内部に効率的に相互作用する。最低レベルのインターフェースは、ピンと呼ばれる原子的なフィールドインターフェースである。ピンは、ポートとして公知の階層的なタイプの構造にグループ化され得る。異なるブロックからのピンおよびポートは、簡単な接続を介して互いに接続され得る。接続が値を渡し接続として作用する点において、接続は意味的には簡単である。データインターフェースは、名前空間としてアプリケーションに別に存在し得る(このようなインターフェースは対称入力/出力タイプのデータを提供し、コネクタと呼ばれる)。特別なバッファリングされたコネクタは、処理ブロック間のより高度なデータ相互作用を可能にしつつ、なおアプリケーションの意図をARKに表現する。
【0202】
(F.オブジェクト設計言語(ODL))
(1.ODL概要)
本発明によるODLは、簡単で単純な態様で開発者に開発者のプログラムの構造を記述させる。このハイレベルな記述が使用されて、複数のハードウエアプラットフォームおよびソフトウエアプラットフォームに関するメインストリーム言語および関数よりもより高い性能を達成する態様でプログラムを実施し得る。
【0203】
ハードウエアプラットフォームおよびソフトウエアプラットフォームに含まれたライブラリ、アプリケーション、およびオブジェクトが、ODLで表現された。オブジェクト中のこの状態情報は、抽象的な態様で表現されるので、メモリおよびデータ転送が特定のプラットフォームのために調整される方法を用いて管理され得る。さらに、情報がODLを通じて提供され得、他の種類の最適化を可能にする。
【0204】
本明細書で説明された実施形態におけるODLは、スキームプログラミング言語の文法を用いる。なぜなら、ODLは、単純な方法で複雑な構造を任意に記述し得、新しい意味を用いて容易に拡張され、人間が読むことが可能になり(ODLが合理的にファーマットされた場合)、そして容易におよび迅速にコンピュータによって構文解析されるからである。あるいは、ODLは多くのプログラマにとって親しみやすくなり、ほとんどのテキストエディタによってサポートされる。
【0205】
(2.用語集)
このセクションでは用語のための用語集がここで提供される。
【0206】
オブジェクト:異なるタイプのカプセル化されたフィールドによって構成された状態情報を含むエンティティである。オブジェクトが含むフィールドのタイプに依存して、オブジェクトは他のオブジェクトに接続され、データフロープログラムにおいてオブジェクト間に流れ、そして手続型プログラムなど(C/C++で書かれた)によって操作され得る。
【0207】
オブジェクト要素:オブジェクトの一部である。オブジェクト要素は、典型的には、名前を有し、所定のタイプの状態情報を保持する。異なる種類の要素は、以下に示される。
【0208】
インターフェース:オブジェクトへのデータの入力またはオブジェクトからのデータの出力のために使用される要素。
【0209】
フィールド:所定のタイプの状態情報を保持する要素。
【0210】
基礎:基礎として使用されるべきオブジェクト(「基礎オブジェクト」)を定義する要素または拡張のための基盤。このオブジェクトは、基礎オブジェクトの全ての要素を獲得する。
【0211】
拡張:追加されるべきオブジェクト(「拡張オブジェクト」)を定義する要素。オブジェクトは、拡張オブジェクトの全ての要素を獲得し、その接続を既存のコネクタにフックする。
【0212】
コネクタ:接続を行うための配置として作用する目的のみのために存在する要素。コネクタは、典型的には、基礎として使用され得るオブジェクト内部で使用される。その目的は、オブジェクトに接続するために拡張するための固定点を確立することである。
【0213】
接続:2つのオブジェクト間のデータ転送のための接続として役立つ要素。接続は、データのソース(フィールドまたはオブジェクト出力)をデータの消費者(オブジェクト入力)に接続する。
【0214】
直列:コネクタと直列に接続させる特殊な接続。この目的は、コネクタを介して流れるデータが複数の独立した態様で処理されることを可能にする。
【0215】
ブロック:少なくとも1つの入力および/または出力要素を有するオブジェクトであり、従ってデータフロープログラムにおける他のブロックに接続され得る。評価関数のみを含むブロックは、「簡単なブロック」と呼ばれる。他の全ては、「コンパウンドブロック」と呼ばれる。なぜなら、これらのブロックは、内部に他のブロックを含むためである。
【0216】
(3.データフローオブジェクト文法)
このセクションでは、中括弧はその中に満たされるべき値を表す。大括弧は、オプションのアイテムを表す。アスタリスクは、これに先行する0以上のアイテムを表す。
【0217】
(一般的文法)
全てのODLキーワードは、大文字と小文字の区別がない(case−insensitive)。しかし、オブジェクト名は大文字と小文字の区別がないことが保障されていない。なぜなら、いくつかの言語(特にCおよびC++)が独立しているためである。
【0218】
スキーム型コメントが支援される。セミコロンと以下の復帰文字との間の全ての文字からなる。
【0219】
(オブジェクト参照)
オブジェクト参照の2つのタイプがある。すなわち、制限された(通常の)オブジェクト参照(ObjectRef)および完全なオブジェクト参照(ObjectCRef)である。
【0220】
ObjectRefオペレータは、オブジェクト定義参照を別のオブジェクト定義にする。参照されたオブジェクトのパブリック要素だけがアクセスされ得る。参照オブジェクトのパブリック要素のみがアクセスされ得る。ObjectRefへのパラメータは、任意の数の参照されたオブジェクトのプロパティを含み得る。ObjectRefオペレータは、参照を回復し、参照自体をパラメータによって識別されたオブジェクト定義に置換する。
【0221】
以下の例は、iAdderブロックを識別する。
【0222】
(ObjectRef(Block(Name’iAdder)))
ObjectCRefオペレータは、ObjectCRefオペレータが、パブリック要素だけではなく、参照されたオブジェクトの全ての要素にアクセスすることを可能にすることを除いて、ObjectRefのように作用する。これは、通常基礎および拡張要素と共に使用されるのみである。
【0223】
ObjectCRefオペレータは、この態様の基礎を再インプリメントし、拡張要素が復帰する場合、カプセル化を妨害し、恐らくカプセル化は将来なくなる。
【0224】
(タイプ識別子)
オブジェクトタイプ識別子は、ビルトインタイプまたはオブジェクト定義のいずれかを特定し得る。
【0225】
少数のビルトインタイプは、複雑なオブジェクトの構築に対して支援される。ビルトインタイプは、タイプオペレータを用いて特定される。
【0226】
(type{iBool│iInt│iFloat│iPointer})いくつかの他のオブジェクトタイプに対して、オブジェクト定義が特定される。ほとんどのオブジェクト定義が1つの位置で定義され、識別子によって参照されるため、ObjectRefオペレータが通常使用される。しかし、オブジェクト定義が1つの位置のみで使用される場合、オブジェクト定義は「インライン(inline)」のように見え得る。
【0227】
インラインオブジェクト定義がまだ十分に支援されていない。
【0228】
どのタイプのオブジェクトが使用されるかに独立して、タイプ識別子は、データがローカルまたはリモートに存在することを記述し得る。ローカルオブジェクトは、ローカルにインスタンスが作られたものである。リモートオブジェクトは、別の位置に存在し、参照されるオブジェクトである(例えば、別のオブジェクトの内側)。ピンオペレータは、任意のタイプの識別子をリモートにある識別子に変換し得る。
【0229】
リモートにアクセスされたオブジェクトは、典型的には、オブジェクトの入力、出力、およびコネクタ要素に使用される。
【0230】
(例)
整数
(Type’iInt)
ObjectRefオペレータを用いるiAdderブロックは、
(ObjectRef(Block(Name ’iAdder)))
インラインのiAdderブロックは、
(Block(Name ’iAdder)(Input(Name ’left)(Type ’iInt))...)
リモートにアクセスされた整数は、
(Pin(Type ’iInt))
リモートにアクセスされたiAdderブロックは、
(Pin(ObjectRef(Block(Name ’iAdder))))
(4.オブジェクト文法)
オブジェクトが含む要素に依存して、オブジェクトデータフロープログラムを通過して流れる簡単な状態コンテナにあり得るか、またはオブジェクトは、プログラムに接続され得るブロックであり得る。
【0231】
状態コンテナは、典型的には、フィールドまたは関数を含むが、一方ブロックは、入力、出力、内部ブロック、コネクタ等を含む。任意のオブジェクトは任意の要素を含むため、実際には、状態コンテナオブジェクトとブロックとの間に鋭い違いがない。
【0232】
ブロックのインプリメンテーションは、ワイヤおよび計算を実行し得る「評価」関数によって互いに接続された内部ブロックおよびフィールドのネットワークから形成され得る。さらにブロックは、直列接続(典型的には、拡張オブジェクトにおいて使用される)が接続され得るコネクタを含む。ブロックをインプリメントする2つの方法がある。第1の方法は、内部ブロック、フィールド、コネクタ、および接続の収集を明示的に特定することである。第2の方法は、基礎要素および0以上の拡張要素を使用することである。後者の場合、基礎オブジェクトの実現は、新しいインプリメンテーションを形成する拡張オブジェクトのインプリメンテーションと組み合わされる。
【0233】
さらに基礎要素が使用され、オブジェクトのプロパティの従来の継承をインプリメントし得る。より多くの情報については、以下の基礎セクションを参照のこと。
【0234】
(オブジェクトアイデンティティ)
全てのオブジェクト定義は、一意に定まる識別子のリストを含まなければならない。共に選択する場合、オブジェクト定義を一意に識別する。一意に定まる識別子のリストは、識別子のプロパティによって特定される。識別子のプロパティが存在しない場合、オブジェクトは、単に名前のプロパティによって識別されるだけである。
【0235】
(インターフェース:入力および出力)
入力および出力インターフェースは、InputおよびOutputプロパティによって特定される。入力および出力インターフェースのそれぞれは、タイプ識別子を有し、タイプ識別子は、入力に流れるかまたは出力から流れるデータのタイプを説明する。
【0236】
(フィールド)
状態情報は、フィールドに格納される。それぞれのフィールドは、タイプ識別子を有する。タイプ識別子は格納されたデータのタイプを説明する。
【0237】
Valueのプロパティは、フィールドの初期値を特定する。ビルトインデフォルト値を有さない基礎的なタイプ(int、float等)を用いてのみ使用される。
【0238】
Ownedプロパティを内在的なオブジェクトであるフィールドに適用するのみである。真に設定する場合、オブジェクトは管理される(インスタンス化が作成される、削除される等)。デフォルトではオブジェクトは真に設定される。
【0239】
Resetプロパティは、どのようにフィールドの値がリセットされるかを特定する。デフォルトがValueである。これは、フィールドの値がリセットされる場合、フィールドの値がその初期値に設定されることを意味する。フィールドの値がゼロ(None)に設定された場合、その値をリセットするために何も行われない(他の設定がまだインプリメントされていない)。
【0240】
(評価関数)
評価関数のインプリメンテーションは、インプリメンテーションのプロパティを用いて特定される、このコードは、インライン(Codeプロパティを用いて)またはファイルにおいて(Fileプロパティを用いて)特定され得る。このファイルのプロパティが使用された場合、ファイル名はオプションである、名前が特定されない場合、この名前が自動的に作成される。ファイルが存在しない場合、このファイルが自動的に作成される。
【0241】
評価関数によって導き出された追加のコードは、ODLプログラムにおいて識別される必要はない。このコードは、ランタイム時にアクセス可能なライブラリにおいて存在する必要があるのみである。
【0242】
(コネクタ(Connector))
コネクタは、コネクタ(Connector)プロパティを用いて明記される。コネクタは、典型的には、ベースオブジェクトとして用いられることを意図されたブロックで用いられる。コネクタの目的は、ベースブロックのデータフロープログラムの正しい場所に拡張部分を自動的にコネクトすることを可能にすることである。
【0243】
データは、コネクタを通ってフローする。コネクタは、データのストリームを露出して、その結果、拡張部分は、データのストリーム内にタップ(tap)し得る。データは、データが直列接続を用いてコネクタを通るときに修正され得る。(以下の一連のセクションを参照)
(内部ブロック(Internal Block))
オブジェクトのインプリメンテーションの一部を作り上げる内部ブロックは、ブロック(Block)オペレータを用いて明記される。フィールドと同様に、用いるオブジェクトのタイプを述べるために、タイプスペシファイア(specifier)が必要とされる。
【0244】
(関数(Function))
関数は、関数(Function)オペレータを用いて明記される。
【0245】
現在、C++関数のみが支援され、それらは、C++コードでのみ呼出可能である。
【0246】
関数は、名前、言語、戻り値、任意の数のパラメータを有する。C++関数にとって、パラメータの順序は、また、明記される必要がある。
【0247】
言語は、言語(Language)オペレータを用いて明記される。デフォルト値は存在しないが、それぞれの関数は、言語プロパティを有する必要がある。支援言語は、C++である。
【0248】
戻り値は、戻り(Return)オペレータを用いて明記される。パラメータは、パラメータ(Parameter)オペレータを用いて明記される。全てのパラメータおよび戻り値は、タイプのスペシファイアを有する必要がある。パラメータは、C++関数のために名前を付けられる必要があり、戻り値は、名前を付けられなくてもよい。パラメータの順序は、パラメータオーダ(ParameterOrder)オペレータを用いて明記される。
【0249】
例:
この関数は、二つの整数パラメータを取り、浮動小数の値を戻す。
(Function (Name FixedToFloat)(Language C++)
(Return (Type iFloat))
(Parameter (Name HighBits)(Type iInt))
(Parameter (Name LowBits)(Type iInt))
(ParameterOrder HighBits LowBits)
(Implementation (File))
(コネクション(Connections))
内部ブロックまたはコネクタ間の「ワイヤ」は、コネクション(Connection)プロパティを用いて明記される。ワイヤのプロパティ(ワイヤが何にコネクトするか)は、フロム(From)およびトゥー(To)プロパティを用いて明記される。
【0250】
フロム(From)プロパティは、ワイヤの入力端部がコネクトされる場所を明記する。データは、ワイヤのこの端部内にフローする。トゥー(To)プロパティは、ワイヤの出力端部がコネクトされる場所を明記する。データは、ワイヤのこの端部からフローする。
【0251】
フロム(From)およびトゥー(To)プロパティは、それぞれ、コネクトされるべきインタフェース要素の位置を明記する。それらは、互いに互換性が必要である。すなわち、それらは、同じデータタイプを運搬する必要がある。それらは、それぞれ、一つ、または、二つのいずれかのパラメータを有する。一つのパラメータのみが存在する場合、そのパラメータは、インタフェース要素(入力または出力)、あるいは、コネクションが属するブロックのコネクタを識別する。二つのパラメータが存在する場合、それらは、内部ブロックのインタフェース要素を明記する。第1のパラメータは、内部ブロックの名前であり、第2のパラメータは、インタフェースの名前である。
【0252】
コネクタが拡張部分内のコネクションのフロムまたはトゥープロパティに識別される場合、コネクタは、コネクタが拡張部分またはベースブロックのコネクタを識別するかどうかを明記する余分な要素を含む。これは、識別子の一般的なフォームに「(ベース(basis))」または「(拡張部分(extension))」のいずれかを追加することによってなされる。以下の最後の例を参照。
【0253】
例:
この接続は、ブロックの左の入力を内部ブロックAのX入力に結ぶ:
(Connection(From ’Left)(To ’A ’X))
このコネクションは、内部ブロックAのR出力を内部コネクタBの入力に結ぶ:
(Connection(From ’A ’R)(To ’B))
このコネクションは、内部ブロックCのRGB出力をブロックのカラー(Color)出力に結ぶ:
(Connection(From ’C ’RGB)(To ’Color))
このコネクションは、拡張部分内に存在する。このコネクションは、拡張部分の内部ブロックDのサム(Sum)出力をベースブロックのコネクタCに結ぶ
(Connection(From ’D ’Sum)(To((Name ’C)(Basis))))
(直列接続(Series Connection))
直列接続は、コネクタと結び付いて用いられるコネクションの特定のタイプである。
【0254】
コネクタを通ってフローするデータに計算を実行することを望む場合、シリーズプロパティを用いて計算を明記し得る。計算は、コネクタのデータのフロー内に挿入され、その結果、コネクタ内にフローするデータが処理され、コネクタの出力で新規のデータを生成している。複数のシリーズ要素を用いて、任意の数の独立した計算(すなわち、互いの知識を有しない計算)は、コネクタのシリーズに挿入され得る。
【0255】
それらが挿入される順序は、それがまだ利用可能ではない情報(例えば、入力されたブロックのパフォーマンスの特徴)に依存し得るために、現在明記されない。
【0256】
シリーズプロパティは、3つの別個の要素を含む。
1.計算が実行されるべき場所でコネクタを識別するコネクタ(Connector)要素
2.新規のコネクタデータが由来する場所でデータソースを識別するフロム(From)要素
3.コネクタデータが与えられる場所内への入力を明記する任意の数のトゥー(To)要素
(ベース(Basis))
ベース(Basis)オペレータによって、別のオブジェクトの要素が得られ得る。ベース要素は、プロパティの従来の継承のために、拡張要素のための基礎として用いられ得る。
【0257】
(プロパティの従来の継承(Traditional Inheritance of Properties))
ベースオペレータによってオブジェクトが別のオブジェクトのプロパティを得ることができるために、ベースオペレータは、いくつかのオブジェクトがプロパティのセットを共有するときに用いられ得る。共有されたプロパティは、オブジェクトにおいて定義され、オブジェクトは、プロパティを共有する全てのオブジェクトにおいてベースとして用いられる。
【0258】
この目的のためのベースとして用いるために、ベース要素を名付けない。これにより、サブオブジェクトは、同じ名前を用いるベースオブジェクト要素を参照し得る。衝突を避けるために、ベース要素が名付けられると、ベースオブジェクト要素は、それらがサブオブジェクトによって得られるとき、余分な識別子を与えられる。
【0259】
注記:ベースの使用は、抽象化(abstraction)を形成しない。これは、ポリモーフィズム(polymorphism)を可能にしない。ポリモーフィズムを可能にする従来の継承は、支援されない。代わりに、抽象化が、ブロックインタフェースの使用を通して生成される。
【0260】
(拡張部分の土台(Foundation for Extensions))
拡張要素で拡張する目的のためにベースを用いるために、ベース要素は、ベースオブジェクト要素が拡張オブジェクトのいくつかとの衝突を避けるように名前を与えられる必要がある。
【0261】
(拡張部分(Extensions))
拡張部分(Extension)オペレータによって別のオブジェクトの要素が既存のコネクタまで得られ、かつ、フックされることが可能である。拡張部分のコネクション要素において名前を付けられるコネクタが存在しない場合、エラーが生じる。コネクタは、典型的にベース要素によって供給される。
【0262】
注記:入力および出力が拡張部分において支援されるべきかどうか明らかではない。この時点において、拡張部分は、入力または出力を含むべきではない。
【0263】
(シンタックスの要旨)
【0264】
【数1】
演算子は、現在、すべてのオブジェクトを定義するために用いられる。これは、おそらく、ただちに
【0265】
【数2】
に変更される。
【0266】
【数3】
(拡張子(Extension)シンタックス)
拡張子は、入力および出力以外のエレメントであるオブジェクトである。このコネクションは、この拡張子が用いられるオブジェクト内のコネクタを参照し得、コネクタが自動的にオブジェクトに接続されることを可能にする。この理由で、拡張オブジェクトは、孤立して用いられ得ない。オブジェクトが参照するこれらのコネクタは、外部に、通常、基底エレメントを介して供給されなければならない。
【0267】
コネクタが、拡張子内の接続のフロム(From)プロパティまたはトゥ(To)プロパティで識別される場合、コネクタは、コネクタを拡張子内で識別しているのか、またはこのコネクタが属するオブジェクト内で識別しているのかを特定するための追加的エレメントを含まなければならない。これは、識別子の一般的な形態の「(basis)」または「(extension)」のどちらかが付加されることによってなされる。
【0268】
次節における例を参照されたい。
【0269】
(5.データフローオブジェクトの例)
(単純なブロック)
(iAdder)
図21に示されるブロックは、2入力加算器であり、iAdderと称される。この加算器は、単純なブロックである。なぜなら、この加算器の出力は、評価関数によって計算されるからである。2つの整数入力は、一緒に加算され、出力を生成する。
【0270】
ODLコードは、以下に示される。
【0271】
【数4】
ブロックの評価関数のインプリメンテーションが以下に示される。これは、別個のファイル内に常駐する。
【0272】
_sumField = _left + _right;
(複合ブロック)
(iAdder3)
図22に示されるブロックは、3入力加算器であり、iAdder3と称される。これは、2つのiAdderブロックを用いてインプリメントされる。
【0273】
ODLコードは、以下に示される。
【0274】
【数5】
(基底(Basis)および拡張(Extension)オブジェクト)
この例は、3つの異なったオブジェクトを含む。これらは、基底ブロックとして用いられる複合ブロック、この基底ブロックを拡張する拡張オブジェクト、および基底および拡張エレメントを用いることによって、これらの2つを組み合わせるブロックである。
【0275】
(iFormula)
図25に示される、この複合ブロックは、2つのコネクタ、mおよびgを含み、これらのコネクタに拡張子が接続され得る。
【0276】
【数6】
(iMyExtention)
この拡張子の接続は、iFormulaブロック内のコネクタを参照し、従って、このブロックを拡張するために用いられ得る。これは、図24に示され、コネクタm内へ入り込み(tap into)、コネクタgと直列で挿入される単純なプログラムを含む。
【0277】
【数7】
(iMyFormula)
このブロックは、iFormulaブロックを基底ブロックとして用いる。この基底ブロックは、iMyExtension拡張を用いてそれを拡張する。
【0278】
【数8】
(IV.結論)
本発明の種々の実施形態が上に記載されたが、これらの実施形態は、限定としてではなく、例示として提供されたことが理解されるべきである。本発明の主旨および範囲から逸脱することなく、詳細な種々の変更が成され得ることが当業者に明らかである。従って、本発明は、上述の例示の実施形態のいずれかによって限定されるべきでないが、上記の請求項およびその同等物によってのみ定義されるべきである。
【図面の簡単な説明】
【図1】
図1は、伝統的な画像生成装置の要素を示す。
【図2】
図2は、ワークステーション画像生成装置、所与のランタイムソフトウエアの要素を示す。
【図3A】
図3Aは、Playstation2のプラットフォームへの顧客専用化されたゲーム開発への従来の階層化アプローチを示す。
【図3B】
図3Bは、パーソナルコンピュータのプラットフォームへの顧客専用化されたゲーム開発への従来の階層化アプローチを示す。
【図4】
図4は、本発明の実施形態における、ゲーム内容を開発するためのプロセスを示す。
【図5】
図5は、本発明の実施形態における、GAPの構造を示す。
【図6】
図6は、本発明の実施形態における、ブロック内部構造の例を示す。
【図7】
図7は、本発明の実施形態における、構成要素の構造の例を示す。
【図8】
図8は、本発明の実施形態における、フレームワークの段階間のブロックの分布を示す。
【図9】
図9は、本発明の実施形態における、1つのスレッドプロセスで実行されるステージの例を示す。
【図10】
図10は、本発明の実施形態における、1つのARKスレッドマネージャおよびこの実行順序リストを示す。
【図11】
図11は、本発明の実施形態における、実行順序リストから成る多数のARKスレッドの同時実行を示す。
【図12】
図12は、本発明の実施形態における、GAPアーキテクチャを用いて開発された地球画像の例を示す。
【図13A】
図13Aは、本発明の実施形態における、多数のハードウエアプラットフォームにまたがって、GAPによって支援される実存機能のソフトウエア開発者の用途を示す。
【図13B】
図13Bは、本発明の実施形態における、多数のハードウエアプラットフォームにまたがって、ソフトウエア開発者によって追加されかつGAPによって支援されるアプリケーションの特定の機能の用途を示す。
【図14A】
図14Aは、本発明の実施形態における、多数のゲームに対して、ハードウエアプラットフォームの利用を可能にしたGAPによって支援される実存機能のハードウエア開発者の用途を示す。
【図14B】
図14Bは、本発明の実施形態における、ハードウエア開発者によって追加されかつGAPによって支援される、ハードウエアの特定の機能のハードウエア開発者の用途を示し、これらは、多数のゲームに対して、これらの機能の利用を可能にする。
【図15】
図15は、本発明の実施形態における、シェーダのセットを示し、そしてここでは特定のシェーダがランタイムの時に選ばれる。
【図16A】
図16Aは、本発明の実施形態における、PlayStation2に適応したGAPアーキテクチャの実現例を示す。
【図16B】
図16Bは、本発明の実施形態における、OpenGLを実行させているパーソナルコンピュータプラットフォームに適応したGAPアーキテクチャの実現例を示す。
【図16C】
図16Cは、本発明の実施形態における、Direct3Dを実行させているパーソナルコンピュータプラットフォームに適応したGAPアーキテクチャの実現例を示し、そしてそこでは、パーソナルコンピュータプラットフォームは、3dfxおよびNvidiaグラフィックスハードウエアを含み、そしてDirect3Dマイクロコードは拡張を含む。
【図16D】
図16Dは、本発明の実施形態における、PlayStation2のプラットフォームに適応したGAPアーキテクチャの実現例を示し、そしてそこでPSX2マイクロコードは拡張を含む。
【図16E】
図16Eは、本発明の実施形態における、Nintendo Dolphinプラットフォームに適応したGAPアーキテクチャの実現例を示す。
【図17】
図17は、本発明の実施形態における、ある例のゲームのプロセスフローのゲームアプリケーションのテンプレートを示す。
【図18】
図18は、本発明の論理的な図を示し、これは、アプリケーショングラフおよびシーングラフに関連した、ユーザ機能および標準のGAP機能を含む。
【図19】
図19は、本発明の実施形態における、別の構成要素の実現を示し、そしてこれは、関連のアプリケーションの条件および供給されるリソースを示す。
【図20】
図20は、本発明の実施形態における、フレームワークアプリケーションの例を示す。
【図21】
図21は、本発明の実施形態における、アプリケーション開発モデルに従って接続するブロックおよびグラフの例を示す。
【図22】
図22は、本発明の実施形態における、アプリケーション開発モデルに従って接続するブロックおよびグラフの例を示す。
【図23】
図23は、本発明の実施形態における、アプリケーション開発モデルに従って接続するブロックおよびグラフの例を示す。
【図24】
図24は、本発明の実施形態における、アプリケーション開発モデルに従って接続するブロックおよびグラフの例を示す。
【図25】
図25は、本発明の実施形態における、アプリケーション開発モデルに従って接続するブロックおよびグラフの例を示す。
【図26】
図26は、本発明の実施形態における、アプリケーション開発モデルに従って接続するブロックおよびグラフの例を示す。
Claims (15)
- ランタイムプラットフォームに依存しないコンテンツの開発をサポートするための方法であって、
コンテンツを定義するプロセッシングブロックを格納するステップと、
該格納されたプロセッシングブロックと該格納されたプロセッシングブロック間のデータコネクティビティとの同一性を表現するアプリケーショングラフを格納するステップであって、該アプリケーショングラフは、ランタイムプラットフォーム上で適切なプロセッシングブロックを実行するためにランタイムにグラフィカルアプリケーションプラットフォームによって横断され得る、ステップと
を包含する方法。 - 前記コンテンツは、ゲームコンテンツを含む、請求項1に記載の方法。
- 複数のハードウェアプラットフォームに依存しないコンテンツの開発をサポートするための方法であって、
複数のハードウェアプラットフォームに依存しないコンテンツを定義するプロセッシングブロックを格納するステップと、
標的のハードウェアプラットフォームを複数のハードウェアプラットフォームから選択するステップと、
該選択された標的のハードウェアプラットフォームに基づいて該格納されたプロセッシングブロックと、該格納されたプロセッシングブロック間のデータコネクティビティとの同一性を表現するアプリケーショングラフを格納するステップと、
ランタイムに該アプリケーショングラフを横断させるステップであって、該選択された標的ハードウェアプラットフォーム上で適切なプロセッシングブロックを生成することを含む、ステップと
を包含する、方法。 - 前記コンテンツは、ゲームコンテンツを含み、前記複数のハードウェアプラットフォームは、ゲームコンソールプラットフォームおよびパーソナルコンピュータプラットフォームの少なくとも一つを含む、請求項3に記載の方法。
- ゲーム開発およびランタイムのシステムであって、
ゲームアプリケーションが複数のハードウェアプラットフォームの任意上を実行することを可能にするグラフィカルアプリケーションプラットフォームを含む、システム。 - 前記ゲームアプリケーションが標的のハードウェアプラットフォーム上を実行し得るように、開発者がアプリケーショングラフを定義することを可能にするオブジェクト定義ツールをさらに含む、請求項5に記載のシステム。
- 前記オブジェクト定義ツールは、開発者がオブジェクト、オブジェクトエレメント、および接続を定義することをさらに可能にする、請求項6に記載のシステム。
- アプリケーションソフトウェアおよびハードウェアプラットフォームの少なくとも一つにおいて独立して提供される能力を達成するためのグラフィカルアプリケーションプラットフォームであって、
アプリケーション実時間カーネル(ARK)と、
実行可能な論理ブロックとしてインプリメントされる複数の標準機能と、
データフローを該ブロック間にインプリメントする該ブロック間の接続と
を含み、
アプリケーションソフトウェアおよび該ハードウェアプラットフォームの少なくとも一つの能力は、追加的に対応するブロックおよび接続を追加することによってモジュール的にインプリメントされ得る、グラフィカルアプリケーションプラットフォーム。 - 前記ARKは、少なくとも一つの中央プロセッシング装置上で実行する少なくとも一つのARKスレッドのそれぞれにおいて実行されるように前記ブロックを列挙するスケジューリングによるブロックを呼び出す論理であって、該論理は、ブロックを動的にロードおよびアンロードし、ブロックの実行をモニタし、および、スレッド管理、メモリ共有、相互排他、および同期化を容易にする、論理を含む、請求項8に記載のグラフィカルアプリケーションプラットフォーム。
- 前記追加のブロックは、追加機能をインプリメントし、該追加機能は、マーケット指向の機能を含む、請求項8に記載のグラフィカルアプリケーションプラットフォーム。
- 前記追加のブロックは、追加機能をインプリメントし、該追加機能は、アプリケーション特有の機能を含む、請求項8に記載のグラフィカルアプリケーションプラットフォーム。
- 前記標準および追加のブロックは、コンポーネントに組織化され、各コンポーネントは、代替の機能インプリメンテーションを表わすブロックを含む、請求項8に記載のグラフィカルアプリケーションプラットフォーム。
- 前記代替のインプリメンテーションのそれぞれは、
a)該代替のインプリメンテーションに対応するブロックと、
b)該代替のインプリメンテーションによって必要とされるリソースの識別と、
c)該代替のインプリメンテーションによって提供されるリソースの識別と
を含む、請求項12に記載のグラフィカルアプリケーションプラットフォーム。 - 所定のハードウェアプラットフォームに関してグラフィックスアプリケーションを予め処理する方法であって、
a)一組の代替の機能インプリメンテーションの間から選択するステップと、
b)該選択されたインプリメンテーションに対応して、少なくとも一つのブロックを実行フェーズにマッピングするステップと、
c)該実行フェーズを実行ステージにマッピングするステップと、
d)該実行ステージに対応するブロック実行オーダーリストを生成するステップと、
e)該実行ステージを、該ステージの実行の管理のためのアプリケーション実時間カーネルに提示するステップと
を包含する、方法。 - 前記ステップa)は、各代替のインプリメンテーションのリソース要求が、このようなリソース要求における変動のコストおよび利益と共に考慮されたネゴシエーションプロセスを包含し、これにより、インプリメンテーションの選択が可能になる、請求項14に記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US22354700P | 2000-08-04 | 2000-08-04 | |
PCT/US2000/032160 WO2002013002A2 (en) | 2000-08-04 | 2000-11-28 | Development of graphics hardware and software |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004506262A true JP2004506262A (ja) | 2004-02-26 |
Family
ID=22836976
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002517620A Pending JP2004506262A (ja) | 2000-08-04 | 2000-11-28 | グラフィックハードウェアおよびソフトウェアの開発 |
Country Status (3)
Country | Link |
---|---|
US (2) | US7103873B2 (ja) |
JP (1) | JP2004506262A (ja) |
WO (1) | WO2002013002A2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006526204A (ja) * | 2003-03-13 | 2006-11-16 | ディーアールエム テクノロジーズ、エルエルシー | セキュアストリーミングコンテナ |
Families Citing this family (135)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3763937B2 (ja) * | 1996-06-28 | 2006-04-05 | 富士通株式会社 | オブジェクト指向プログラミング装置、およびオブジェクト結合プログラム記憶媒体 |
US6718533B1 (en) * | 1999-02-26 | 2004-04-06 | Real-Time Innovations, Inc. | Method for building a real-time control system with mode and logical rate |
US7219101B2 (en) * | 2000-08-14 | 2007-05-15 | Dulcian, Inc. | Method and computer system for customizing computer applications by storing the customization specification as data in a database |
US6836884B1 (en) * | 2001-06-04 | 2004-12-28 | Microsoft Corporation | Method and system for editing software programs |
US6981250B1 (en) * | 2001-07-05 | 2005-12-27 | Microsoft Corporation | System and methods for providing versioning of software components in a computer programming language |
US8001523B1 (en) * | 2001-07-05 | 2011-08-16 | Microsoft Corporation | System and methods for implementing an explicit interface member in a computer programming language |
US6919891B2 (en) | 2001-10-18 | 2005-07-19 | Microsoft Corporation | Generic parameterization for a scene graph |
US7443401B2 (en) * | 2001-10-18 | 2008-10-28 | Microsoft Corporation | Multiple-level graphics processing with animation interval generation |
US7619633B2 (en) * | 2002-06-27 | 2009-11-17 | Microsoft Corporation | Intelligent caching data structure for immediate mode graphics |
US7064766B2 (en) | 2001-10-18 | 2006-06-20 | Microsoft Corporation | Intelligent caching data structure for immediate mode graphics |
US7161599B2 (en) * | 2001-10-18 | 2007-01-09 | Microsoft Corporation | Multiple-level graphics processing system and method |
AU2003216472A1 (en) * | 2002-03-01 | 2003-09-16 | Green Border Technologies | Method and system for assured denotation of application semantics |
US7320035B2 (en) * | 2002-03-01 | 2008-01-15 | Sun Microsystems, Inc. | Object mutation determination for incremental state saves |
US6863612B2 (en) * | 2002-09-03 | 2005-03-08 | Bidamic Inc. | System and method for interactive on-line gaming |
US7114148B2 (en) * | 2002-09-30 | 2006-09-26 | Microsoft Corporation | Runtime services for network software platform |
US7486294B2 (en) * | 2003-03-27 | 2009-02-03 | Microsoft Corporation | Vector graphics element-based model, application programming interface, and markup language |
US7088374B2 (en) * | 2003-03-27 | 2006-08-08 | Microsoft Corporation | System and method for managing visual structure, timing, and animation in a graphics processing system |
US7417645B2 (en) | 2003-03-27 | 2008-08-26 | Microsoft Corporation | Markup language and object model for vector graphics |
US7466315B2 (en) * | 2003-03-27 | 2008-12-16 | Microsoft Corporation | Visual and scene graph interfaces |
US7511718B2 (en) * | 2003-10-23 | 2009-03-31 | Microsoft Corporation | Media integration layer |
CA2454290C (en) * | 2003-12-29 | 2013-05-21 | Ibm Canada Limited-Ibm Canada Limitee | Graphical user interface (gui) script generation and documentation |
US7383531B2 (en) * | 2004-01-29 | 2008-06-03 | Microsoft Corporation | Extensible productivity tool for exposing common classes in application building |
US20050223378A1 (en) * | 2004-03-31 | 2005-10-06 | Mehmet Musa | Method and apparatus for enhancing computer application performance |
JP4285307B2 (ja) * | 2004-04-02 | 2009-06-24 | 株式会社日立製作所 | データ処理装置およびその方法 |
EP2487599A1 (en) * | 2004-05-04 | 2012-08-15 | Boston Consulting Group, Inc. | Method and apparatus for selecting, analyzing and visualizing related database records as a network |
JP4843208B2 (ja) * | 2004-09-30 | 2011-12-21 | 株式会社東芝 | デジタルコンテンツ編集装置、デジタルコンテンツ編集方法、デジタルコンテンツ編集プログラムおよびデジタルコンテンツ編集プログラムを記録した記録媒体 |
US8275793B2 (en) * | 2005-04-29 | 2012-09-25 | Microsoft Corporation | Transaction transforms |
US8418132B2 (en) * | 2005-04-29 | 2013-04-09 | Microsoft Corporation | Application description language |
US7886269B2 (en) * | 2005-04-29 | 2011-02-08 | Microsoft Corporation | XML application framework |
US20060245096A1 (en) * | 2005-04-29 | 2006-11-02 | Microsoft Corporation | Application framework phasing model |
US8132148B2 (en) | 2005-04-29 | 2012-03-06 | Microsoft Corporation | XML application framework |
US20060274088A1 (en) * | 2005-06-04 | 2006-12-07 | Network I/O, Inc. | Method for drawing graphics in a web browser or web application |
US7818735B1 (en) * | 2005-06-09 | 2010-10-19 | Emc Corporation | System and method for enabling access and use of software installed on a data storage system |
US8402426B2 (en) | 2005-12-30 | 2013-03-19 | Sap Ag | Architectural design for make to stock application software |
US8316344B2 (en) | 2005-12-30 | 2012-11-20 | Sap Ag | Software model deployment units |
US8326703B2 (en) | 2005-12-30 | 2012-12-04 | Sap Ag | Architectural design for product catalog management application software |
US8448137B2 (en) | 2005-12-30 | 2013-05-21 | Sap Ag | Software model integration scenarios |
US8522194B2 (en) | 2005-12-30 | 2013-08-27 | Sap Ag | Software modeling |
US8396731B2 (en) | 2005-12-30 | 2013-03-12 | Sap Ag | Architectural design for service procurement application software |
US8676617B2 (en) | 2005-12-30 | 2014-03-18 | Sap Ag | Architectural design for self-service procurement application software |
US8380553B2 (en) | 2005-12-30 | 2013-02-19 | Sap Ag | Architectural design for plan-driven procurement application software |
US8321831B2 (en) | 2005-12-30 | 2012-11-27 | Sap Ag | Architectural design for internal projects application software |
US8370794B2 (en) | 2005-12-30 | 2013-02-05 | Sap Ag | Software model process component |
JP4564464B2 (ja) * | 2006-01-05 | 2010-10-20 | 株式会社東芝 | デジタルコンテンツ再生装置、方法およびプログラム |
US7627854B2 (en) * | 2006-01-12 | 2009-12-01 | International Business Machines Corporation | Graphical aid for generating object setup scripts |
US7626591B2 (en) * | 2006-01-24 | 2009-12-01 | D & S Consultants, Inc. | System and method for asynchronous continuous-level-of-detail texture mapping for large-scale terrain rendering |
US7459624B2 (en) | 2006-03-29 | 2008-12-02 | Harmonix Music Systems, Inc. | Game controller simulating a musical instrument |
US8326702B2 (en) | 2006-03-30 | 2012-12-04 | Sap Ag | Providing supplier relationship management software application as enterprise services |
US8438119B2 (en) | 2006-03-30 | 2013-05-07 | Sap Ag | Foundation layer for services based enterprise software architecture |
US8396749B2 (en) | 2006-03-30 | 2013-03-12 | Sap Ag | Providing customer relationship management application as enterprise services |
US8538864B2 (en) | 2006-03-30 | 2013-09-17 | Sap Ag | Providing payment software application as enterprise services |
US8442850B2 (en) | 2006-03-30 | 2013-05-14 | Sap Ag | Providing accounting software application as enterprise services |
US8321832B2 (en) * | 2006-03-31 | 2012-11-27 | Sap Ag | Composite application modeling |
CN101059760B (zh) * | 2006-04-20 | 2014-05-07 | 意法半导体研发(上海)有限公司 | Opengl到opengl│es翻译器和opengl│es仿真器 |
US20080005332A1 (en) * | 2006-06-08 | 2008-01-03 | Georgia Tech Research Corporation | Method for Opportunistic Computing |
US20080107124A1 (en) * | 2006-11-06 | 2008-05-08 | Jordi Ros-Giralt | System and method for supporting mobility and multipath packet delivery in ip communications and computer networks across nat and firewall boxes |
US7986867B2 (en) * | 2007-01-26 | 2011-07-26 | Myspace, Inc. | Video downloading and scrubbing system and method |
US8907193B2 (en) | 2007-02-20 | 2014-12-09 | Ubisoft Entertainment | Instrument game system and method |
US20080200224A1 (en) | 2007-02-20 | 2008-08-21 | Gametank Inc. | Instrument Game System and Method |
US7992130B2 (en) * | 2007-05-07 | 2011-08-02 | Microsoft Corporation | Class-based object-oriented features in class-less script language |
US20080295013A1 (en) * | 2007-05-21 | 2008-11-27 | Justsystems Evans Research, Inc. | Method and apparatus for performing semantically informed text operations |
US20080294426A1 (en) * | 2007-05-21 | 2008-11-27 | Justsystems Evans Research, Inc. | Method and apparatus for anchoring expressions based on an ontological model of semantic information |
US20080294425A1 (en) * | 2007-05-21 | 2008-11-27 | Justsystems Evans Research, Inc. | Method and apparatus for performing semantic update and replace operations |
US20080294427A1 (en) * | 2007-05-21 | 2008-11-27 | Justsystems Evans Research, Inc. | Method and apparatus for performing a semantically informed merge operation |
US8678896B2 (en) | 2007-06-14 | 2014-03-25 | Harmonix Music Systems, Inc. | Systems and methods for asynchronous band interaction in a rhythm action game |
US20090075711A1 (en) | 2007-06-14 | 2009-03-19 | Eric Brosius | Systems and methods for providing a vocal experience for a player of a rhythm action game |
US8181153B2 (en) * | 2007-06-29 | 2012-05-15 | Accenture Global Services Limited | Refactoring monolithic applications into dynamically reconfigurable applications |
US8484611B2 (en) * | 2007-10-15 | 2013-07-09 | International Business Machines Corporation | Method and system for simplified assembly of information processing applications |
US8392878B2 (en) * | 2007-10-31 | 2013-03-05 | National Instruments Corporation | In-place structure in a graphical program |
US8447657B2 (en) | 2007-12-31 | 2013-05-21 | Sap Ag | Architectural design for service procurement application software |
US8312426B2 (en) * | 2008-01-07 | 2012-11-13 | International Business Machines Corporation | Method and system for simplified service composition in web environment |
US8239828B2 (en) * | 2008-01-08 | 2012-08-07 | International Business Machines Corporation | Method of recovering from software failures using replanning |
US8245122B2 (en) * | 2008-01-08 | 2012-08-14 | International Business Machines Corporation | Method and system for modeling user requests, applications and components used in dynamic application assembly |
US8275963B2 (en) * | 2008-02-01 | 2012-09-25 | International Business Machines Corporation | Asynchronous memory move across physical nodes with dual-sided communication |
US8356151B2 (en) * | 2008-02-01 | 2013-01-15 | International Business Machines Corporation | Reporting of partially performed memory move |
US8245004B2 (en) * | 2008-02-01 | 2012-08-14 | International Business Machines Corporation | Mechanisms for communicating with an asynchronous memory mover to perform AMM operations |
US8327101B2 (en) * | 2008-02-01 | 2012-12-04 | International Business Machines Corporation | Cache management during asynchronous memory move operations |
US8640149B2 (en) | 2008-03-26 | 2014-01-28 | International Business Machines Corporation | Method and apparatus for dynamic web service composition and invocation |
US8949140B2 (en) | 2008-04-21 | 2015-02-03 | International Business Machines Corporation | Method and system for dynamic software reconfiguration triggered by component- or system- initiated events |
US8898624B2 (en) * | 2008-05-05 | 2014-11-25 | International Business Machines Corporation | Method and apparatus for simplified assembly of parametric information processing applications |
US8663013B2 (en) | 2008-07-08 | 2014-03-04 | Harmonix Music Systems, Inc. | Systems and methods for simulating a rock band experience |
US20100037169A1 (en) * | 2008-08-08 | 2010-02-11 | Eastman Kodak Company | Display of system operating status in a multi-node system |
US8307353B2 (en) * | 2008-08-12 | 2012-11-06 | Oracle America, Inc. | Cross-domain inlining in a system virtual machine |
US8380549B2 (en) | 2008-09-18 | 2013-02-19 | Sap Ag | Architectural design for embedded support application software |
US8374896B2 (en) | 2008-09-18 | 2013-02-12 | Sap Ag | Architectural design for opportunity management application software |
US8401928B2 (en) * | 2008-09-18 | 2013-03-19 | Sap Ag | Providing supplier relationship management software application as enterprise services |
US8352338B2 (en) | 2008-09-18 | 2013-01-08 | Sap Ag | Architectural design for time recording application software |
US8818884B2 (en) | 2008-09-18 | 2014-08-26 | Sap Ag | Architectural design for customer returns handling application software |
US8386325B2 (en) | 2008-09-18 | 2013-02-26 | Sap Ag | Architectural design for plan-driven procurement application software |
US8359218B2 (en) | 2008-09-18 | 2013-01-22 | Sap Ag | Computer readable medium for implementing supply chain control using service-oriented methodology |
US8595077B2 (en) | 2008-09-18 | 2013-11-26 | Sap Ag | Architectural design for service request and order management application software |
WO2010059994A2 (en) | 2008-11-21 | 2010-05-27 | Poptank Studios, Inc. | Interactive guitar game designed for learning to play the guitar |
US8738476B2 (en) | 2008-12-03 | 2014-05-27 | Sap Ag | Architectural design for selling standardized services application software |
US8311904B2 (en) | 2008-12-03 | 2012-11-13 | Sap Ag | Architectural design for intra-company stock transfer application software |
US8401908B2 (en) | 2008-12-03 | 2013-03-19 | Sap Ag | Architectural design for make-to-specification application software |
US8671035B2 (en) | 2008-12-11 | 2014-03-11 | Sap Ag | Providing payroll software application as enterprise services |
US8171337B2 (en) | 2009-03-30 | 2012-05-01 | The Boeing Company | Computer architectures using shared storage |
US8465366B2 (en) | 2009-05-29 | 2013-06-18 | Harmonix Music Systems, Inc. | Biasing a musical performance input to a part |
US8449360B2 (en) | 2009-05-29 | 2013-05-28 | Harmonix Music Systems, Inc. | Displaying song lyrics and vocal cues |
US8473900B2 (en) * | 2009-07-01 | 2013-06-25 | Advanced Micro Devices, Inc. | Combining classes referenced by immutable classes into a single synthetic class |
US9981193B2 (en) | 2009-10-27 | 2018-05-29 | Harmonix Music Systems, Inc. | Movement based recognition and evaluation |
EP2494432B1 (en) | 2009-10-27 | 2019-05-29 | Harmonix Music Systems, Inc. | Gesture-based user interface |
US8550908B2 (en) | 2010-03-16 | 2013-10-08 | Harmonix Music Systems, Inc. | Simulating musical instruments |
US9358456B1 (en) | 2010-06-11 | 2016-06-07 | Harmonix Music Systems, Inc. | Dance competition game |
US8562403B2 (en) | 2010-06-11 | 2013-10-22 | Harmonix Music Systems, Inc. | Prompting a player of a dance game |
CA2802348A1 (en) | 2010-06-11 | 2011-12-15 | Harmonix Music Systems, Inc. | Dance game and tutorial |
US9024166B2 (en) | 2010-09-09 | 2015-05-05 | Harmonix Music Systems, Inc. | Preventing subtractive track separation |
US9098462B1 (en) | 2010-09-14 | 2015-08-04 | The Boeing Company | Communications via shared memory |
US8966436B2 (en) * | 2010-10-15 | 2015-02-24 | Inxpo, Inc. | Systems and methods for providing and customizing a virtual event platform |
US9396001B2 (en) | 2010-11-08 | 2016-07-19 | Sony Corporation | Window management for an embedded system |
US9563971B2 (en) | 2011-09-09 | 2017-02-07 | Microsoft Technology Licensing, Llc | Composition system thread |
CN102394831A (zh) * | 2011-11-28 | 2012-03-28 | 杭州华三通信技术有限公司 | 基于虚拟机vm迁移的流量不中断方法和装置 |
US20130290977A1 (en) * | 2012-04-26 | 2013-10-31 | Siemens Aktiengesellschaft | Computational Resource Allocation System And A Method For Allocating Computational Resources For Executing A Scene Graph Based Application At Run Time |
US8752075B1 (en) * | 2013-02-26 | 2014-06-10 | Xilinx, Inc. | Method for data transport |
US9454630B1 (en) | 2013-02-26 | 2016-09-27 | Xilinx, Inc. | Graphical representation of integrated circuits |
US9286032B2 (en) | 2013-03-15 | 2016-03-15 | International Business Machines Corporation | Automated software composition |
US9323514B2 (en) | 2013-05-30 | 2016-04-26 | Microsoft Technology Licensing, Llc | Resource package indexing |
US9766870B2 (en) | 2013-05-30 | 2017-09-19 | Microsoft Technology Licensing, Llc | Bundle package generation |
US20140357357A1 (en) | 2013-05-30 | 2014-12-04 | Microsoft Corporation | Game bundle package |
US9594545B2 (en) * | 2013-06-05 | 2017-03-14 | Splunk Inc. | System for displaying notification dependencies between component instances |
US8756614B2 (en) | 2013-06-05 | 2014-06-17 | Splunk Inc. | Central registry for binding features using dynamic pointers |
US10061626B2 (en) | 2013-06-05 | 2018-08-28 | Splunk Inc. | Application framework providing a registry for mapping names to component instances |
US9195493B2 (en) | 2014-03-27 | 2015-11-24 | International Business Machines Corporation | Dispatching multiple threads in a computer |
US9213569B2 (en) | 2014-03-27 | 2015-12-15 | International Business Machines Corporation | Exiting multiple threads in a computer |
US9223574B2 (en) | 2014-03-27 | 2015-12-29 | International Business Machines Corporation | Start virtual execution instruction for dispatching multiple threads in a computer |
US9772867B2 (en) | 2014-03-27 | 2017-09-26 | International Business Machines Corporation | Control area for managing multiple threads in a computer |
US9547479B2 (en) * | 2015-03-30 | 2017-01-17 | Keysight Technologies, Inc. | Method for adapting GUI-based instrument components in a visual programming language |
US10719303B2 (en) * | 2015-06-07 | 2020-07-21 | Apple Inc. | Graphics engine and environment for encapsulating graphics libraries and hardware |
CN105608211B (zh) * | 2015-12-30 | 2019-02-22 | 北京超图软件股份有限公司 | 一种基于arm架构的gis系统 |
US10095489B1 (en) * | 2016-12-22 | 2018-10-09 | EMC IP Holding Company LLC | GUI-based application template for containerized application software development |
JP6855348B2 (ja) * | 2017-07-31 | 2021-04-07 | 株式会社ソニー・インタラクティブエンタテインメント | 情報処理装置およびダウンロード処理方法 |
US10887235B2 (en) | 2017-08-24 | 2021-01-05 | Google Llc | Method of executing a tuple graph program across a network |
US10599482B2 (en) | 2017-08-24 | 2020-03-24 | Google Llc | Method for intra-subgraph optimization in tuple graph programs |
US10642582B2 (en) * | 2017-08-24 | 2020-05-05 | Google Llc | System of type inference for tuple graph programs method of executing a tuple graph program across a network |
US11902105B2 (en) * | 2022-05-24 | 2024-02-13 | Red Hat, Inc. | Interactive graphical user interface for visualizing flow data in a programmable network switch |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998041952A1 (fr) * | 1997-03-18 | 1998-09-24 | Namco Ltd. | Generateur d'images et support de donnees |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0722140A4 (en) * | 1994-07-12 | 1997-03-05 | Jr East Japan Information Syst | METHOD FOR WRITING A PROGRAM FOR A SPECIFIC COMPANY |
US5630757A (en) * | 1994-11-29 | 1997-05-20 | Net Game Limited | Real-time multi-user game communication system using existing cable television infrastructure |
US6003061A (en) * | 1995-12-07 | 1999-12-14 | Microsoft Corporation | Method and system for scheduling the use of a computer system resource using a resource planner and a resource provider |
US5815415A (en) * | 1996-01-19 | 1998-09-29 | Bentley Systems, Incorporated | Computer system for portable persistent modeling |
US5857106A (en) * | 1996-05-31 | 1999-01-05 | Hewlett-Packard Company | Runtime processor detection and installation of highly tuned processor specific routines |
US5999728A (en) * | 1996-07-30 | 1999-12-07 | Sun Microsystems, Inc. | Method and apparatus for enhancing the portability of an object oriented interface among multiple platforms |
ATE264519T1 (de) * | 1997-02-21 | 2004-04-15 | Cit Alcatel | Verfahren zur erzeugung eines rechnerprogrammes |
US5999729A (en) * | 1997-03-06 | 1999-12-07 | Continuum Software, Inc. | System and method for developing computer programs for execution on parallel processing systems |
US6266053B1 (en) * | 1998-04-03 | 2001-07-24 | Synapix, Inc. | Time inheritance scene graph for representation of media content |
US6578197B1 (en) * | 1998-04-08 | 2003-06-10 | Silicon Graphics, Inc. | System and method for high-speed execution of graphics application programs including shading language instructions |
US6388668B1 (en) * | 1998-07-20 | 2002-05-14 | Microsoft Corporation | Functional animation including sprite tree generator and interpreter |
US6502238B1 (en) * | 1998-12-31 | 2002-12-31 | Honeywell International Inc. | System for constructing and distributing block-based fragments |
US6340977B1 (en) * | 1999-05-07 | 2002-01-22 | Philip Lui | System and method for dynamic assistance in software applications using behavior and host application models |
US6467052B1 (en) * | 1999-06-03 | 2002-10-15 | Microsoft Corporation | Method and apparatus for analyzing performance of data processing system |
US6823299B1 (en) * | 1999-07-09 | 2004-11-23 | Autodesk, Inc. | Modeling objects, systems, and simulations by establishing relationships in an event-driven graph in a computer implemented graphics system |
US6765571B2 (en) * | 1999-09-24 | 2004-07-20 | Sun Microsystems, Inc. | Using a master controller to manage threads and resources for scene-based rendering |
US7050955B1 (en) * | 1999-10-01 | 2006-05-23 | Immersion Corporation | System, method and data structure for simulated interaction with graphical objects |
IL159332A0 (en) * | 1999-10-31 | 2004-06-01 | Insyst Ltd | A knowledge-engineering protocol-suite |
-
2000
- 2000-11-28 JP JP2002517620A patent/JP2004506262A/ja active Pending
- 2000-11-28 WO PCT/US2000/032160 patent/WO2002013002A2/en active Application Filing
-
2001
- 2001-02-09 US US09/779,453 patent/US7103873B2/en not_active Expired - Lifetime
-
2006
- 2006-09-05 US US11/516,176 patent/US8713516B2/en not_active Expired - Lifetime
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998041952A1 (fr) * | 1997-03-18 | 1998-09-24 | Namco Ltd. | Generateur d'images et support de donnees |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006526204A (ja) * | 2003-03-13 | 2006-11-16 | ディーアールエム テクノロジーズ、エルエルシー | セキュアストリーミングコンテナ |
Also Published As
Publication number | Publication date |
---|---|
US8713516B2 (en) | 2014-04-29 |
US7103873B2 (en) | 2006-09-05 |
WO2002013002A2 (en) | 2002-02-14 |
WO2002013002A3 (en) | 2002-09-12 |
US20070234284A1 (en) | 2007-10-04 |
US20020038451A1 (en) | 2002-03-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7103873B2 (en) | System and method for leveraging independent innovation in entertainment content and graphics hardware | |
US8400444B2 (en) | Method to render a root-less scene graph with a user controlled order of rendering | |
US7676356B2 (en) | System, method and data structure for simulated interaction with graphical objects | |
Bricken et al. | The VEOS project | |
Junker | Pro OGRE 3D programming | |
Schroeder et al. | The design and implementation of an object-oriented toolkit for 3D graphics and visualization | |
Watsen et al. | Bamboo-a portable system for dynamically extensible, real-time, networked, virtual environments | |
US20020129340A1 (en) | Reconfigurable isomorphic software representations | |
US20100289804A1 (en) | System, mechanism, and apparatus for a customizable and extensible distributed rendering api | |
Bierbaum et al. | Software tools for virtual reality application development | |
Döllner et al. | Object‐oriented 3D Modelling, Animation and Interaction | |
Reiners | OpenSG: A scene graph system for flexible and efficient realtime rendering for virtual and augmented reality applications | |
Koved et al. | GROOP: An object-oriented toolkit for animated 3D graphics | |
Rajlich | An object-oriented approach to developing visualization tools portable across desktop and virtual environments | |
Salvadori et al. | Moka: Designing a simple scene graph library for cluster-based virtual reality systems | |
Arnaud et al. | Innovative software architecture for real-time image generation | |
Elmqvist | 3Dwm: A platform for research and development of three-dimensional user interfaces | |
Turner et al. | Metis–An Object‐Oriented Toolkit for Constructing Virtual Reality Applications | |
Blake et al. | Object-oriented graphics | |
Gobbetti et al. | Building an interactive 3D animation system | |
Leissler | A generic framework for the development of 3D information visualization applications | |
Kooper et al. | COOL-VR: a Virtual Environments Toolkit | |
Nuggehally | Java 3D for UCWaves | |
Allen | VR Juggler: a virtual platform for virtual reality application development | |
Tarlton | A declarative representation system for dynamic visualization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20071114 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110412 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20110711 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20110719 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20111012 |