PFND3DDDI_COMPOSERECTS回呼函式 (d3dumddi.h)

ComposeRects 函式會將來源表面的二維區域組成目的地介面。

語法

PFND3DDDI_COMPOSERECTS Pfnd3dddiComposerects;

HRESULT Pfnd3dddiComposerects(
  HANDLE hDevice,
  const D3DDDIARG_COMPOSERECTS *unnamedParam2
)
{...}

參數

hDevice

顯示裝置的句柄 (圖形內容) 。

unnamedParam2

pData [in]

D3DDDIARG_COMPOSERECTS 結構的指標,指定用來撰寫矩形區域的參數。

傳回值

ComposeRects 會傳回下列其中一個值:

傳回碼 描述
S_OK 矩形區域已成功組成。
E_OUTOFMEMORY ComposeRects 無法配置所需的記憶體,才能完成。

備註

下列條件約束和驗證適用於 ComposeRects 函式

  • 驅動程式應該忽略來源介面內未完全位於來源表面內的矩形區域。
  • 目的地矩形區域--套用位移之後,可以部分或完全超出目的地介面。 如果部分在外部並拒絕或完全裁剪,則會裁剪目的地矩形區域。
  • 無法為來源和目的地指定相同的表面。
  • 搭配 ComposeRects 使用的 Surface 和頂點緩衝區不應鎖定。
  • 來源和目的地介面會在建立每個圖元時格式化為每圖元一位 (D3DDDIFMT_A1) 。
  • 在偵錯組建中,Microsoft Direct3D 運行時間會驗證目的地矩形區域描述中每個索引的來源矩形區域描述是否存在。 在零售組建中,如果索引無效, ComposeRects 會 傳回錯誤。
  • 矩形區域的數目應該小於0xFFFF,以避免數學運算期間發生內部溢位。
  • 應該使用相同的顯示裝置來建立 Surface 和頂點緩衝區, (圖形內容) 。
  • 應該為目的地介面指定本機顯示記憶體。
下列範例程式代碼顯示 ComposeRects 執行的作業:
for (UINT i=0; i < COMPOSERECTS.NumDstRects; i++) {
   if (i >= Size(VertexBuffer(hDstRectDescsVB)) / sizeof(D3DCOMPOSERECTDSTDESC))
      Ignore the rectangle;
   if (VertexBuffer(hDstRectDescsVB)[i].RectDescIndex >= Size(VertexBuffer(hSrcRectDescsVB)) / sizeof(D3DCOMPOSERECTSRCDESC))
      Ignore the rectangle;
   SourceRectangle = VertexBuffer(hSrcResource)[VertexBuffer(hDstRectDescsVB)[i].RectDescIndex];
   DestinationRectangle.X = {VertexBuffer(hDstRectDescsVB)[i].X + COMPOSERECTS.Xoffset;
   DestinationRectangle.Y = {VertexBuffer(hDstRectDescsVB)[i].Y + COMPOSERECTS.Yoffset;
   DestinationRectangle.Width = SourceRectangle.Width;
   DestinationRectangle.Height = SourceRectangle.Height;
   Perform COMPOSERECTS.Operation for each pixel;
}

規格需求

需求
最低支援的用戶端 可在 Windows Vista 和更新版本的 Windows 作業系統中使用。
目標平台 桌面
標頭 d3dumddi.h (include D3dumddi.h)

另請參閱

D3DDDIARG_COMPOSERECTS

D3DDDI_DEVICEFUNCS