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,以避免數學運算期間發生內部溢位。
- 表面和頂點緩衝區應該使用相同的顯示裝置來建立(圖形內容)。
- 應該為目的地介面指定本機顯示記憶體。
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 (包括 D3dumddi.h) |