08/02/24 05:16:38 XxNI12Tm
>>500
Xbox 360ではWindowsと同じようにユーザーモードと、スーパーバイザーモードがあります。
ユーザーモードではユーザーメモリ空間、スパーバイザーモードではカーネルメモリ空間があります。
GPUリソースはカーネルメモリ内にあって、ユーザーモードからはカーネルメモリには直接アクセスすることはできません。
全てのマネージコードはこのユーザーモードで動作するので、頂点データをセットするときは
ユーザーメモリからカーネルメモリへのデータコピーをしなければなりません。
仮にLockがあったとしても、帰ってくるのはユーザーメモリのポインタなので、
処理を終えたときに、やはりユーザーメモリからカーネルメモリへのコピーが必要になります。
Windows上ではVertexBufferの作られたときのフラグとロック時のフラグ状態によって暗黙的に動作方法を変化させています。
この判りづらく、間違えやすいという問題を明示的にしたものがSetData<T>、GetData<T>です。
ですから、Lockがあったとしても速度的な違いはありません。