窗口化与全屏设定的区别
来源:互联网 发布:淘宝一个差评扣几分 编辑:程序博客网 时间:2024/06/05 18:25
经过我的实验,以及阅读DX的SDK,我得出了以下的结论:
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = FALSE;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = FALSE;
光这样,创建出来的不是全屏的,根据SDK里面的说法,
Width and height of the new swap chain's back buffers, in pixels. If Windowed is FALSE (the presentation is full-screen), these values must equal the width and height of one of the enumerated display modes found through IDirect3D9::EnumAdapterModes. If Windowed is TRUE and either of these values is zero, the corresponding dimension of the client area of the hDeviceWindow (or the focus window, if hDeviceWindow is NULL) is taken.
The back buffer format. For more information about formats, see D3DFORMAT. This value must be one of the render-target formats as validated by IDirect3D9::CheckDeviceType. You can use IDirect3DDevice9::GetDisplayMode to obtain the current format.
这三个参数在Windowed 为FALSE的时候必须为显示器正确的值.不能使用默认值,这样才能正确的全屏成功,否则在CreateDevice的时候就会失败.
代码应该这么写:
D3DDISPLAYMODE d3ddm;
//D3DADAPTER_DEFAULT表示默认显卡
g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = FALSE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.BackBufferWidth = d3ddm.Width;
d3dpp.BackBufferHeight = d3ddm.Height;
//D3DADAPTER_DEFAULT表示默认显卡
g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = FALSE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;
d3dpp.BackBufferWidth = d3ddm.Width;
d3dpp.BackBufferHeight = d3ddm.Height;
最有意思的是D3DPRESENT_PARAMETERS::BackBufferWidth以及D3DPRESENT_PARAMETERS::BackBufferHeight,这两个参数必须和显示器一致,那么如果当前显示效果是1024*768,而你想游戏是800*600,那么你必须先设置一下当前的分辨率(目前我是这么理解的).
顺便说一下D3DPRESENT_PARAMETERS::SwapEffect这个参数,这个决定了swap chain在Present发生的时候的行为,是拷贝还是丢弃,一般使用D3DSWAPEFFECT_DISCARD,这样Present发生的时候,显示卡可以按照最优化的方式来处理front buffer,因为程序明确表示front buffer里面的数值甚至可以被丢弃,在Present之后不会有代码使用它.这样可以尽量加快处理速度.
再说一下,上面是基于当前的理解,有不妥之处,往指正.
- 窗口化与全屏设定的区别
- 全屏与窗口,全屏交互
- 窗口透明度的设定
- 游戏窗口模式和全屏模式的区别在哪?
- 全屏的窗口
- FXML如何设定窗口与内面板的最大化
- VB窗口全屏与置顶
- ddraw全屏与窗口初始化
- 如何实现D3D全屏与窗口的转换
- 如何实现D3D全屏与窗口的转换
- MFC 全屏与窗口切换,类似浏览器的F11功能
- 文本背景透明与窗口全屏的相互影响
- 窗口模式与全屏模式切换,创建全屏窗口
- QT中关于窗口全屏显示与退出全屏的实现
- QT中关于窗口全屏显示与退出全屏的实现
- D3D11与D3D9全屏/窗口化切换差异
- 创建一个全屏的窗口
- 子窗口全屏的问题
- 常用排序算法
- 3D游戏从入门到精通-12
- 文件夹右键直接进入CMD的方法
- 关于地形编辑器的一些想法
- 强迫自己每天抽点时间做做操
- 窗口化与全屏设定的区别
- widows 2003 DNS
- Google Talk支持文件传送了
- 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法
- 世界上最远的距离
- 学习C++编程的方法
- MVC模式示例[第一辑]
- [编程]对编程这项工作的认识——以一个学生的角度
- 使用String还是StringBuffer?