关于D3DSWAPEFFEC-D3DSWAPEFFECT_DISCARD 变量的结束

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;

设置SwapEffect为D3DSWAPEFFECT_DISCARD时:让显卡选择是执行FLIP(翻转)或者COPY(复制)模式。

1.在windowed=TRUE      BackBufferCount=1 情况下,启用的是COPY模式。

2.   在windowed=TRUE      BackBufferCount=2 情况下,启用的是FLIP模式。

1.在windowed=FALSE       BackBufferCount=1 情况下,启用的是FLIP模式。

### 设置 D3DPRESENT_PARAMETERS 的刷新率 在 `D3DPRESENT_PARAMETERS` 结构体中,可以通过设置 `FullScreen_RefreshRateInHz` 成员来定义显示设备的刷新率。此成员仅适用于全屏模式,在窗口模式下会被忽略。 对于全屏模式下的应用程序,可以枚举可用的显示器模式,并从中选择合适的刷新率。下面是一个简单的代码示例展示如何配置该参数: ```cpp // 初始化呈现参数结构 ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = FALSE; // 设定为全屏模式 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.hDeviceWindow = hWnd; // 枚举适配器模式列表以找到支持的最佳分辨率和刷新率组合 D3DDISPLAYMODE* pModeList = nullptr; UINT modeCount = g_pD3D->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8); pModeList = new D3DDISPLAYMODE[modeCount]; for (UINT i = 0; i < modeCount; ++i) { g_pD3D->EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, i, &pModeList[i]); } // 假设选择了第一个匹配条件的模式作为目标模式 if (modeCount > 0) { d3dpp.BackBufferFormat = pModeList[0].Format; d3dpp.BackBufferWidth = pModeList[0].Width; d3dpp.BackBufferHeight = pModeList[0].Height; // 设置刷新率为所选模式中的值 d3dpp.FullScreen_RefreshRateInHz = pModeList[0].RefreshRate; } delete[] pModeList; ``` 需要注意的是,当处于窗口化运行时,应将 `FullScreen_RefreshRateInHz` 设置为零或保持默认状态,因为此时刷新率不由 Direct3D 控制而是取决于操作系统的安排[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值