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

新交换链的后退缓冲区的宽度(以像素为单位)。 如果 窗口为FALSE (演示文稿为全屏) ,则此值必须与通过 EnumAdapterModes 找到的枚举显示模式之一的宽度相等。 如果 WindowedTRUEBackBufferWidthBackBufferHeight 为零,则 hDeviceWindow (或焦点窗口的相应维度(如果 hDeviceWindowNULL) )。

BackBufferHeight

类型: UINT

新交换链的后退缓冲区的高度(以像素为单位)。 如果 窗口为FALSE (演示文稿为全屏) ,则此值必须与通过 EnumAdapterModes 找到的枚举显示模式之一的高度相等。 如果 WindowedTRUEBackBufferWidthBackBufferHeight 为零,则 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

质量级别。 有效范围介于零到 1 之间,小于 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 会使用此内容。

  • 对于全屏应用程序,这是顶部窗口 ((焦点窗口) )的句柄。

    对于使用多个全屏设备的应用程序 ((例如多监视系统) ),只有一台设备可以将焦点窗口用作设备窗口。 所有其他设备必须具有唯一的设备窗口。

  • 对于窗口模式应用程序,此句柄将是 “演示”的默认目标窗口。 如果此句柄为 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

要求

要求 Value
标头
D3D9Types.h

另请参阅

Direct3D 结构

CreateDevice

CreateAdditionalSwapChain

现值

重置