DDPIXELFORMAT 結構 (ksmedia.h)
DDPIXELFORMAT 結構描述 DirectDrawSurface 物件的像素格式。
語法
typedef struct _DDPIXELFORMAT {
DWORD dwSize;
DWORD dwFlags;
DWORD dwFourCC;
union {
DWORD dwRGBBitCount;
DWORD dwYUVBitCount;
DWORD dwZBufferBitDepth;
DWORD dwAlphaBitDepth;
};
union {
DWORD dwRBitMask;
DWORD dwYBitMask;
};
union {
DWORD dwGBitMask;
DWORD dwUBitMask;
};
union {
DWORD dwBBitMask;
DWORD dwVBitMask;
};
union {
DWORD dwRGBAlphaBitMask;
DWORD dwYUVAlphaBitMask;
DWORD dwRGBZBitMask;
DWORD dwYUVZBitMask;
};
} DDPIXELFORMAT, *LPDDPIXELFORMAT;
成員
dwSize
指定 DDPIXELFORMAT 結構的位元元組大小。 驅動程式必須先初始化這個成員,才能使用 結構。
僅限 DirectX 9.0 和更新版本。 在輸入上,指定應用程式所使用的 Microsoft DirectX 執行時間版本。 此成員會設定為 DD_RUNTIME_VERSION,這是 DirectX 9.0 的0x00000900,其 格式 為D3DGDI2_TYPE_GETFORMAT查詢之 DD_GETFORMATDATA 結構的成員。
dwFlags
指出指定選擇性控件旗標的一組旗標。 這個成員是下列任何值的位 OR:
旗標 | 意義 |
---|---|
DDPF_ALPHA | 圖元格式描述僅限 Alpha 表面。 |
DDPF_ALPHAPIXELS | 表面具有圖元格式的 Alpha 色板資訊。 |
DDPF_ALPHAPREMULT | 圖元中的色彩元件會由圖元中的 Alpha 值預先乘以。 如果設定此旗標,也必須設定DDPF_ALPHAPIXELS旗標。 如果未設定此旗標,但已設定DDPF_ALPHAPIXELS旗標,則像素格式的色彩元件不會由alpha預先乘以。 在此情況下,色彩元件必須在執行 Alpha 混合作業時乘以 Alpha 值。 |
DDPF_BUMPDUDV | 像素格式的凸凸地圖 dUdV 數據有效。 |
DDPF_BUMPHEIGHT | 圖元格式的凸凸地圖高度數據有效。 |
DDPF_COMPRESSED | 介面接受指定格式的像素數據,並在寫入作業期間加以壓縮。 |
DDPF_D3DFORMAT | 指出紋理格式清單中的 DirectX 8.0 和更新版本格式功能專案。 此旗標不會公開給應用程式。 |
DDPF_FOURCC | FOURCC 程式代碼有效。 |
DDPF_LUMINANCE | 像素格式的亮度數據有效。 將此旗標用於僅限亮度或亮度加 Alpha 表面;然後,會在 dwLuminanceBitCount 成員中指定位深度。 |
DDPF_LUMINANCEPIXELS | 像素格式的亮度數據有效。 當掛開亮度時,請使用此旗標,例如,凸凸圖表面。 然後,在 dwBumpLuminanceBitMask 成員中指定圖元的亮度部分位掩碼。 |
DDPF_NOVEL_TEXTURE_FORMAT | 指出運行時間可能不會公開給所有應用程式的新介面格式。 |
DDPF_PALETTEINDEXED1 | 表面已編製 1 位色彩的索引。 |
DDPF_PALETTEINDEXED2 | 表面是 2 位色彩索引。 |
DDPF_PALETTEINDEXED4 | 表面已編製 4 位色彩索引。 |
DDPF_PALETTEINDEXED8 | 表面已編製8位色彩索引。 |
DDPF_PALETTEINDEXEDTO8 | 表面是 1、2 位或 4 位色彩,其索引為 8 位調色盤。 |
DDPF_RGB | 像素格式結構的 RGB 資料有效。 |
DDPF_RGBTOYUV | 介面接受 RGB 數據,並在寫入作業期間將它轉譯為 YUV 數據。 要寫入的數據格式包含在像素格式結構中。 已設定DDPF_RGB旗標。 |
DDPF_STENCILBUFFER | 表面會在 z 緩衝區的每個像素中編碼樣板和深度資訊。 |
DDPF_YUV | 像素格式結構的 YUV 數據有效。 |
DDPF_ZBUFFER | 像素格式描述僅限 z 緩衝區的介面。 |
DDPF_ZPIXELS | 表面是 RGBZ 格式。 |
dwFourCC
指定介面格式程式代碼,包括D3DFORMAT列舉類型中的任何程序代碼。 某些 FOURCC 程式代碼是D3DFORMAT的一部分。 如需D3DFORMAT的詳細資訊,請參閱 SDK 檔。 硬體廠商也可以定義並提供其硬體特有的格式代碼。
dwRGBBitCount
指定每個圖元的 RGB 位數目, (4、8、16、24 或 32) 。
dwYUVBitCount
指定每個圖元的 YUV 位數目。
dwZBufferBitDepth
指定 Z 緩衝區位深度 (8、16、24 或 32 位) 。
dwAlphaBitDepth
指定Alpha色板位深度。
dwRBitMask
指定紅色位的遮罩。
dwYBitMask
指定 Y 位的遮罩。
dwGBitMask
指定綠色位的遮罩。
dwUBitMask
指定 U 位的遮罩。
dwBBitMask
指定藍色位的遮罩。
dwVBitMask
指定 V 位的遮罩。
dwRGBAlphaBitMask
Alpha 色板的遮罩。
dwYUVAlphaBitMask
Alpha 色板的遮罩。
dwRGBZBitMask
Z 通道的遮罩。
dwYUVZBitMask
Z 通道的遮罩。
備註
DirectX 8.0 和更新版本的運行時間會對作業 (op) 列表施加下列規則:
允許任何 DS 格式只有一個 Endian-ness (big 或 small) ,例如 D15S1 或 S1D15,而不是與其他位無關。
清單應該只包含一個 16bpp 格式的D3DFORMAT_OP_DISPLAYMODE (,例如,它不應該列舉 5:5:5 和 5:6:5) 。
清單不應包含任何已設定D3DFORMAT_OP_DISPLAYMODE或D3DFORMAT_OP_3DACCELLERATION的Alpha格式。
只有在同時設定D3DFORMAT_OP_DISPLAYMODE旗標時,才能設定D3DFORMAT_OP_3DACCELLERATION旗標。
如果驅動程式支援可鎖定的 D16,它應該會在作業清單中回報D3DFMT_D16_LOCKABLE;否則,它應該會回報D3DFMT_D16。
支援多重取樣的驅動程序必須以可支援多重取樣的深度/樣板格式填入 MultiSampleCaps 。 這可讓運行時間偵測驅動程式是否支援對轉譯目標和 Z 緩衝區格式的組合進行多重取樣。 如需有關延展式blt多重取樣相關限制的詳細資訊,請參閱 SDK 檔中D3DCAPS8結構中包含的點陣caps 中D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE上限的描述。
在設定 wFlipMSTypes 和 wBltMSTypes 中的位時,會使用 d3d8types.h 中定義的列舉型別D3DMULTISAMPLE_TYPE。 若要指定每個圖元特定樣本數目的支援,只要以邏輯方式將 1 從D3DMULTISAMPLE_TYPE列舉類型的適當值移位 1,或這會移入適當的欄位 (wFlipMSTypes 和 wBltMSTypes) 。
例如,如果驅動程式在翻轉 (全螢幕模式時支援每個圖元的兩個和四個樣本) ,並在X8R8G8B8介面上 (視窗模式) 時,會以表面格式清單回報下列專案。
DDPIXELFORMAT ddpf;
ZeroMemory(&ddpf, sizeof(ddpf));
ddpf.dwSize = sizeof(DDPIXELFORMAT);
ddpf.dwFlags = DDPF_D3DFORMAT;
ddpf.dwFourCC = D3DFMT_X8R8G8B8;
ddpf.dwOperations = D3DFORMAT_OP_DISPLAYMODE |
D3DFORMAT_OP_3DACCELERATION;
ddpf.MultiSampleCaps.wFlipMSTypes = (1 << (D3DMULTISAMPLE_4_SAMPLES âˆ' 1))
| (1 << (D3DMULTISAMPLE_2_SAMPLES âˆ' 1));
ddpf.MultiSampleCaps.wBltMSTypes = (1 << (D3DMULTISAMPLE_4_SAMPLES âˆ' 1));
當報表格式時,不需要指定 1 << (D3DMULTISAMPLE_NONE - 1) 。 假設任何報告的格式也可以在不進行多重取樣的情況下使用。 如果硬體支援使用 z 緩衝區進行多重取樣轉譯,則報告的 z 緩衝區格式也應該包含每個圖元支援的樣本。
規格需求
需求 | 值 |
---|---|
標頭 | ksmedia.h (包含 Ddraw.h) |