D3DPRESENT_PARAMETERS 結構
描述簡報參數。
語法
typedef struct D3DPRESENT_PARAMETERS {
UINT BackBufferWidth;
UINT BackBufferHeight;
D3DFORMAT BackBufferFormat;
UINT BackBufferCount;
D3DMULTISAMPLE_TYPE MultiSampleType;
DWORD MultiSampleQuality;
D3DSWAPEFFECT SwapEffect;
HWND hDeviceWindow;
BOOL Windowed;
BOOL EnableAutoDepthStencil;
D3DFORMAT AutoDepthStencilFormat;
DWORD Flags;
UINT FullScreen_RefreshRateInHz;
UINT PresentationInterval;
} D3DPRESENT_PARAMETERS, *LPD3DPRESENT_PARAMETERS;
成員
-
BackBufferWidth
-
類型: UINT
-
新交換鏈結背面緩衝區的寬度,以圖元為單位。 如果 Windowed 是 FALSE (簡報是全螢幕) ,這個值必須等於透過 EnumAdapterModes找到的其中一個列舉顯示模式的寬度。 如果Windowed為TRUE,且BackBufferWidth或BackBufferHeight為零,則為 hDeviceWindow (或焦點視窗的對應維度,如果採用hDeviceWindow為Null) 。
-
BackBufferHeight
-
類型: UINT
-
新交換鏈結後端緩衝區的高度,以圖元為單位。 如果 Windowed 是 FALSE (簡報是全螢幕) ,這個值必須等於透過 EnumAdapterModes找到的其中一個列舉顯示模式的高度。 如果Windowed為TRUE,且BackBufferWidth或BackBufferHeight為零,則為 hDeviceWindow (或焦點視窗的對應維度,如果採用hDeviceWindow為Null) 。
-
BackBufferFormat
-
類型: D3DFORMAT
-
上一個緩衝區格式。 如需格式的詳細資訊,請參閱 D3DFORMAT。 此值必須是 CheckDeviceType所驗證的其中一個轉譯目標格式。 您可以使用 GetDisplayMode 來取得目前的格式。
事實上,在視窗模式中,可以針對 BackBufferFormat 指定D3DFMT_UNKNOWN。 這會告訴執行時間使用目前的顯示模式格式,並不需要呼叫 GetDisplayMode。
針對視窗化應用程式,如果硬體支援色彩轉換,則後端緩衝區格式不再需要符合顯示模式格式,因為如果硬體支援色彩轉換) ,則現在可以由硬體 (完成。 可能的後端緩衝區格式集受到限制,但執行時間會允許任何有效的背景緩衝區格式呈現給任何桌面格式。 (桌面上可操作裝置的額外需求;裝置通常不會在每個圖元模式 8 位中運作。)
全螢幕應用程式無法進行色彩轉換。
-
BackBufferCount
-
類型: UINT
-
使用 Direct3D 9Ex) 時,此值可以是介於 0 到 D3DPRESENT_BACK_BUFFERS_MAX (之間或 D3DPRESENT_BACK_BUFFERS_MAX_EX 。 0 的值會視為 1。 如果無法建立後端緩衝區數目,執行時間將會失敗方法呼叫,並以可建立的後端緩衝區數目填滿此值。 因此,應用程式可以使用相同的D3DPRESENT_PARAMETERS結構呼叫 方法兩次,並預期第二次運作。
如果無法建立一個後端緩衝區,此方法就會失敗。 BackBufferCount的值會影響允許的交換效果集。 具體而言,任何D3DSWAPEFFECT_COPY交換效果都需要只有一個後端緩衝區。
-
MultiSampleType
-
D3DMULTISAMPLE_TYPE列舉型別的成員。 除非 SwapEffect 設定為 D3DSWAPEFFECT_DISCARD,否則此值必須D3DMULTISAMPLE_NONE。 只有在交換效果D3DSWAPEFFECT_DISCARD時,才支援多重取樣。
-
MultiSampleQuality
-
類型: DWORD
-
品質等級。 有效範圍介於零到一個小於 CheckDeviceMultiSampleType所使用 pQualityLevels 所傳回的層級之間。 傳遞較大的值會傳回錯誤D3DERR_INVALIDCALL。 轉譯目標或深度樣板表面和 D3DMULTISAMPLE_TYPE 的配對值必須相符。
-
SwapEffect
-
類型: D3DSWAPEFFECT
-
D3DSWAPEFFECT列舉型別的成員。 執行時間會保證有關緩衝區交換行為的隱含語意;因此,如果 Windowed 為 TRUE 且 SwapEffect 設定為 D3DSWAPEFFECT_FLIP,執行時間將會建立一個額外的背景緩衝區,並在簡報時間複製哪一個緩衝區成為前端緩衝區。
D3DSWAPEFFECT_COPY要求 BackBufferCount 設定為 1。
D3DSWAPEFFECT_DISCARD會在偵錯執行時間中強制執行,方法是在呈現緩衝區之後填滿任何緩衝區的雜訊。
Direct3D9 與 Direct3D9Ex 之間的差異:
- 在 Direct3D9Ex 中,會新增 D3DSWAPEFFECT_FLIPEX,以指定應用程式採用翻轉模式時。 也就是說,應用程式框架會在視窗模式中傳遞 (,而不是將) 複製到桌面視窗管理員 (DWM) 以進行組合。 翻轉模式提供更有效率的記憶體頻寬,並可讓應用程式利用全螢幕呈現的統計資料。 它不會變更全螢幕行為。 從 Windows 7 開始,即可使用翻轉模式行為。
-
hDeviceWindow
-
類型: HWND
-
裝置視窗會決定螢幕上後端緩衝區的位置和大小。 當後端緩衝區內容在 Present期間複製到前端緩衝區時,Direct3D 會使用此方式。
針對全螢幕應用程式,這是頂端視窗 (的控制碼,這是焦點視窗) 。
對於使用多個全螢幕裝置的應用程式 (例如多監視系統) ,只有一個裝置可以使用焦點視窗作為裝置視窗。 所有其他裝置都必須有唯一的裝置視窗。
如果是視窗模式應用程式,此控制碼將會是 Present的預設目標視窗。 如果此控制碼為 Null,則會採用焦點視窗。
請注意,執行時間不會嘗試反映視窗大小中的使用者變更。 重設此視窗時,不會隱含重設背景緩衝區。 不過, Present 方法會自動追蹤視窗位置變更。
-
視窗
-
類型: BOOL
-
如果應用程式執行視窗,則為TRUE;如果應用程式執行全螢幕,則為FALSE。
-
EnableAutoDepthStencil
-
類型: BOOL
-
如果此值為 TRUE,Direct3D 會管理應用程式的深度緩衝區。 裝置會在建立時建立深度樣板緩衝區。 深度樣板緩衝區會自動設定為裝置的轉譯目標。 重設裝置時,深度樣板緩衝區會自動終結,並在新的大小中重新建立。
如果 EnableAutoDepthStencil 為 TRUE,則 AutoDepthStencilFormat 必須是有效的深度樣板格式。
-
AutoDepthStencilFormat
-
類型: D3DFORMAT
-
D3DFORMAT列舉型別的成員。 裝置將建立的自動深度樣板表面格式。 除非 EnableAutoDepthStencil 為 TRUE,否則會忽略此成員。
-
旗標
-
類型: DWORD
-
其中一個 D3DPRESENTFLAG 常數。
-
FullScreen_RefreshRateInHz
-
類型: UINT
-
顯示配接器重新整理畫面的速率。 值取決於應用程式執行所在的模式:
- 如果是視窗模式,重新整理速率必須是 0。
- 針對全螢幕模式,重新整理速率是 EnumAdapterModes所傳回的其中一個重新整理速率。
-
PresentationInterval
-
類型: UINT
-
交換鏈結後端緩衝區可以呈現給前端緩衝區的最大速率。 如需支援的模式和間隔的詳細說明,請參閱 D3DPRESENT。
規格需求
需求 | 值 |
---|---|
標頭 |
|
另請參閱