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 找到的枚举显示模式之一的宽度。 如果 WindowedTRUEBackBufferWidthBackBufferHeight 为零,则 hDeviceWindow (或焦点窗口的工作区的相应维度,如果 hDeviceWindowNULL ,则采用) 。

BackBufferHeight

类型: UINT

新交换链的后台缓冲区的高度(以像素为单位)。 如果 WindowedFALSE (演示文稿是全屏) ,则此值必须等于通过 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枚举类型的成员。 该值必须D3DMULTISAMPLE_NONE,除非 SwapEffect 已设置为 D3DSWAPEFFECT_DISCARD。 仅当交换效果D3DSWAPEFFECT_DISCARD时,才支持多重采样。

MultiSampleQuality

类型: DWORD

质量级别。 有效范围介于 0 到 1 之间,比 CheckDeviceMultiSampleType 使用的 pQualityLevels 返回的级别少 1。 传递较大的值将返回错误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

设备窗口确定屏幕上后台缓冲区的位置和大小。 在 演示期间,当后台缓冲区内容复制到前缓冲区时,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

要求

要求
标头
D3D9Types.h

请参阅

Direct3D 结构

CreateDevice

CreateAdditionalSwapChain

目前

重置