原文:Directx11教程(21) 修正程序最小化异常bug

      很长时间竟然没有注意到,窗口最小化时候,程序会异常,今天调试水面程序时,随意间最小化了窗口,发现程序异常了。经过调试,原来程序最小化时候,屏幕的高度和宽度为0,此时创建深度缓冲会fail,所以在D3DClass.cpp的初始化函数中加入以下的代码,可以防止最小化时候程序异常。

D3DClass.cpp增加代码:

//Initialize函数包含完成D3D设置的所有代码。
bool D3DClass::Initialize(int screenWidth, int screenHeight, bool vsync, HWND hwnd, bool fullscreen,
    float screenDepth, float screenNear)

{

//如果屏幕高度或者宽度为0,则会创建深度缓冲失败,
//当窗口最小化时候,会出现窗口为0的情况。
if(screenWidth < 1)
    screenWidth = 1;
if(screenHeight <1)
    screenHeight = 1;

// 初始化交换链描述
ZeroMemory(&swapChainDesc, sizeof(swapChainDesc));

// 用1个后缓冲
swapChainDesc.BufferCount = 1;

//帧缓冲的大小和应用程序窗口大小相等.
swapChainDesc.BufferDesc.Width = screenWidth;
swapChainDesc.BufferDesc.Height = screenHeight;

// 后缓冲的surface的格式为DXGI_FORMAT_R8G8B8A8_UNORM.
// surface的每个像素用4个无符号的8bit[映射到0-1]来表示。NORM表示归一化。
swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;

// 如果使用垂直同步,设置后缓冲的刷新率。.
//刷新率就是一秒钟把后缓冲内容在屏幕上画出的次数。
//如果开启垂直同步,则锁定刷新率,则fps是固定的
if(m_vsync_enabled)
    {
    swapChainDesc.BufferDesc.RefreshRate.Numerator = numerator;
    swapChainDesc.BufferDesc.RefreshRate.Denominator = denominator;
    }
else
    {
    swapChainDesc.BufferDesc.RefreshRate.Numerator = 0;
    swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
    }

}

最新文章

  1. 没有神话,聊聊decimal的“障眼法”
  2. 微服务(Microservices)&mdash;&mdash;Martin Flower【翻译】
  3. python进阶笔记 thread 和 threading模块学习
  4. Arrays数组的常用方法
  5. 深入探究 WinRT 和 await
  6. iOS----关于第三方的运用(有待补充)
  7. PAT (BL) 1001
  8. org.springframework.beans.factory.BeanDefinitionStoreException
  9. 《Java编程那点事儿》读书笔记(一)——基本数据结构
  10. C#(pronounced: see sharp) 与 .NET
  11. HDU 5351 MZL&#39;s Border (规律,大数)
  12. layerX &amp;&amp; layerY
  13. 学习MVC遇到的问题
  14. Oracle行转列实例
  15. oracle游标的使用
  16. PostgreSQL的insert注入
  17. Asp.Net Core 轻松学-利用xUnit进行主机级别的网络集成测试
  18. oracle等待事件-direct path read/write
  19. Django 内的母版-子html规则
  20. Linux学习必备

热门文章

  1. 洛谷P3745 [六省联考2017]期末考试
  2. 我认为最节省时间的CSS命名规范
  3. c++ stream操作杂记
  4. JEECMS自定义标签开发步骤2
  5. Windows 10专业版激活(附激活码)
  6. Spring Cloud中Eureka开启密码认证
  7. Redis基本类型与常用命令
  8. UVA11389 The Bus Driver Problem
  9. 使用pdf.js在移动端预览pdf文档
  10. input输入框的input事件和change事件