リソースのロック (Direct3D 9)
リソースをロックするとは、CPU がリソースのストレージにアクセスする許可を与えることです。リソースには、次のロッキング オプションが定義されています。
- D3DLOCK_DISCARD
- D3DLOCK_READONLY
- D3DLOCK_NOOVERWRITE
- D3DLOCK_NOSYSLOCK
- D3DLOCK_NO_DIRTY_UPDATE
ロッキング フラグおよびそれらのフラグと特定のリソースとの関連の詳細については、個々のリソース ロッキング メソッドのリファレンス ページを参照してください。アプリケーション開発者は、D3DLOCK_DISCARD、D3DLOCK_READONLY および D3DLOCK_NOOVERWRITE フラグが単なる参考であることに注意してください。実行時にアプリケーションがこれらのフラグで指定された機能に従っているかどうかはチェックされません。D3DLOCK_READONLY を指定したにもかかわらず、その後リソースに書き込んだアプリケーションには、不定の結果が予想されます。一般に、ロッキング使用フラグなどのロッキング フラグに反した操作は、今後のリリースで動作が保証されず、重大なパフォーマンス低下を招くおそれがあります。
ロック処理の後にはロック解除処理を行います。たとえば、テクスチャーをロックした後、アプリケーションはロック解除によってロックしたテクスチャーへの直接アクセス権を放棄します。ロックされている間は、プロセッサー アクセスの許可だけでなく、そのリソースに関連する他のすべての処理がシリアル化されます。オーバーラップしない領域であっても、リソースに許可されるロックは 1 つのみです。サーフェスのロック処理が未完了の間、そのサーフェスへのアクセラレーター処理を実行することはできません。
各リソース インターフェイスには、格納されているバッファーをロックするメソッドがあります。各テクスチャー リソースは、そのリソースのサブポーションをロックすることもできます。2D リソース (サーフェス) ではサブ矩形のロックが可能で、ボリューム リソースではサブボリュームまたはボックスのロックが可能です。各ロック メソッドは、リソースを戻すストレージへのポインターとデータの行間隔または平面間隔 (リソース タイプにより異なります) を表す値を格納した構造体を返します。詳細については、リソース インターフェイスのメソッドの一覧を参照してください。返されるポインターは、必ずロックされたサブ領域の左上のバイトを指します。
インデックス バッファーおよび頂点バッファーを操作する場合は複数のロック呼び出しが行えますが、ロック呼び出しの数とロック解除呼び出しの数が一致している必要があります。
DXTn では、ピクセルは符号化された 4x4 ブロックに格納されるため、4x4 の境界でのみロック可能です。