共用方式為


寬度與間距 (Direct3D 9)

雖然詞彙的寬度和音調通常非正式使用,但它們具有非常重要且截然不同的意義。 因此,您應該瞭解每個的意義,以及如何解譯 Direct3D 用來描述這些值的值。

Direct3D 會使用 D3DSURFACE_DESC 結構來攜帶描述表面的資訊。 除此之外,這個結構的定義是包含介面維度的相關信息,以及這些維度在記憶體中的表示方式。 結構會使用 Height 和 Width 成員來描述介面的邏輯維度。 這兩個成員都是以像素為單位來測量。 因此,640 x 480 表面的 Height 和 Width 值是相同的,無論是 8 位表面還是 24 位 RGB 表面。

當您使用 IDirect3DSurface9::LockRect 方法鎖定表面時,方法會填入包含表面的間距和鎖定位指標的 D3DLOCKED_RECT 結構。 Pitch 成員中的值會描述表面的記憶體間距,也稱為「步幅」。 間距是兩個記憶體位址之間的距離,以位元組為單位,代表一個位圖線的開頭和下一個位圖線的開頭。 由於間距是以位元組而非圖元來測量,因此 640x480x8 表面的間距值與具有相同尺寸但圖元格式不同的表面具有非常不同的間距值。 此外,音調值有時會反映 Direct3D 保留為快取的位元組,因此假設間距只是寬度乘以每個圖元的位元組數並不安全。 相反地,將寬度和間距之間的差異可視化,如下圖所示。

相同前端緩衝區、後端緩衝區和快取 的間距和寬度圖表

在此圖表中,前端緩衝區和後端緩衝區都是 640x480x8,而快取為 384x480x8。

直接存取介面時,請小心保留在配置給介面維度的記憶體中,並遠離保留給快取的任何記憶體。 此外,當您只鎖定表面的一部分時,您必須停留在鎖定表面時所指定的矩形內。 若未遵循這些指導方針,將會產生無法預期的結果。 直接轉譯到介面記憶體時,請一律使用 IDirect3DSurface9::LockRect 方法所傳回的音調。 請勿假設僅以顯示模式為基礎的音調。 如果您的應用程式在某些顯示器適配卡上運作,但看起來在其他顯示器適配卡上看起來很混亂,這可能是問題的原因。

如需詳細資訊,請參閱 直接存取 Surface 記憶體 (Direct3D 9)

Direct3D Surfaces