D3D10_MAP列舉 (d3d10.h)
識別要由 CPU 讀取和寫入的資源。 應用程式可以結合其中一或多個旗標。
Syntax
typedef enum D3D10_MAP {
D3D10_MAP_READ = 1,
D3D10_MAP_WRITE = 2,
D3D10_MAP_READ_WRITE = 3,
D3D10_MAP_WRITE_DISCARD = 4,
D3D10_MAP_WRITE_NO_OVERWRITE = 5
} ;
常數
D3D10_MAP_READ 值: 1 資源會對應以供讀取。 資源必須以讀取許可權建立, (請參閱 D3D10_CPU_ACCESS_READ) 。 |
D3D10_MAP_WRITE 值: 2 資源會對應以進行寫入。 必須已建立具有寫入許可權的資源, (請參閱 D3D10_CPU_ACCESS_WRITE) 。 |
D3D10_MAP_READ_WRITE 值: 3 資源會對應以進行讀取和寫入。 資源必須以讀取和寫入存取權建立, (請參閱 D3D10_CPU_ACCESS_READ和D3D10_CPU_ACCESS_WRITE) 。 |
D3D10_MAP_WRITE_DISCARD 值: 4 資源會對應以進行寫入;資源先前的內容將會未定義。 必須已建立具有寫入許可權的資源, (請參閱 D3D10_CPU_ACCESS_WRITE) 。 |
D3D10_MAP_WRITE_NO_OVERWRITE 值: 5 Resource is mapped for writing; the existing contents of the resource cannot be overwritten (see Remarks). 此旗標只在頂點和索引緩衝區上有效。 必須已建立具有寫入許可權的資源, (請參閱 D3D10_CPU_ACCESS_WRITE) 。 無法在以 D3D10_BIND_CONSTANT_BUFFER 旗標建立的資源上使用。 |
備註
此列舉用於 ID3D10Buffer::Map、 ID3D10Texture1D::Map、 ID3D10Texture2D::Map 和 ID3D10Texture3D::Map 中。
D3D10_MAP_WRITE_NO_OVERWRITE的意義
D3D10_MAP_WRITE_NO_OVERWRITE表示應用程式承諾不會寫入 輸入彙編 (IA) 階段使用的數據。 交換中,GPU 可讓應用程式寫入相同緩衝區的其他部分。 應用程式必須確定它不會寫入 IA 階段使用中的任何資料。例如,請考慮下圖中說明的緩衝區。 如果已發出使用頂點 4-6 的 Draw 呼叫,呼叫 Map 的應用程式必須確定它不會寫入 Draw 呼叫在轉譯期間存取的頂點。
不過,確保這可能會很困難,因為 GPU 通常是 CPU 背後的許多畫面,就目前正在處理的框架而言。 追蹤因為呼叫 2 到 5 個畫面格前而使用的資源區段很困難且容易出錯。 因此,建議應用程式在使用D3D10_MAP_WRITE_NO_OVERWRITE時,只寫入資源未初始化的部分。使用 D3D10_MAP_WRITE_NO_OVERWRITE D3D10_MAP_WRITE_DISCARD的常見用法
D3D10_MAP_WRITE_DISCARD和D3D10_MAP_WRITE_NO_OVERWRITE通常會與動態索引/頂點緩衝區搭配使用,但也可以搭配動態紋理使用。這兩個旗標的常見用法包括使用可從相機目前位置看到的幾何填滿動態索引/頂點緩衝區。 第一次將數據輸入指定畫面格上的緩衝區時,會以D3D10_MAP_WRITE_DISCARD呼叫 Map;這麼做會使緩衝區先前的內容失效。 然後,緩衝區會填入所有可用的數據。
後續寫入相同畫面格內的緩衝區應該使用D3D10_MAP_WRITE_NO_OVERWRITE。 這可讓 CPU 存取 GPU 可能正在使用的資源,只要遵守先前所述的限制即可。
規格需求
需求 | 值 |
---|---|
標頭 | d3d10.h |