(57)【特許請求の範囲】
【請求項１】
クライアントに接続されるコンピュータにおいて実行される方法であって、
複数のプリミティブのバーテックスデータ及びテクスチャデータを含むグラフィックスデータを、メモリに記憶するステップと、
前記メモリに記憶した前記グラフィックスデータと前記クライアントに前に送信したグラフィックスデータとを比較して、前記グラフィックスデータの少なくとも一部分が変化したと判定し、前記バーテックスデータの少なくとも一部分が前記クライアントに送信されていないと判定するステップと、
前記の変化したグラフィックスデータの一部分を圧縮するステップと、
前記の圧縮したグラフィックスデータの一部分を前記クライアントに送信するステップと
を含み、
前記の圧縮に先立って、前記グラフィックスデータに対してフラグを設定することであって、前記グラフィックスデータの前記バーテックスデータに非可逆圧縮が許容されるかどうか、又は前記メモリ内の特定のページにおけるテクスチャデータに非可逆圧縮が許容されるかどうかを示すフラグを設定し、
前記フラグに基づいて、前記の圧縮を実行するのに適切なコンプレッサを選択する、方法。
【請求項２】
前記バーテックスデータの少なくとも一部分が前記クライアントに送信されていないと判定することに先立って、ユーザースペースアプリケーションが所定の範囲より大きい範囲のメモリアドレスを要求していると判定することをさらに含む、請求項１に記載の方法。
【請求項３】
前記の圧縮したグラフィックスデータの一部分を前記クライアントに送信するステップは、前記バーテックスデータの前記判定された一部分において２つの連続するバーテックス毎の間で判定されたデルタを送信することをさらに含む、請求項１に記載の方法。
【請求項４】
前記コンピュータのオペレーティングシステムによって、ユーザースペースアプリケーションが複数のページを含む前記メモリにアクセスしたと判定するステップと、
前記オペレーティングシステムによって、前記ユーザースペースアプリケーションが前記複数のページの特定のページにアクセスしたと判定するステップと
をさらに含む、請求項１に記載の方法。
【請求項５】
前記メモリに記憶した前記グラフィックスデータと前記クライアントに前に送信したグラフィックスデータとを比較して、前記グラフィックスデータの少なくとも一部分が変化したと判定することは、
前記特定のページを、前記クライアントに前に送信された前記ページのコピーと比較することと、
前記比較に基づいて、前記特定のページにおける前記バーテックスデータの少なくとも一部分が変化したと判定することと
を含む、請求項４に記載の方法。
【請求項６】
前記特定のページを、前記クライアントに前に送信された前記ページの前記コピーと比較することは、単一命令マルチデータセットの命令からの少なくとも１つの命令を用いて、前記特定のページをスキャンすることをさらに含む、請求項５に記載の方法。
【請求項７】
前記特定のページをスキャンすることは、
変化が検知されるまで、前記特定のページの始まりから終わりまでスキャンすることと、
変化が検知されるまで、前記特定のページの終わりから始まりまでスキャンすることと
をさらに含む、請求項６に記載の方法。
【請求項８】
前記特定のページによって、前記クライアントに前に送信されたページのコピーを上書きするステップをさらに含む、請求項７に記載の方法。
【請求項９】
クライアントに接続されるコンピュータに、
複数のプリミティブのバーテックスデータ及びテクスチャデータを含むグラフィックスデータを、メモリに記憶するステップと、
前記メモリに記憶した前記グラフィックスデータと前記クライアントに以前に送信したグラフィックスデータとを比較して、前記グラフィックスデータの少なくとも一部分が変化したと判定し、前記バーテックスデータの少なくとも一部分が前記クライアントに送信されていないと判定するステップと、
前記の変化したグラフィックスデータの一部分を圧縮するステップと、
前記の圧縮したグラフィックスデータの一部分を前記クライアントに送信するステップと
を含む処理を実行させ、
前記の圧縮に先立って、前記グラフィックスデータに対してフラグを設定させることであって、前記グラフィックスデータの前記バーテックスデータに非可逆圧縮が許容されるかどうか、又は前記メモリ内の特定のページにおけるテクスチャデータに非可逆圧縮が許容されるかどうかを示すフラグを設定させ、
前記フラグに基づいて、前記の圧縮を実行するのに適切なコンプレッサを選択させる、コンピュータプログラム。
【請求項１０】
前記メモリに記憶した前記グラフィックスデータと前記クライアントに前に送信したグラフィックスデータとを比較して、前記グラフィックスデータの少なくとも一部分が変化したと判定することは、
前記メモリの特定のページにおけるバーテックスデータを、前記クライアントに前に送信されたバーテックスデータと比較することと、
前記比較に基づいて、前記特定のページにおける前記バーテックスデータの少なくとも一部分が変化したと判定することと
を含む、ことを特徴とする請求項９に記載のコンピュータプログラム。
【請求項１１】
前記メモリの特定のページにおけるバーテックスデータを、前記クライアントに前に送信したバーテックスデータと比較することは、
バーテックスに対する変化が検知されるまで、前記特定のページの始まりから終わりまでスキャンすることと、
バーテックスに対する変化が検知されるまで、前記特定のページの終わりから始まりまでスキャンすることと
をさらに含む、請求項１０に記載のコンピュータプログラム。
【請求項１２】
前記特定のページをスキャンすることは、単一命令マルチデータセットの命令からの少なくとも１つの命令を用いて前記特定のページをスキャンすることを含む、請求項１１に記載のコンピュータプログラム。
【請求項１３】
テクスチャデータ及びバーテックスデータを含むグラフィックデータを、メモリに記憶する手段と、
前記メモリに記憶された前記グラフィックスデータと、クライアントに前に送信されたグラフィックスデータとの比較に基づいて、前記メモリにおける前記グラフィックスデータの少なくとも一部分が変化したことを判定する手段と、
前記の変化したグラフィックスデータの少なくとも一部分を予備調整する手段と、
前記の変化したグラフィックスデータの少なくとも一部分を圧縮する手段と、
前記の圧縮したグラフィックスデータの少なくとも一部分を前記クライアントに送信する手段と
を含み、前記の圧縮に先立って、前記グラフィックスデータに対してフラグを設定することであって、前記グラフィックスデータの前記バーテックスデータに非可逆圧縮が許容されるかどうか、又は前記メモリ内の特定のページにおけるテクスチャデータに非可逆圧縮が許容されるかどうかを示すフラグを設定し、
前記フラグに基づいて、前記の圧縮を実行するのに適切なコンプレッサを選択するように構成される、コンピュータシステム。
【請求項１４】
前記の変化したグラフィックスデータの少なくとも一部分を予備調整する手段は、
フロントエンコーダへの移行を、前記の変化したグラフィックスデータの少なくとも一部分における前記バーテックスデータに適用する手段をさらに含む、請求項１３に記載のコンピュータシステム。
【請求項１５】
前記の変化したグラフィックスデータの少なくとも一部分を圧縮する手段は、メッシュコンプレッサを適用して、前記の変化したグラフィックスデータの少なくとも一部分における前記バーテックスデータの少なくとも一部分を圧縮する手段をさらに含む、請求項１３に記載のコンピュータシステム。
【請求項１６】
前記の変化したグラフィックスデータの少なくとも一部分を圧縮する手段は、イメージコンプレッサを、前記の変化したグラフィックスデータの少なくとも一部分におけるテクスチャデータに対して適用する手段をさらに含む、請求項１３に記載のコンピュータシステム。
【請求項１７】
エスケープによって、テキストに対するアプリケーションコントラストを受信する手段と、
前記コンストラクトを前記クライアントに送信する手段と
をさらに含む、請求項１３に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、改良されたコマンドリモーティング技術に関する。
【背景技術】
【０００２】
ターミナルサービスは、サーバで記憶されたアプリケーション及びデータに対するアクセスを可能になす方法を提供する。ユーザ入力は、ネットワーク接続によりサーバに送信され、音声及びグラフィックスがサーバからクライアントに送信される。数年間、異なる技術が、コマンドレベルリモーティング及びビットマップレベルリモーティング等のリモートグラフィックスに対して開発されてきた。
【０００３】
一般に、ビットマップレベルリモーティングが、実装するのにより簡単な２つの技術であると考えられている。ビットマップリモーティングにおいて、グラフィックス処理は、ターミナルサーバにおいて実行され、最終的なイメージ、すなわち、ビットマップを形成するピクセルのアレイが、圧縮されて、クライアントにネットワーク上で送信される。この技術は、１つ以上のクライアントに対してイメージを表示するのに十分な計算能力を有するサーバを必要とする。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
他方では、コマンドレベルリモーティングは、グラフィックス処理を、クライアントにオフロードする。プリミティブ、例えば、ドライバーにより処理され且つグラフィックプロセッサにより実行されるバーテックスは、キャプチャされ、かつ、クライアントに送信される。これは、リモートグラフィックスに要求される処理能力を低減せしめるものの、ビットマップリモーティングを使用するよりも大なるバンド幅が、３Ｄグラフィックスプリミティブを表すデータを転送するのに必要である。従って、コマンドレベルリモーティングを実現するのに必要であるバンド幅を狭小化する技術が望ましい。
【課題を解決するための手段】
【０００５】
本開示の例示的実施形態は、方法について記述している。この例においては、方法は、複数のプリミティブのバーテックス（注：頂点データ）をメモリに記憶するステップと、前記バーテックスの少なくとも一部分がターミナルサーバクライアントに送信されていないと判定するステップと、前記バーテックスの当該判定された部分を前記ターミナルサーバクライアント（２０１）に送信するステップとを含むものの、これらに限定されない。前述に加えて、他の態様が、本開示の一部を形成する特許請求の範囲、図面、及び本文に記載されている。
【０００６】
本開示の例示的実施形態は、方法について記述している。この例においては、方法は、各々が少なくとも１つのバーテックスによって定義された複数のプリミティブのバーテックスを記憶するステップと、フロントコーダに対する移動によりバーテックスを暗号化するステップと、当該暗号化されたバーテックスをターミナルサーバクライアントに送信するステップと、を含むものの、これらに限定されない。前述に加えて、他の態様が、本開示の一部を形成する特許請求の範囲、図面、及び本文に記載されている。
【０００７】
本開示の例示的実施形態は、方法について記述している。この例において、方法は、テクスチャ及びバーテックスを含むグラフィックデータをメモリに記憶するステップと、メモリに記憶されたグラフィックスデータと、ターミナルサーバクライアントに先に送信されたグラフィックスデータとの比較に基づいて、前記メモリにおける前記グラフィックスデータの少なくとも一部分が変化したと判断するステップと、変化した前記グラフィックスデータの少なくとも一部分を予備調整するステップと、変化した前記グラフィックスデータをターミナルサーバクライアントに送信するステップとを含むものの、これらに限定されない。前述に加えて、他の態様が、本開示の一部を形成する特許請求の範囲、図面、及び本文に記載されている。
【０００８】
当業者であれば、ことを容易に理解できるであろう。本開示の１つ以上の様々な態様が、本開示の本明細書に参照された態様に作用する回路(構成)(構成)及び／又はプログラミングを含むことができるものの、これらに限定されない。事実上、回路及び／又はプログラミングは、システムデザイナの設計選択に依存して、本明細書に参照された態様に作用するように構成されたハードウェア、ソフトウェア、及び／又は、ファームウェアのいかなる組合せとすることもできる。
【０００９】
上記は、要約であり、その結果、必要に応じて、詳細な記述が簡素化され、一般化され、且つ省略されている。当業者であれば、上記概要が単なる例示であり、いかなる場合においても、限定を意図したものでないことを十分理解するだろう。
【図面の簡単な説明】
【００１０】
【図１】図１は、本開示の態様が実装される例示的コンピュータシステムを表す図である。
【図２】図２は、本開示の態様が実装される例示的コンピュータシステムを表す図である。
【図３】図３は、本開示の態様を実行する動作手順３００を表す図である。
【図４】図４は、図３の動作手順３００の代替的実施形態を表す図である。
【図５】図５は、図４の動作手順３００の代替的実施形態を表す図である。
【図６】図６は、図５の動作手順３００の代替的実施形態を表す図である。
【図７】図７は、図６の動作手順３００の代替的実施形態を表す図である。
【図８】図８は、図７の動作手順３００の代替的実施形態を表す図である。
【図９】図９は、図４の動作手順３００の代替的実施形態を表す図である。
【図１０】図１０は、本開示の態様を実行する例示的動作手順を表す図である。
【図１１】図１１は、図１０の動作手順の代替的実施形態を表す図である。
【図１２】図１２は、図１１の動作手順の代替的実施形態を表す図である。
【図１３】図１３は、図１２の動作手順の代替的実施形態を表す図である。
【図１４】図１４は、本開示の態様を実行する例示的動作手順を表す図である。
【図１５】図１５は、図１４の動作手順の代替的実施形態を表す図である。
【発明を実施するための形態】
【００１１】
本開示の実施形態は、１以上のコンピュータで実行することができる。図１及び対応する説明は、本開示が実装される適切なコンピューティング環境について簡潔で且つ一般的な説明を提供することを目的としている。図１のコンピュータシステムは、いくつかの実施形態において、図２のサーバ２００及びクライアント２０１を実現可能であることを十分理解できよう。これら例示的実施形態において、サーバ２００及びクライアント２０１は、図１に記載されていた要素のいくつか又はすべて及び本開示の特定の態様を例示するように構成された回路を含むことができる。
【００１２】
本開示において、回路構成という用語は、例えば、ハードウェア割り込みコントローラ、ハードドライブ、ネットワークアダプタ、グラフィックプロセッサ、ハードウェアベースのビデオ／オーディオコーデック、及び、例えばハードウェアを動作させるのに用いられるファームウェア／ソフトウェア等のハードウェア要素を含む。同一の又は他の実施形態において、回路構成は、ファームウェアによって又はセットスイッチによって（複数の）機能を実行するように構成されたマイクロプロセッサを含む。同一の又は他の例示的実施形態において、回路構成は、論理的なプロセッサ、例えば１つ以上のマルチ‐マルチ汎用処理ユニットを含む。（複数の）論理的なプロセッサは、（複数の）機能を実行するように動作可能なソフトウェア命令実行論理によって構成される。当該ソフトウェア命令実行論理は、例えば、ＲＡＭ、ＲＯＭ、ファームウェア、及び／又は、仮想メモリ等のメモリからロードされる。回路構成がハードウェアとソフトウェアとの組合せを含む例示的実施形態において、実装者は、後に機械可読コードにコンパイルされる論理を実行するソースコードを作成することができるであろう。当該機械可読コードは、論理プロセッサによって処理される。当業者であれば、技術水準はハード／ソフトのハードウェア、ソフトウェア、または組合せの間には、ほとんど相違がない技術水準に達したことを十分理解するであろうから、具体的な機能を実現するためのハードウェアかソフトウェアの選択は設計変更問題である。より具体的には、当業者であれば、ソフトウェアの処理は、同等のハードウェア構造に変換することができ、また、ハードウェア構造自体は、ソフトウェアの処理にすることができることを十分理解するであろう。したがって、ハードウェア実装かソフトウェア実装かの選択は、設計変更の一つであり、実装者に委ねられている。
【００１３】
図１を参照すると、例示的汎用コンピュータシステムが示されている。汎用のコンピュータシステムは、従来のコンピュータ２０等を含む。当該従来のコンピュータ２０は、汎用の処理ユニット２１，システムメモリ２２，及びシステムバス２３を含む。当該システムバス２３は、システムメモリを含む様々なシステム要素を処理ユニット２１に接続する。システムバス２３は、メモリバス若しくはメモリコントローラ、周辺バス、及び種々のバスアーカテクチャのいずれをも使用するローカルバスを含むいくつかのタイプのバス構造のいずれでもよい。システムメモリは、読取専用メモリ（ＲＯＭ）２４及びランダムアクセスメモリ（ＲＡＭ）２５を含む。基本入出力システム２６（ＢＩＯＳ）は、例えば、スタートアップ中に、コンピュータ２０内の要素間の情報を転送することを幇助する基本的なルーチンを含み、ＲＯＭ２４において記憶される。コンピュータ２０は、図示していないハードディスクに対して読取り及び書込みするハードディスクドライブ２７、脱着可能な磁気ディスク２９に対して読取り及び書込みする磁気ディスクドライブ２８、及び、ＣＤ−ＲＯＭ又は他の光学媒体等の脱着可能不揮発性光ディスク３１に対して読み取り又は書き込む光ディスクドライブ３０をさらに含むことができる。いくつかの例示的実施形態において、本開示の態様を実施するコンピュータ実行可能命令は、ＲＯＭ２４，ハードディスク（図示せず）、ＲＡＭ２５，脱着可能な磁気ディスク２９，光ディスク３１，及び／又は、汎用の処理ユニット２１のキャッシュにおいて記憶することができる。ハードディスクドライブ２７，磁気ディスクドライブ２８，および光ディスクドライブ３０は、それぞれハードディスクドライブインタフェース３２，磁気ディスクドライブインタフェース３３，および光ドライブインタフェース３４によってシステムバス２３に接続されている。ドライブ及びそれらと関連付けられたコンピュータ可読媒体は、コンピュータ２０に対するコンピュータ可読命令、データ構造、プログラムモジュール及び他のデータの非揮発性記憶を提供する。本明細書に記載された例示的な環境は、ハードディスク、脱着可能な磁気ディスク２９，および脱着可能な光ディスク３１を採用しているものの、当業者であれば、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭｓ）、リードオンリーメモリ（ＲＯＭｓ）等のコンピュータによってアクセス可能であるデータを記憶することができる他のタイプのコンピュータ読取可能媒体が、例示的な動作環境においても使用可能であることを容易に理解できるであろう。
【００１４】
オペレーティングシステム３５，１つ以上のアプリケーションプログラム３６，他のプログラムモジュール３７，及びプログラムデータ３８を含む多くのプログラムモジュールが、ハードディスク、磁気ディスク２９，光ディスク３１，ＲＯＭ２４またはＲＡＭ２５、に記憶される。ユーザは、キーボード４０及びポインティングデバイス４２等の入力装置を介して、コマンド及び情報をコンピュータ２０に入力する。他の入力装置（図示せず）は、マイクロホン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナ等を含む。多くの場合に、これら入力装置及び他の入力装置は、システムバスに接続されたシリアルポートインターフェイス４６を介して、汎用処理ユニット２１に接続されているが、しかし、パラレルポート、ゲームポート若しくはユニバーサルシリアルバス（ＵＳＢ）等の他のインターフェースによって接続されてもよい。また、ディスプレイ４７又は他のタイプの表示デバイスは、ビデオアダプタ４８等のインターフェースを介してシステムバス２３に接続されている。ディスプレイ４７に加えて、コンピュータは、スピーカ及びリンタ等の他の周辺出力装置を通常含む。また、図１の例示的システムは、ホストアダプタ５５，スモールコンピュータシステムインタフェース（ＳＣＳＩ）バス５６，およびＳＣＳＩバス５６に接続された外部記憶装置デバイス６２を含む。
【００１５】
コンピュータ２０は、リモートコンピュータ４９等の１つ以上のリモートコンピュータへの論理接続を使用して、ネットワークでつながれた環境において動作する。リモートコンピュータ４９は、別のコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス又は他の共通ネットワークノードであり、コンピュータ２０に対して上述した要素の多くを又はすべてを通常含む。ただし、図１には、メモリ記憶装置５０のみが示されている。図１に示された論理接続は、ローカルエリアネットワーク（ＬＡＮ）５１及び広域ネットワーク（ＷＡＮ）５２を含む。かかるネットワーク環境は、会社内ネットワーク、企業規模のコンピュータネットワーク、イントラネット、及びインターネットにおいては一般的である。
【００１６】
ＬＡＮネットワーク環境において用いられると、コンピュータ２０は、ネットワークインタフェース又はアダプター５３を介してＬＡＮ５１に接続される。ＷＡＮネットワーク環境において用いられると、コンピュータ２０は、インターネット等の広域エリアネットワーク上で通信を確立するモデム５４又は他の手段を通常は含む。内臓の又は外付けのモデム５４が、シリアルポートインターフェイス４６を介してシステムバス２３に接続される。ネットワーク化された環境においては、コンピュータ２０に対して示されたプログラムモジュール又はその部分は、リモートメモリ／記憶装置に記憶される。図示されたネットワーク接続は例示的であり且つコンピュータ間の通信リンクを確立する他の手段を使用できることが十分理解されよう。その上、本開示の多数の実施形態がコンピュータ化されたシステムに対して特に十分適合されていることが想定されているものの、本明細書において、かかる実施形態に制限することは意図されていない。
【００１７】
図２を参照すると、図２は、実施形態において使用されるターミナルサービスセッション２０４を含む実施例オペレーティングシステム２０２を図示している。図１のコンピュータ２０などのコンピュータで実施例オペレーティングシステム２００は実現されることができることを十分理解できよう。図に示されているように、ハードドライブ、ネットワークインターフェースカード（ＮＩＣ）２１０、グラフィック処理ユニット２１８、少なくとも１つの論理プロセッサ２１２、及び、ＲＡＭ２１４等の基盤となるハードウェア記憶装置２０８備える。
【００１８】
ターミナルサービスが、実施形態において、（１のクライアントが表されているものの、サービスはより多くのクライアントに提供される）クライアント２０１等の少なくとも１つのクライアントに対して備えられる。実施形態でクライアント２０１などの少なくとも１つのクライアント（１つのクライアントについて表現するが、より多くのクライアントにターミナルサービスを提供できる）にターミナルサービスを提供できる。例示的クライアント２０１は、ハードウェアによって実現されるコンピュータターミナルを含む。当該ハードウェアは、ユーザ入力をセッションによって生成されたターミナルサーバセッションとディスプレイユーザインタフェース情報に指向するよう構成されている。別の実施形態では、クライアント２０１は、図１のコンピュータ２０のものと同様の要素を含むコンピュータによって実現される。この実施形態においては、クライアント２０１は、オペレーティングシステムに作用するように構成された回路構成と、ターミナルの機能、例えば、１つ以上の論理プロセッサ２１２によって実行するリモートデスクトップクライアントアプリケーションに匹敵するよう構成された回路構成と、を含む。当業者であれば、オペレーティングシステム２０２を実現するように構成された回路構成が、ターミナルに匹敵するように構成された回路構成をも含みことが可能なことを十分理解するであろう。
【００１９】
オペレーティングシステム２０２は、プロセッサ２１２にセッションを生成させる命令を含む。簡略して、セッションは、一般に、ユーザモードプロセスアプリケーション２０６を含む。ユーザモードプロセスアプリケーション２０６は、テレビゲーム、文書処理プログラム、ウェブブラウザ、ユーザインタフェース（ウィンドウズ(登録商標)、ダイアログボックス、デスクトップ等）、メディアプレーヤー等である。アプリケーション２０６は、様々なサブシステムによって、実現される。当該様々なサブシステムは、例えば、プラットフォームをアプリケーション２０６に提供してカーネル２３４を実行し及びカーネル２３４と対話する実行処理である。かかるサブシステムの１つ、例えば、命令が、より詳細に以下に説明する環境サブシステム２４４である。セッションは、（ユーザインタフェース処理によって表示される）シェル及びユーザインタフェース、デスクトップ内においてマウスの移動をトラックするサブシステム、プログラムを実現するコマンドに対してアイコン上のマウスクリックを転送するサブシステム等を含む。
【００２０】
例えば、オペレーティングシステム２０２が接続要求をクライアント２０１等のクライアントからネットワーク接続上で受信するとき、一般に、セッションは、ユーザベースによりユーザに対して作成される。一般に、接続要求は、転送スタック、例えば、リモートデスクトッププロトコルスタック（ＲＤＰ）によって、最初に処理される。転送スタックは、プロセッサ２１２に特定のポート上の接続メッセージを聞きおよびそれらをエンジン２１２に転送させる命令を含む。セッションが作成されるとき、転送論理が実行され、スタックインスタンス２１４等の各セッションに対するリモートデスクトッププロトコルスタックインスタンスがインスタント化される。一般に、リモートデスクトッププロトコルスタックインスタンス２１４が、出力をクライアント２０１へ送り、クライアント入力を環境サブシステム２４４へ送るよう構成される。
【００２１】
セッション作成処理中に、セッションマネージャ２１６は、論理プロセッサ２１２によって実行され、例えば、セッションスペースのためにセッション識別子を生成することによって、セッション識別子をテーブルに追加することによって、メモリをセッションスペースに割り当てることによって、及び、セッションスペースに割り当てられたメモリにおけるサブシステム処理のシステム環境変数及びインスタンスを作成することによって、プロセッサは、各セッションを初期化し、および、処理する。
【００２２】
図に示されているように、実施形態において、アプリケーション２０６は、セッション２０４のユーザモード内で実行し、グラフィックスディスプレイインタフェース（ＧＤＩ）２４６、３Ｄグラフィックス、または双方の組合せによって作成されたビットマップ等の２つの異なるレンダリング技術を使用する。ＧＤＩ２４６は、テキスト及びウィンドウ等の２次元画像を生成するのに有益である。ＧＤＩ２４６は、アプリケーション２０６からビットのアレイを受信することに応じて、ビットマップイメージを生成するディスプレイドライバに関連づけられる。例えば、アプリケーションは、ディスプレイドライバによって処理され、および、カラー値を表すピクセルを表示するのに使用されるアレイを発光させる。図に示されているように、リモーティング要素２２０は、ＧＤＩ２４６によってビットマップ出力をキャプチャし、それをスタックインスタンス２１４に送信する。
【００２３】
図２の説明を続けると、アプリケーション２０６は、複数のハードウェアベンダの１つによって作成されたグラフィック処理ユニットによってサポートされる３Ｄグラフィックスをさらに利用してもよい。異なるハードウェアベンダが異なるアーキテクチャ及びコマンドを使用するので、開発者はいかなるグラフィックカードを用いても動作する単一のアプリケーションを作成できるように、ハードウェアを抽出するグラフィックスドライバーアーキテクチャが作成される。この例において、アプリケーションはマイクロソフト登録商標からのＤｉｒｅｃｔ３Ｄ等のアプリケーションプログラミングインタフェイス２２２（ＡＰＩ）を介してクライアント２０１のグラフィック処理装置の主要部にアクセスする。ＡＰＩプリミティブは、クライアント２０１に送信され、クライアントのドライバーによってクライアントのＧＰＵによって実行されるコマンドに転送され、クライアントのＧＰＵによって実行される。一般に、ＡＰＩ２２２は、グラフィックスデータ、例えば、値、バーテックス（三角形のバーテックスを表す３２ビット値）、及び／又は、テクスチャ、例えば、オブジェクトがどれくらい透明でありおよび反射的であるか等の３Ｄ特性を有するオブジェクトの表面のディジタル表現を出力する。一般に、テクスチャは、プリミティブに適用されるビットマップであると考えることができる。すなわち、アプリケーションは、ツリーに似ているオブジェクトを作成し、テクスチャをツリーに適用して、バークを有するよう、それを出現させる。別の実施例は、丘を形成する草、土、及び岩を１セットの３Ｄプリミティブに適用するステップを含むことができる。
【００２４】
グラフィックスデータは、ＡＰＩ２２２によって作成され、および、バッファ、例えば、メモリのページに記憶され、テクスチャは、アートファイルからロードされて、他のページのメモリに記憶される。アプリケーションが実行すると、アプリケーションは、メモリがテクスチャを記憶するのに使用されるバーテックスバッファとメモリとして使用するよう要求できる。アプリケーションは、それがメモリをどのように使用するのか、すなわち、それがバッファにおいてどのタイプのデータで記憶されるのかを宣言する。例えば、テレビゲーム等のアプリケーションは、アバターに対するバーテックスを記憶する動的バーテックスバッファと、データを作成する際に多くの場合変化しないであろうデータを記憶するための静的バッファを使用する。
【００２５】
ターミナルサーバの実施形態において、リモーティング要素２２０は、ＡＰＩ２２２によって出力されたグラフィックデータをキャプチャするのに使用され、例えば、オプティマイザ２２６、デルタプレコンディショナ２２８、先頭移動エンコーダ２３０、１つ以上のテクスチャコンプレッサ２３２、メッシュコンプレッサ（２３６）、及び１つ以上のエスケープ２３８等のクライアント２０１にネットワーク上で送信されたグラフィックデータ量を低減するために、様々な技術が使用される。例示的実施形態において、様々な要素２２６−２３８が、１つ以上の論理プロセッサによって実行される命令によって実現される。また、要素２２６−３３８は別々に示されているものの、１つ以上の実施形態において、要素は単一のソフトウェアコンポーネントとすることができる。さらに、１つ以上の実施形態において、各要素２２６−３３８は、アプリケーション２０６の１つ以上のスレッド又はスタックインスタンス２１４（図示せず）で実行される。その上、特定の要素が平行に示されているものの、本開示は、かかる構成に限定されることはなく、他の実施形態において、１つ以上の要素が連続的な他の要素であってもよい。グラフィックスデータは、ＡＰＩ２２２によって作成されるので、それは、グラフィックスデータのタイプに依存して、１つ以上の先の要素によって処理され、バルクコンプレッサ２４０に送信される。バルクコンプレッサ２４０は、グラフィックスデータを圧縮するよう構成され、当該圧縮されたデータは、ＮＩＣ２１０を介して、クライアント２１０に送信される。
【００２６】
以下は、処理過程の実装について表す一連のフローチャートである。理解を容易にするために、初期のフローチャートは、全体的な「大型画像」の観点での実装を示し、その後のフローチャートは更なる付加的及び／又は詳細な説明を行うようにフローチャートが構成されている。
【００２７】
図３を参照すると、図３は、動作３００，３０２，３０４，及び３０６を含む本開示の態様を実行する動作手順を表している。図に示されているように、動作３００は操作手順を開始させ、動作３０２は、複数のプリミティブのバーテックスをメモリに記憶するステップを示している。図２を参照すると、バーテックスデータ、例えば、バーテックスを示す３２ビット値が、バーテックスバッファ、例えば、ＲＡＭ２１４の１ページ以上のメモリ、及び／又は、グラフィックプロセッサ２１８のメモリにおいて記憶される。一つの実施例において、バーテックスデータは、例えば、テレビゲーム、メディアプレーヤー、ＣＡＤプログラム、ユーザインタフェース等のアプリケーションからＡＰＩコンストラクトを受信することに応答して、例えば、ＡＰＩ２２２によって作成される。すなわち、アプリケーションは、ＡＰＩ２２２を１つ以上のコンストラクトまでの間に通過させ、ＡＰＩ２２２は、何千ものプリミティブを作成し、それらを１つ以上のバーテックスバッファ内に記憶する。
【００２８】
図３の説明を続けると、動作３０４は、バーテックスの少なくとも一部分がターミナルサーバクライアントに送信されていないと判定するステップを示している。例えば、前の実施例を続行して、アプリケーションがバーテックスバッファを１つの処理にマップするとき、例えば、オプティマイザ２２６は、論理プロセッサ２１２によって実行され、プロセッサは、バーテックスバッファに記憶されたバーテックスの少なくとも一部分がターミナルサーバクライアント２０１に送信されていないことを発見する。例えば、膨大な量のデータ、例えば、クライアントアップデート間において数千ものプリミティブがアプリケーションによって作成され、オプティマイザ２２６は、データのいかなる部分が、クライアント２０１に送られたもの及び変化したものの差異を表示するのに必要であるかを判定するよう構成される。
【００２９】
例として、アプリケーションは、バーテックスバッファをマッピングする際に、それが開発者によってどのようにコード化されたかに依存して、大きく異なる方法で動作する。例えば、アプリケーションがバッファの一部をマップして、バッファに加え、データの一部をバッファに上書きし、バーテックスバッファのコンテンツを完全に上書きすることは、完全に許容できる。アプリケーションは、全体のバッファのコンテンツに対して又はバッファのサブセットに対して引き抜くコマンドを発生する。代わりに、別の方法により、アプリケーションがどのように動作するのかを推定することは困難である。アプリケーションの動作が予測できないので、ナイーブなアプローチは、各アンマップ動作後にバッファ内のすべてのバーテックスを送信するステップを伴う。しかしながら、この例においては、オプティマイザ２２６は、アンマップ動作後に、バーテックスバッファにおけるバーテックスのどの部分が変化したかを、例えば、判定する。
【００３０】
図３の説明を続けると、動作３０６は、バーテックスの当該判定された部分をターミナルサーバクライアント（２０１）に送信するステップを示す。例えば、図２を参照すると、ネットワークインターフェースカード２１０は、バッファにおける変化したバーテックスをターミナルサーバクライアント２０１に送信する。この例においては、ネットワーク上に送信される必要があるバーテックスの量が低減されているで、コマンドリモーティングを実現するのに必要な全バンド幅が低減されている。
【００３１】
図４を参照すると、図４は、付加的動作４０８、４１０、４１２、及び４１４を含む図３の動作手順３００の代替的実施形態を表している。動作４０８について言及すると、動作４０８は、バーテックスの少なくとも一部分がターミナルサーバクライアント（２０１）に送信されていないと判定するステップに先立って、ユーザースペースアプリケーションが所定の範囲より大なる一連のメモリアドレスに要求したと判定するステップを示している。図２を参照すると、オプティマイザ２２６は、ユーザースペースアプリケーションがアドレススペースの所定量以上を使用していることが判定された後に、バーテックスバッファをスキャンするよう構成される。例えば、バーテックスをスキャンすることは、コンピュータサイクルを要し、アプリケーションが、少量のデータ、例えば、２０バイトを送信することを示す場合、各アップデートの間、データの変化分を特定することの代わりに数バイトを送信することは、より効率的である。例えば、アプリケーションは、初期化処理の間、特定の量のバッファを作成し、サイズを設定し、バッファがどのように使用されるかを設定する。プロセッサ２１２は、オプティマイザ２２６を実行して、サイズと用途パターンをチェックする。この例において、プロセッサ２１２は、バッファのサイズが所定量よりも大となるように設定されることを発見し、バッファのコンテンツをスキャンするために判定する。同一の又は他の実施形態において、バッファのサイズ及びタイプは、どの最適化が有効にされているのかを判定するのに使用される。例えば、バッファのサイズに依存して、オプティマイザ２２６は、ページレベルスキャニング、バイトレベルスキャニング、ＳＩＭＤスキャニング等を可能にする。
【００３２】
当業者であれば、所定の閾値は、コンピュータシステム２００の能力に基づいて異ならせることが可能なことを十分理解し得よう。例えば、所定閾値はビットレベルにより設定可能であり、オプティマイザ２２６は、ＡＰＩ２２２によって生成されるあらゆるビットをスキャンするのに使用可能である。これにより、クライアント２０１へ変更を転送するのに使用されるバンド幅は低減されるだろうが、これは、実際に得られた利益に対して、コンピュータサイクルの容認できない量を要するであろう。他方では、変化がほとんど検出されないとき、データを転送するのに必要なバンド幅の量は増加する。したがって、当業者であれば、正確な値が使用されるコンピュータサイクルと使用されるバンド幅のトレードオフに基づいて設定されることを十分理解し得よう。メモリ及びコンピュータの出力が増大しつつあるので、今日使用されている値は、将来のものとは関連し得ない。したがって、正確な閾値は実装者に委ねられている。
【００３３】
図４の説明を続けると、動作４１０は、バーテックスの判定された部分について事前調整を行うステップを示している。例えば、本開示の実施形態において、バーテックスは圧縮されるよう事前調整される。この例において、値、例えば、プリミティブを生成するのに使用されるバーテックスを表すビットは、異なった形態に変換されるので、バルクコンプレッサ２４０は、より容易に、パターンを特定することができる、そして、圧縮するより多くの機会をバルクコンプレッサ２４０に与える。
【００３４】
図４を再度参照すると、オペレーション４１２は、バーテックスの判定された部分において連続する２つのバーテックスの間で判定されるデルタ(差分)を送信するステップを示している。例えば、実施形態において、デルタプレコンディショナ２２８は、バーテックスを事前調整するのに使用される。例えば、バーテックスが検知されるとき及び／又はアプリケーションがＡＰＩ２２２に関するフラグを設定するときに判定が行われ、デルタプレコンディショナ２２８がバーテックスを処理する。先のパラグラフにおいて説明したように、各バーテックスは、値、例えば、３２ビットフロートとして表され、プレコンディショナ２２８は、先のバーテックスに基づく各連続するバーテックスに対して、例えば、加算し、減算し、乗算し、割算する動作を実行し、デルタを出力する。当業者であれば、別の３２ビットフロートからの３２ビットフロートの減算は、３２ビットフロートであり、データ量は同量を維持することを十分理解し得よう。しかしながら、選択的に事前調整することによって、データは、バルクコンプレッサ２４０によってより容易に圧縮されるフォーマットに、データは載置される。例えば、バーテックスのアレイが２、４、６、８、１０、１２であった場合、デルタプレコンディショナは、第１の値、及び、連続的なデルタ、すなわち、２、２、２、２、２、２のアレイを送信する。バルクコンプレッサ２４０は、データを事前調整することによって、第１のアレイを圧縮するよう構成されるものの、バルクコンプレッサ２４０は、より繰り返されたパターンをピックアップすることが恐らく可能であろうし、その結果、より多くのデータを圧縮することが可能であろう。
【００３５】
この技術は、特に、Ｄｉｒｅｃｔ２ＤやマイクロソフトのＡＰＩセットに有益である。ＡＰＩセットはＤｉｒｅｃｔ３Ｄのトップにビルトオンされる。Ｄｉｒｅｃｔ３Ｄは、テキスト等の２次元画像、例えばボタンのメニュー等を拡大させるのに、３Ｄハードウェアを使用する。Ｄ２Ｄを使用するアプリケーションは、バーテックスバッファを、水平スパンを表すラインセグメントで満たす。バーテックスがともにパックされて、特定のフォントの文字を表示するので、連続した各バーテックス間の距離は、よく類似する。
【００３６】
図４を再度参照すると、動作４１４は、オペレーティングシステムによって、ユーザースペースアプリケーションが複数のページを含むメモリにアクセスしたことを判定するステップと、オペレーティングシステムによって、ユーザースペースアプリケーションが複数のページの特定のページにアクセスしたことを判定するステップとを示している。動作４１２を実行する実施形態に応じて、オペレーティングシステム２０２は、ユーザースペースアプリケーション（例えば、テレビゲーム）がバーテックスを記憶するメモリの特定のページにアクセスしたことを判定する。例えば、プロセッサ２１２は、プロセッサ２１２がアクセスしたそれぞれのページのメモリを追跡し、この情報は、例えば、カーネル２３４のメモリマネージャに対して提供される。１実施例において、ＡＰＩ２２２を使用するアプリケーションは特定され、アプリケーションがメモリによって戻されたバーテックスバッファをマップするとき、アクセスされたデータが特定され、オプティマイザ２２６に報告される。
【００３７】
具体例において、バーテックスバッファは、例えば、１６キロバイトとすることができ、バッファは、各々が４キロバイトである４ページによってバックされる。この例においては、アプリケーションがバッファをマップする、例えば、第１のページに書込みを行う場合、プロセッサ２１２は、この情報をオペレーティングシステム２０２に報告し、特定のページ、例えば、第１のページは、オプティマイザ２２６に報告される。オプティマイザ２２６は、オペレーティングシステム２０２から受けた情報に基づいて、特定のページがターミナルサーバクライアントに送信されていないバーテックスを含むことを判定する。
【００３８】
図５を参照すると、図５は、動作５１６を含む図４の動作手順３００の代替的実施形態を表しており、動作５１６は、特定のページをターミナルサーバクライアントに先に送信されたページのコピーに比較するステップと、及び、比較に基づいて、特定のページにおけるバーテックスデータの少なくとも一部分が変化したことを判定するステップとを示している。同一の又は他の実施形態において、１ページがいったん特定されると、それは、オプティマイザ２２６によってスキャンされる。例えば、オプティマイザ２２６は、論理プロセッサ２１２によって実行され、プロセッサ２１２は、アクセスされたページ又はページを、先にコピーされたページ又はページに比較する。例えば、オプティマイザ２２６は、クライアント２０１に送信されたか又は別の方法により入力された最新のデータのコピーに対してアクセスするる。オプティマイザ２２６は、クライアント２０１が現時点で有するデータの画面を有する。オプティマイザ２２６は実行され、アクセスされたページのコンテンツとページの古いコピーと間で比較が実行される。差異がある場合、ページ及び／又は変更されたバイトがクライアント２０１に送信される。
【００３９】
図６を参照すると、図６は、動作６１６を含む図５の動作手順の更なる改良点を示している。動作６１６は、比較動作が、単一命令マルチデータセットの命令（２１２）からの少なくとも１つの命令を用いて、特定のページをスキャンするステップをさらに含むことを示している。例えば、特定の実施形態において、論理的なプロセッサ２１２は、ストリーミング単一命令多重データ（ＳＩＭＤ）拡張子を有するｘ８６ベースのプロセッサである。この例においては、少なくとも１つのＳＩＭＤ命令は、チャンクにおける１ページのメモリを一度にスキャンし、古いページのバイトのコピーを、現在のページの現在のバイトに比較する。特定のＳＩＭＤ実施形態において、プロセッサ２１２は、１６バイトを一度にスキャンするよう構成される。１６バイトのグループはＳＩＭＤ置数器にロードされ、比較が、先の値、例えば、クライアントに送信された１６バイトの値に対してなされ、当該グループ内のバイトが変化したかどうかの判定がなされる。代替実施例では、オプティマイザ２２６が、１グループのバイトが変化を含むことを一旦特定すると、プロセッサ２１２はオプティマイザ２２６を実行し、プロセッサ２１２は、一定のｘ８６命令を使用して、当該グループにおける各バイト間における比較を駆動するように構成されて、当該グループにおいて変化した特定のバイト又はデータのバイトを特定する。
【００４０】
図７を参照すると、図７は、動作７１８を含む図６の動作手順の更なる改良点を示している。動作７１８は、ＳＩＭＤ命令を使用する比較動作が、変化が検知されるまで特定のページの始まりから終わりまでスキャンする動作、及び、変化が検知されるまで特定のページの終わりから始まりまでスキャンする動作をさらに含むことを示している。例えば、論理プロセッサ２１２はバイトのグループで特定されたページを介したステップを踏む。この実施例におけるオプティマイザ２２６は、変化が検知されるまで、バイトを検索するよう構成される。この典型実施形態において、アプリケーションは、大なるグループにおけるバーテックスを変更する傾向があるので、オプティマイザ２２６は、あらゆるバイトを隅々まで捜す代わりに変化のグループの始まり及び終わりを見出すまで、検索するよう構成される。この様にオプティマイザ２２６を構成することによって、オプティマイザ２２６は実際になされる変化量に比例して、差異を探すためのサイクルを要するのみであろう。すなわち、アプリケーションがバーテックスの大なるグループを修正する場合、プロセッサ２１２は、すべての変化を特定しようと試みる多くのサイクルを要する必要はないだろう。
【００４１】
この代替的な改良点において、プロセッサ２１２は、始め、例えば、ページの第１のアドレスから開始して、ページを介してステップを進め、グループにおけるバイトを先のグループのバイトと比較する。例えば、変化が検出される場合、すなわち、バーテックスを示す値が変化した場合、プロセッサ２１２は、停止し、値のメモリアドレスを記録し、変化が検知されるまで、ページの終わりから、例えば、ページの最後のアドレスから、始まりのアドレスまでスキャニングを開始する。この例において、プロセッサ２１２は、２つの変化した値の間のアドレスを、ターミナルサーバクライアント２０１に送信されていなかったバーテックスの部分として選択する。
【００４２】
図８を参照すると、図８は、付加的動作８２０を含む図７の動作手順の更なる改良点を示している。付加的動作８２０は、特定のページを用いて、ターミナルサーバクライアントに先に送信されたページのコピーに上書きするステップを示している。動作８２０を含む実施形態において、一度、オプティマイザ命令を実行するプロセッサ２１２が、ターミナルサーバクライアント２０１に先に送信されたバーテックスの部分を特定すると、プロセッサ２１２は、メモリ領域におけるページの古いコピーを上書きすることによって自身がスキャンしたページをキャッシュする。メモリ領域は、例えば、ターミナルサーバクライアント２０１に先に送信されたグラフィックスデータのコピーを記憶するよう構成されたＲＡＭ２１４である。例えば、キャッシュが４ページのバーテックスを含む場合、オプティマイザは、変化が第３ページで行われたことを決定し、オプティマイザ２２６は、ページを用いて、スキャンされた第３のページを上書きする。上書き動作の後に、オプティマイザ２２６は、クライアント２０１に送られたデータの現在の画面を有する。
【００４３】
図９を参照すると、図９は、図４の動作手順の更なる改良点を示している。当該動作手順は、付加的動作９２２を含む。当該動作９２２は、バーテックスの予備調整され、および判定された部分を圧縮するステップを示している。この改良において、ターミナルサーバクライアント２０１に先に送信されたバーテックスの部分が、事前調整された後に、バルクコンプレッサ２４０を使用して、それらは圧縮される。一般に、バルクコンプレッサ２４０は、駆動時にパターンを特定し、およびそれらを圧縮するよう構成された標準のコンプレッサである。バルクコンプレッサ２４０は、多様のデータ、例えば、ＧＤＩ２４６、オーディオ、クリップボードデータ、ＵＳＢデバイスによって作成されたビットマップ等のクライアント２０１に送信されたすべてのデータを圧縮するようカスタム化されるので、例えば、それは、あらゆる特定のタイプのデータを圧縮するよう構成されない。したがって、この例において、クライアントに送られたバーテックスは事前調整される。すなわち、バルクコンプレッサ２４０がより容易にパターンを特定することを可能にするフォーマットに設定される。
【００４４】
ここで、図１０を参照すると、図１０は、本開示の態様において使用される操作手順を示している。操作手順は、動作１０００で始まって、動作１００２、１００４、１００６を含む。動作１００２に示されているように、処理手順は、各々が少なくとも１つのバーテックスによって定義された複数のプリミティブのバーテックスを記憶するステップを含む。図２を参照すると、バーテックスデータ、例えば、バーテックスを示す３２ビット値がバーテックスバッファに、例えば、ＲＡＭ２１４のメモリの１ページ以上及び／又はグラフィックプロセッサ２１８のメモリに記憶される。１実施例において、例えば、テレビゲーム、メディアプレーヤー、ＣＡＤプログラム、ユーザインタフェース等のアプリケーションからのＡＰＩコンストラクトを受信することに応答して、バーテックスデータは、例えば、ＡＰＩ２２２によって作成される。すなわち、アプリケーションは、ＡＰＩ２２２を１つ以上のコンストラクトに送り、ＡＰＩ２２２は、何千ものプリミティブを作成し、１つ以上のバーテックスバッファにそれらを記憶する。
【００４５】
動作手順１００４は、継続し、フロントコーダに対する移動によりバーテックスを暗号化するステップを示している。例えば、プロセッサ２１２はフロントコーダ２３０（ＭＴＦエンコーダ）に対する移行を示した命令を実行し、バーテックスを暗号化する。この例において、ＭＴＦエンコーダ２３０は、クライアントに送られるデータ要素を表すレベルの精度で暗号化するよう構成される。すなわち、３２ビットフロートを使用する実施例において、ＭＴＦエンコーダ２３０は、３２ビットを一度に暗号化するよう構成される。データ要素レベルで暗号化することによって、バーテックスの周知のプロパティが利用される。すなわち、ＭＴＦエンコーダ２３０があらゆるビットを暗号化する代わりに、実装者は、データが３２ビットバーテックスを表すことを知っているので、それは、３２ビット毎を暗号化するよう構成される。一般に、ＭＴＦエンコーダ２３０は値及びインデックスのリストを含む。ＭＴＦエンコーダ２３０がバーテックスを処理するので、最も一般的な値がリストの冒頭に現れる。ＭＴＦエンコーダ２３０は、（バーテックスより小なるビットで暗号化される）インデックス値を出力する。ＭＴＦエンコーダ２３０は、もっとも共通の値の間を越えて変動するので、バルクコンプレッサ２０４が容易にピックアップおよび圧縮の処理を実行することができる。
【００４６】
特定の実施例において、リストは４つのスロットを有するものの、これはスロットの設定可能な量である。ＭＴＣエンコーダ２３０は、１３７，１６，１２８，１３７，１３７，１２８のバーテックス値を受信し。ＭＴＦエンコーダ２３０が第１の値「１３７」に直面するとき、リストは、インデックス値又はバーテックス値を発するかどうかを判定するためにチェックされる。この実施例において、リストは空であるので、１３７の値が、「０」のインデックススロットに記憶され、ＭＴＦエンコーダ２３０は値１３７を発生する。次の値「１６」に直面すると、ＭＴＦエンコーダ２３０は、「０」のインデックススロットに１６を記憶して、１３７を「１」のスロットに移行させ、値１６を発生する。第３の値「１２８」に直面すると、リストのコンテンツは移行されて、１２８が発制する。第４の値に直面すると、ＭＴＦエンコーダ２３０は、１３７が既に２スロット内に存在することを受信し、１３７を発する代わりに、ＭＴＦエンコーダ２３０は、インデックス値「２」、及び、これがインデックス値であると特定する情報、例えば、ビットを発生する。この例において、インデックス値は、バーテックスより小なるビット数で暗号化されるので、バーテックス値を圧縮する。その上、この時点において、ＭＴＦエンコーダ２３０は、リストを交換し又は回転させるので、「Ｏ」インデックスに設けられた１３７と、１２８は、「２」のインデックススロットにおいて設けられるか、又は、回転される場合、「１」のインデックススロットにおいて設けられえる。実施例について続けると、より多くの同一の値が出現し始めるにつれて、ＭＴＦエンコーダ２３０は、インデックス値を発生することができるだろうし、共通の直面された値の間において、振動することができるであろう。言い換えれば、ＭＴＦエンコーダ２３０は、インデックス値を送信することによって、バーテックスを圧縮でき、およびバルクコンプレッサ２４０によってさらに圧縮されるラン（ｒｕｎ）を送信することによってバーテックスを事前調節することができる。
【００４７】
図１０の説明を続けると、動作１００６は、暗号化されたバーテックスをターミナルサーバクライアントに送信するステップを示している。例えば、図２を参照すると、ネットワークインターフェースカード２１０は、暗号化されたバーテックス、例えば、ＭＴＦコーダ２３０によってターミナルサーバクライアント２０１に出力された出力を送信する。この例において、バーテックスを表すために送信されるのに必要なデータ量が低減されて、その結果、コマンドリモーティングを実行するのに必要な総バンド幅を低減せしめる。
【００４８】
ここで、図１１を参照すると、図１１は、図１０の動作手順１０００の代替的実施形態を表している。当該代替的実施形態は、動作１１０８及び１１１０を含む。動作１１０８に示されているように、実施形態において、操作手順は暗号化されたバーテックスを圧縮するステップを含む動作を含む。この改良を含む実施形態において、暗号化されたバーテックスは、バルクコンプレッサ２４０を使用して、圧縮される。この例において、バルクコンプレッサ２４０によって受信されたバーテックスは、一組の値の間において変動するインデックス値を含む。バルクコンプレッサ２４０は、ラン（ｒｕｎ）を特定し、データを圧縮する。
【００４９】
さらに、また、図１１は、メモリの特定のページにおけるバーテックスを、ターミナルサーバクライアントに先に送信されたバーテックスと比較するステップと、当該比較に基づいて、特定のページにおける複数のプリミティブのバーテックスを特定するステップとを示す動作１１１０を示している。例えば、ＭＴＦエンコーダ２３０が受信するバーテックスは、オプティマイザ２２６から受信される。この構成において、オプティマイザ２２６は、アプリケーションによってなされたバーテックスに対する変化を特定し、当該変化を更なる圧縮のためのＭＴＦエンコーダ２３０へ送信するよう構成される。上で説明したものと同様に、オプティマイザ２２６は、論理プロセッサ２１２によって実行され、プロセッサ２１２は、１ページ又は複数のページを、当該１ページ又は当該複数のページと、以前のページのコピーとを比較する。オプティマイザ２２６が実行されると、アクセスのページと古いページのコピーの間で比較がなされる。差異がある場合、ページ及び／又は変化したバイトが、ＭＴＦコーダ２３０に送信される。
【００５０】
図１２を参照すると、図１２は、動作１１１０に対する改良である動作１２１２を示している。図に示されているように、動作１２１２は、バーテックスに対する変化が検知されるまで、特定のページの始まりから終わりまでスキャンするステップと、バーテックスに対する変化が検知されるまで、特定のページの終わりから始まりまでスキャンするステップとを示している。例えば、実施形態において、論理的なプロセッサ２１２は、バイトのグループにおける特定のページを通して進む。
【００５１】
図１３を参照すると、図１３は、図１２の動作手順の更なる改良点を示す操作手順１３１４を示している。この実施形態において、特定のページをスキャンする命令は、単一命令マルチデータセットの命令からの少なくとも１つの命令を含む。例えば、論理的なプロセッサは、ストリーミング単一命令多重データ（ＳＩＭＤ）拡張子を有するｘ８６ベースのプロセッサである。この場合、ＳＩＭＤ命令は、単一のプロセッサの命令を使用して、チャンクにおけるメモリのページを一度にスキャンする。
【００５２】
図１４を参照すると、図１４は、動作１４００−１４１２を含む操作手順を示している。動作１４００が、手順を開始する。そして、動作１４０２は、テクスチャ及びバーテックスを含むグラフィックデータをメモリに記憶するステップを示している。図２を参照すると、実施形態において、バーテックスデータ、例えば、バーテックスを示す３２ビット値が、バーテックスバッファ、例えば、ＲＡＭ２１４におけるメモリ又はグラフィックスプロセッサのメモリの１つ以上のページにおいて、記憶され、テクスチャ、例えば、表面法線等の表面プロパティが、ＲＡＭ２１４のページに記憶される。１実施例において、バーテックスデータは、例えば、テレビゲーム、メディアプレーヤー、ＣＡＤプログラム、ユーザインタフェース等のアプリケーションからのコンストラクトを受信することに応答して、例えば、ＡＰＩ２２２によって作成される。ＡＰＩ２２２を介して、アプリケーションはバーテックス又はテクスチャを用いて、メモリの１ページ以上をマップする。言い換えれば、アプリケーションは、ＡＰＩ２２２の１つ以上の関数を呼び出して、複数のバーテックスをメモリに書き込む。当該メモリは、ドライバーによって使用されて、グラフィックプロセッサに命令して、複数のプリミティブを作成する。同様に、アプリケーションは、コンストラクトをＡＰＩ２２２に送信する。そして、ＡＰＩ２２２は、テクスチャを、テクスチャと伴にメモリで記憶されるプリミティブにマップするコマンドを生成する。
【００５３】
図１４の説明を続けると、動作１４０４は、メモリに記憶されたグラフィックスデータとターミナルサーバクライアントに先に送信されたグラフィックスデータとの比較に基づいて、メモリにおけるグラフィックスデータの少なくとも一部分が変化したことを判定するステップを示している。例えば、実施形態において、ＡＰＩ２２２はバーテックスバッファ、例えば、メモリのページをマップし、テクスチャをメモリに記憶する。オプティマイザ２２６は、先のマップ動作以後にアプリケーションによって記憶されたデータが変化したかどうかを判定するために、論理プロセッサ２１２によって実行される。例えば、オプティマイザ２２６は、クライアント２０１に送信されたか又は別の方法で送られた最新のデータのコピーに対するアクセスを行う。オプティマイザ２２６は、クライアント２０１が現時点で有するデータを表示する。
【００５４】
オプティマイザ２２６は、テクスチャをクライアント２０１に送信されたテクスチャと付加的に比較して、データが変化したかどうかを判定する。例えば、テクスチャは本質的にはピクセル値、例えば、ビットマップのアレイである。オプティマイザ２２６は、テクスチャを記憶するメモリのページをスキャンして、テクスチャが変化したかどうかを判定する。プロセッサ２１２が、テクスチャ又はタッチされたテクスチャの一部を含むメモリの１ページがアクセスされたことを検出した場合、オプティマイザ２２６は、ページをクライアント２０１に送信するよう判定する。別の例示的実施形態において、オプティマイザ２２６は、タッチされたページのコンテンツをスキャンして、どのバイトが変化したかを特定する。この例において、ページの始め又は終りから始める代わりに、オプティマイザ２２６は、中間のアドレスから開始してページをスキャンし、ページを、長方形等、外へ拡大する。
【００５５】
オプティマイザ２２６が実行されて、アクセスされたページのコンテンツとページの古いコピーとの間で比較がなされる。差異が存在する場合、ページ及び／又は変化したバイトは、クライアント２０１に送信される。特定の実施形態において、プロセッサ２１２は、ＳＩＭＤ命令を使用して、バイト又はバイトのグループを比較しながら、ページを進める。
【００５６】
図１４の説明を続けると、動作１４０６は、変化したグラフィックスデータの少なくとも一部分を予備調整するステップを示している。例えば、本開示の実施形態において、グラフィックスデータは圧縮されるよう事前調整される。この例において、値、例えば、バーテックス及び／又はテクスチャのビットを表すは、異なる形態に変換されえるので、バルクコンプレッサ２４０は、より容易にパターンを特定し、その結果、圧縮のより多くの機会をバルクコンプレッサに与える。
【００５７】
図１４の説明を続けると、動作１４０８は、変化したグラフィックスデータの少なくとも一部分を圧縮するステップを示している。この例において、グラフィックスデータは、例えば、バルクコンプレッサ２４０を使用して、圧縮される。
【００５８】
図１４の説明を続けると、動作１４１０は、変化したグラフィックスデータをターミナルサーバクライアントに送信するステップを示している。例えば、図２を参照すると、ネットワークインターフェースカード２１０は、変化したグラフィックスデータをターミナルサーバクライアント（２０１）に送信する。この例においては、ネットワーク上で送信されるのに必要なグラフィックスデータの量が、低減されたので、コマンドリモーティングを実行するのに必要な総バンド幅が低減された。
【００５９】
ここで、図１５を参照すると、図１５は、図１４の動作手順３００の代替的実施形態を表している。当該代替的実施形態は、動作１５１２，１５１４，１５１６及び１５１８を含む。動作１５１２を参照すると、動作１５１２は、動作１４０６に改良点、すなわち、フロントエンコーダへの移行を、変化したグラフィックスデータの一部分におけるバーテックスに適用するステップを示している。動作１００４と同様に、実施形態において、プロセッサ２１２はフロントコーダ２３０への移行を示す命令を実行し、バーテックス、テクスチャの値、及び／又は、テクスチャをプリミティブにマップするためのコマンドを暗号化する。この例において、ＭＴＦエンコーダ２３０は、グラフィックスデータの周知のプロパティを利用するために、データ要素レベルで暗号化するよう構成される。
【００６０】
図１５の説明を続けると、動作１５１４は動作１４０８の改良を示しており、メッシュコンプレッサを適用して、変化したグラフィックスデータの一部分におけるバーテックス少なくとも一部を圧縮するステップを示している。例えば、実施形態において、ＡＰＩ２２２は、アプリケーションによって設定されるフラグを含むように構成される。当該アプリケーションは、特定のバーテックスデータが、メッシュ、例えば、３Ｄの対象を形成する接続プリミティブの集合の一部であることを示す。この場合、同一の又は異なるフラグが、非可逆圧縮技術がメッシュに使用されるＡＰＩ２２２へ示すのに使用される。この例において、フラグが設定される場合、フラグに関連付けられたバーテックスは、メッシュコンプレッサ２３６を通過し、そして、バーテックスは圧縮される。
【００６１】
１実施例において、メッシュオプティマイザはクライアント２０１上で実行され、圧縮されたバーテックスを再構築するのに使用される。１つのかかる例示的メッシュオプティマイザはクライント２０１上で実行して、不可逆圧縮動作において失われたバーテックスを再作成する。
【００６２】
動作１５１６に変わって、実施形態において、動作１４０８は、イメージコンプレッサを、変化したグラフィックスデータの一部におけるテクスチャデータに対して利用することによって、さらに改良される。例えば、複数のイメージコンプレッサのうちの１つが、テクスチャデータを圧縮するのに使用される。テクスチャが本質的にはビットマップイメージであるので、特定の実施形態において、異なるコンプレッサが、テクスチャを送信するのに必要とされるバンド幅の量を低減するのに使用される。特定の実施形態において、コンプレッサ２３２は、テクスチャに依存し、かつ、アプリケーションがテクスチャをどのように使用するのかに依存して、可逆的又は非可逆的であり得る。この実施形態において、ＡＰＩ２２２は、アプリケーションによって設定されるフラグを示して、不可逆圧縮がメモリの特定のページにおけるテクスチャにとって許容できることを示す。別の方法においては、可逆コンプレッサが、テクスチャを圧縮するのに使用される。この例において、適切なコンプレッサが、利用可能なＣＰＵサイクル及びフラグの選択に基づいて、動的に選択される。いくつかの例示的コンプレッサは、ランレングスエンコーダ、ＪＰＥＧコンプレッサ、又はＤｉｒｅｃｔＸコンプレッサを含むがこれらに限定されない。
【００６３】
動作１５１８を参照すると、動作１５１８は、エスケープによって、テキストに対するアプリケーションコントラストを受信するステップと、コンストラクトをターミナルサーバクライアントに送信するステップと、を示す。一般に、コンストラクトを処理することから生ずる多数のＡＰＩプリミティブの代わりにＡＰＩコンストラクトを送信するのにより狭小なバンド幅を要する。特定の場合において、ハイレベルなエスケープは、ＡＰＩ２２２に付加される。ＡＰＩ２２２は、Ｄｉｒｅｃｔ２Ｄテキストを形成するプリミティブ等のリモートプリミティブに対する能力を改善する。一般に、ワードプロセッサ等のＤ２ＤアプリケーションがＰＩ２２２にコンストラクトを送り、文字「Ａ」を作成するとき、ＡＰＩ２２２はコンストラクトからプリミティブを作成し、それらをバーテックスバッファに記憶する。ＡＰＩ２２２に送られるコンストラクトは、「Ａ」を表しているものの、「Ａ」を特定する情報は、ＡＰＩ２２２によって作成されたバーテックスにおいて失われる。したがって、この例示的実施形態において、ＡＰＩ２２２がかかるコンストラクトを受信するとき、エスケープはコンストラクトをキャプチャし、かつ、ＮＩＣ２１０を介して、それをクライアント２１０に送信する。クライアント２０１は、この場合、コンストラクトを受信し、それを用いてバーテックスバッファを再構築する。同一の又は他の実施形態において、コンストラクトは、先に開示された技術のうちの１つを用いて、圧縮され又は事前調整される。
【００６４】
上記の詳細な説明は、実施例及び／又は動作図を介して、システム及び／又は処理の様々な実施形態について説明してきた。一つ以上の機能及び／又は動作を含むかかるブロック図及び／又は実施例の範囲の範囲において、当業者には、かかるブロック図又は実施例における各機能及び／又は動作が、広範囲のハードウェア、ソフトウェア、ファームウェア、又は、これらのあらゆる組み合わせによって、個別的に及び／又は集合的に実装されることが理解できるであろう。
【００６５】
本明細書に記載された議論中の話題の件の特定の態様を示して、説明したが、当業者には、本明細書に記載された発明とそのより広範な態様から出発することなく、本明細書における教示に基づいて、変更と修正が可能であることが明らかであろう。したがって、添付された特許請求の範囲は、本明細書に開示された発明の趣旨及び範囲に含まれるような変更及び修正を、それら範囲内において、包含するであろう。
【図１】
0005536093.tif 000002
【図２】
0005536093.tif 000003
【図３】
0005536093.tif 000004
【図４】
0005536093.tif 000005
【図５】
0005536093.tif 000006
【図６】
0005536093.tif 000007
【図７】
0005536093.tif 000008
【図８】
0005536093.tif 000009
【図９】
0005536093.tif 000010
【図１０】
0005536093.tif 000011
【図１１】
0005536093.tif 000012
【図１２】
0005536093.tif 000013
【図１３】
0005536093.tif 000014
【図１４】
0005536093.tif 000015
【図１５】
0005536093.tif 000016