Directx11教程(11) 增加一个debug宏
现在我们在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
代码下载:
http://files.cnblogs.com/mikewolf2002/myTutorialD3D11.zip
Directx11教程(11) 增加一个debug宏的更多相关文章
- Directx11教程(9) 增加一个TimerClass类
		原文:Directx11教程(9) 增加一个TimerClass类 在上篇教程代码的基础上,我们增加一个TimerClass类,这个类的功能很简单,就是可以计算相邻2帧的时间差.利用这个时间 ... 
- Directx11教程(56) 建立一个skydome
		原文:Directx11教程(56) 建立一个skydome 本章建立一个skydome(天空穹),主要学习如何使用cube mapping. cube map就是把六张纹理当作 ... 
- Directx11教程(7) 画一个颜色立方体
		原文:Directx11教程(7) 画一个颜色立方体 前面教程我们通过D3D11画了一个三角形,本章我们将画一个颜色立方体,它的立体感更强.主要的变动是ModelClass类,在Model ... 
- Directx11教程(10) 画一个简易坐标轴
		原文:Directx11教程(10) 画一个简易坐标轴 本篇教程中,我们将在三维场景中,画一个简易的坐标轴,分别用红.绿.蓝三种颜色表示x,y,z轴的正向坐标轴. 为此,我们要先建立一个A ... 
- Directx11教程(6) 画一个简单的三角形(2)
		原文:Directx11教程(6) 画一个简单的三角形(2) 在上篇教程中,我们实现了在D3D11中画一个简单的三角形,但是,当我们改变窗口大小时候,三角形形状却随着窗口高宽比例改变而改变, ... 
- Directx11教程(5) 画一个简单的三角形(1)
		原文:Directx11教程(5) 画一个简单的三角形(1) 在本篇教程中,我们将通过D3D11画一个简单的三角形.在D3D11中,GPU的渲染主要通过shader来操作(当然还有一些操作 ... 
- Directx11教程(19) 画一个简单的地形
		原文:Directx11教程(19) 画一个简单的地形 通常我们在xz平面定义一个二维的网格,然后y的值根据一定的函数计算得到,比如正弦.余弦函数的组合等等,可以得到一个看似不错的地形或者 ... 
- Directx11教程(8) 一个新的camera类
		原文:Directx11教程(8) 一个新的camera类 本章我们将替换掉CameraClass类,实现一个稍微靠谱点的摄像机类.并通过Q,W,E,A,S,D,Z,X,C等按键实现摄像机的 ... 
- Directx11教程(4) 一个最基本D3D应用程序(2)
		原文:Directx11教程(4) 一个最基本D3D应用程序(2) 接着上篇教程的代码,本篇加入基本的D3D代码,实现一个完整的D3D11程序框架. 我们增加一个新类D3DClass, 用来处理3D渲 ... 
随机推荐
- SQL server插入数据后,获取自增长字段的值
			? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 insert into Tb_People(uname,er ... 
- 用Python输出一个杨辉三角的例子
			用Python输出一个杨辉三角的例子 这篇文章主要介绍了用Python和erlang输出一个杨辉三角的例子,同时还提供了一个erlang版杨辉三角,需要的朋友可以参考下 关于杨辉三角是什么东西,右转维 ... 
- 转:步步LINUX C--进程间通信(二)信号
			源地址:http://blog.csdn.net/jmy5945hh/article/details/7529651 linux间进程通信的方法在前一篇文章中已有详细介绍.http://blog.cs ... 
- eclipse环境问题-java版本不兼容
			有时候虽然我们给项目配置的jdk版本.项目编译版本都一直,但是还是会报如下的错误: Description Resource Path Location Type Java compiler leve ... 
- IO流14 --- 打印流的使用 --- 技术搬运工(尚硅谷)
			PrintStream 字节打印流PrintWriter 字符打印流 @Test public void test9() throws Exception { FileOutputStream fos ... 
- 入门servlet:request请求转发和共享数据
			request 请求转发:一种在服务器内部的资源跳转方式 步骤: 1.通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(Strin ... 
- mysqldump mysql数据库导出命令
			mysqldump -u用户名 -p密码 数据库名 > 导出的文件名 例如: mysqldump -uroot -p123456 test > /var/test.sql 如果要压缩就用管 ... 
- ubuntu16.04环境编译gSOAP
			一.gSOAP简介 SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换.或者更简单地说:SOAP 是用于访问网络服务的协议. SOAP 提供了一种标准的方法,使得运行在 ... 
- [转]了解screen对象的常用视图属性
			前面的话 screen对象基本上只用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素高度和宽度等.每个浏览器中的screen对象都包含着各不相同的属性.本文将详细介绍screen对象的 ... 
- OpenLayers在多个矢量图层编辑要素
			<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ... 
