2012-11-20 5 views

答えて

11

別のシェーダの入力として使用する場合: - 単にD3D11_BIND_RENDER_TARGETおよびD3D11_BIND_SHADER_RESOURCEを使用してtexture2Dを作成したことを確認してください。

  • テクスチャをレンダリングターゲットとしてバインドしてレンダリングします。
  • レンダリングターゲットとしてアンバインドし、シェーダリソースとしてバインドし、次のシェーダで使用します。
  • テクスチャはターゲットとリソースとして同時にバインドできないことに注意してください。
  • ピクセルの配列としてC++を使用してCPU上のテクスチャにアクセスする予定がある場合、いくつかの作業が必要です。残念ながら、現在のGPUアーキテクチャのために、ピクセルは実際にGPUメモリの潜在的な特別なフォーマット(swizzledフォーマット)で生きているので、texture2Dのピクセルに直接アクセスすることはできません。

    • GPUがレンダリングできるテクスチャを作成します。
    • GPUの出力を受け取るために使用されるステージングテクスチャ(D3D11_USAGE_STAGING)を作成します。
    • GPUテクスチャにレンダリングします。
    • 問題ID3D11DeviceContext :: COPYRESOURCE()またはID3D11DeviceContext :: CopySubresource()
    • コールID3D11DeviceContext ::地図()ステージングリソース上のピクセルへのアクセスを取得します。
    • ステージングリソースでID3D11DeviceContext :: Unmap()を呼び出します。
    • ID3D11DeviceContext :: UpdateSubresource()を呼び出して、GPUのリソースのバージョンを更新します。

    これは明らかに簡単な操作ではなく、今日のGPUアーキテクチャが最適化しているものに反しています。私は確かにそれをお勧めしません。

    あなたはこの道を下って行く終わる行う場合、また、およそすべてのPERF懸念のGPUメモリはリードバックを必ずお読みくださいは付属しています:http://msdn.microsoft.com/en-us/library/windows/desktop/bb205132(v=vs.85).aspx#Performance_Considerations

    関連する問題