由FPS到CreateDevice的渲染结构体参数的理解

来源:互联网 发布:ssh 远程端口转发 编辑:程序博客网 时间:2024/04/28 05:09

初学DirectX,网上N多资料和源码。

 http://dx-engine.googlecode.com/svn/trunk

找了一篇源码作参考,只写了一个框架,可是FPS怎么也无法突破80,看有人的实例FPS动辄上万。于是开始查找原因,最终锁定CreateDevice的渲染结构体参数,借机全面深入了解了CreateDevice的渲染结构体参数。


D3DPRESENT_PARAMETERS d3dpp;
d3dpp.BackBufferWidth = 800;                                  //分辨率
d3dpp.BackBufferHeight = 600;
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;       //像素格式
d3dpp.BackBufferCount = 1;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;   //抗锯齿:无
d3dpp.MultiSampleQuality = 0;                                        //抗锯齿等级
d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP;       //翻转方式:D3DSWAPEFFECT_DISCARD:一般用于全屏、每帧刷新;
                                                                //D3DSWAPEFFECT_FLIP:双缓冲
                                                                //D3DSWAPEFFECT_COPY:从后缓冲拷贝
                                                                //D3DSWAPEFFECT_COPY_VSYNC:从后缓冲拷贝并垂直同步,防止画面撕裂
d3dpp.hDeviceWindow = hWnd;                     //窗口句柄
d3dpp.Windowed = false;                               //是否全屏
d3dpp.EnableAutoDepthStencil = true;            //是否有深度缓存和模板缓存
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;    //深度缓存和模板缓存的格式 
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;      //刷新频率

d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;//D3DPRESENT_INTERVAL_DEFAULT默认方式:不超过屏幕刷新率

//D3DPRESENT_INTERVAL_IMMEDIATE代表即时刷新//D3DPRESENT_INTERVAL_ONE代表屏幕刷新率标准


1.PresentationInterval 

FPS无法突破80原因就在PresentationInterval使用D3DPRESENT_INTERVAL_DEFAULT上,使用D3DPRESENT_INTERVAL_IMMEDIATE可以得到超高的FPS,但是超出屏幕刷新频率会造成各种画面显示问题,建议使用D3DPRESENT_INTERVAL_DEFAULT。


2. 像素格式

D3DFMT_R8G8B8 表示一个24位像素,从左开始,8位分配给红色,8位分配给绿色,8位分配给蓝色。

D3DFMT_X8R8G8B8 表示一个32位像素,从左开始,8位不用,8位分配给红色,8位分配给绿色,8位分配给蓝色。

D3DFMT_A8R8G8B8 表示一个32位像素,从左开始,8位为ALPHA通道,8位分配给红色,8位分配给绿色,8位分配给蓝色。

D3DFMT_A16B16G16R16F 表示一个64位浮点像素,从左开始,16位为ALPHA通道,16位分配给蓝色,16位分配给绿色,16位分配给红色。

D3DFMT_A32B32G32R32F 表示一个128位浮点像素,从左开始,32位为ALPHA通道,32位分配给蓝色,32位分配给绿色,32位分配给红色。


3. 深度缓冲格式

深度缓冲的格式决定着深度测试的精确性。一个24位的深度缓冲比16位的深度缓冲更精确。通常,应用程序在24位深度缓冲下就能工作的很好,但是Direct3D也同时支持32位的深度缓冲。

D3DFMT_D32 表示32位深度缓冲

D3DFMT_D24S8 表示24位深度缓冲并保留8位模版缓冲(stencil buffer)

D3DFMT_D24X8 表示24位深度缓冲

D3DFMT_D24X4S4 表示24位深度缓冲并保留4位模版缓冲

D3DFMT_D16 表示16位深度缓冲


原创粉丝点击