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

新交換鏈結背面緩衝區的寬度,以圖元為單位。 如果 WindowedFALSE (簡報是全螢幕) ,這個值必須等於透過 EnumAdapterModes找到的其中一個列舉顯示模式的寬度。 如果WindowedTRUE,且BackBufferWidthBackBufferHeight為零,則為 hDeviceWindow (或焦點視窗的對應維度,如果採用hDeviceWindowNull) 。

BackBufferHeight

類型: UINT

新交換鏈結後端緩衝區的高度,以圖元為單位。 如果 WindowedFALSE (簡報是全螢幕) ,這個值必須等於透過 EnumAdapterModes找到的其中一個列舉顯示模式的高度。 如果WindowedTRUE,且BackBufferWidthBackBufferHeight為零,則為 hDeviceWindow (或焦點視窗的對應維度,如果採用hDeviceWindowNull) 。

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

D3DMULTISAMPLE_TYPE列舉型別的成員。 除非 SwapEffect 設定為 D3DSWAPEFFECT_DISCARD,否則此值必須D3DMULTISAMPLE_NONE。 只有在交換效果D3DSWAPEFFECT_DISCARD時,才支援多重取樣。

MultiSampleQuality

類型: DWORD

品質等級。 有效範圍介於零到一個小於 CheckDeviceMultiSampleType所使用 pQualityLevels 所傳回的層級之間。 傳遞較大的值會傳回錯誤D3DERR_INVALIDCALL。 轉譯目標或深度樣板表面和 D3DMULTISAMPLE_TYPE 的配對值必須相符。

SwapEffect

類型: D3DSWAPEFFECT

D3DSWAPEFFECT列舉型別的成員。 執行時間會保證有關緩衝區交換行為的隱含語意;因此,如果 WindowedTRUESwapEffect 設定為 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列舉型別的成員。 裝置將建立的自動深度樣板表面格式。 除非 EnableAutoDepthStencilTRUE,否則會忽略此成員。

旗標

類型: DWORD

其中一個 D3DPRESENTFLAG 常數。

FullScreen_RefreshRateInHz

類型: UINT

顯示配接器重新整理畫面的速率。 值取決於應用程式執行所在的模式:

  • 如果是視窗模式,重新整理速率必須是 0。
  • 針對全螢幕模式,重新整理速率是 EnumAdapterModes所傳回的其中一個重新整理速率。

PresentationInterval

類型: UINT

交換鏈結後端緩衝區可以呈現給前端緩衝區的最大速率。 如需支援的模式和間隔的詳細說明,請參閱 D3DPRESENT

規格需求

需求
標頭
D3D9Types.h

另請參閱

Direct3D 結構

CreateDevice

CreateAdditionalSwapChain

目前

重 置