现在我们在common.h中增加一个debug的宏,在每个d3d11函数后调用,如果d3d函数出错,它能够给出程序中错误的代码行数。
common.h代码如下:
#pragma once
#include <d3d11.h> #include <d3dx10math.h>
#if defined(DEBUG) || defined(_DEBUG) #ifndef D3D_DEBUG_INFO #define D3D_DEBUG_INFO #endif #endif
#if defined(DEBUG) || defined(_DEBUG) #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> #endif
#include <dxerr.h> #include <cassert>
//一个简单的错误检测宏
#if defined(DEBUG) | defined(_DEBUG) #ifndef HR #define HR(x) \ { \ HRESULT hr = (x); \ if(FAILED(hr)) \ { \ DXTrace(__FILE__, (DWORD)__LINE__, hr, L#x, true); \ } \ } #endif
#else #ifndef HR #define HR(x) (x) #endif #endif
//定义一些常用颜色 const D3DXVECTOR4 WHITE(1.0f, 1.0f, 1.0f, 1.0f); const D3DXVECTOR4 BLACK(0.0f, 0.0f, 0.0f, 1.0f); const D3DXVECTOR4 RED(1.0f, 0.0f, 0.0f, 1.0f); const D3DXVECTOR4 GREEN(0.0f, 1.0f, 0.0f, 1.0f); const D3DXVECTOR4 BLUE(0.0f, 0.0f, 1.0f, 1.0f); const D3DXVECTOR4 YELLOW(1.0f, 1.0f, 0.0f, 1.0f); const D3DXVECTOR4 CYAN(0.0f, 1.0f, 1.0f, 1.0f); //蓝绿色 const D3DXVECTOR4 MAGENTA(1.0f, 0.0f, 1.0f, 1.0f);//洋红色
const D3DXVECTOR4 BEACH_SAND(1.0f, 0.96f, 0.62f, 1.0f); const D3DXVECTOR4 LIGHT_YELLOW_GREEN(0.48f, 0.77f, 0.46f, 1.0f); const D3DXVECTOR4 DARK_YELLOW_GREEN(0.1f, 0.48f, 0.19f, 1.0f); const D3DXVECTOR4 DARKBROWN(0.45f, 0.39f, 0.34f, 1.0f);
现在我们修改每一个D3D11函数的调用,比如
// 创建交换链,设备以及设备上下文. result = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL,createDeviceFlags, &featureLevel, 1, D3D11_SDK_VERSION, &swapChainDesc, &m_swapChain, &m_device, NULL, &m_deviceContext); if(FAILED(result)) { HR(result); return false; } 其它类似的代码我就不贴了。
完整的代码请参考:
工程文件myTutorialD3D11_10
代码下载: