// Desc: 初始化Direct3D
//-----------------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{//创建Direct3D对象, 该对象用来创建Direct3D设备对象if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )return E_FAIL;//设置D3DPRESENT_PARAMETERS结构, 准备创建Direct3D设备对象
    D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) );d3dpp.Windowed = TRUE;d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;//创建Direct3D设备对象if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp, &g_pd3dDevice ) ) ){return E_FAIL;}return S_OK;
}

HRESULT :函数返回值。如果这个函数是执行完返回的话将包含具有实际意义的数据,如果立即返回则包含状态信息--发送成功与否,并不能说明执行的如何。

HRESULT 是一种简单的数据类型,通常被属性和 ATL 用作返回值。下表说明各种不同的值。头文件 winerror.h 中包含更多的值。
名称 说明 值
S_OK 操作成功 0x00000000
E_UNEXPECTED 意外的失败 0x8000FFFF
E_NOTIMPL 未实现 0x80004001
E_OUTOFMEMORY 未能分配所需的内存 0x8007000E
E_INVALIDARG 一个或多个参数无效 0x80070057
E_NOINTERFACE 不支持此接口 0x80004002
E_POINTER 无效指针 0x80004003
E_HANDLE 无效句柄 0x80070006
E_ABORT 操作已中止 0x80004004
E_FAIL 未指定的失败 0x80004005
E_ACCESSDENIED 一般的访问被拒绝错误 0x80070005
不能简单地把返回值与 S_OK 和 S_FAIL 比较,而要用 SUCCEEDED 和 FAILED 宏进行判断。(以上内容参照百度百科)
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;
关键词是D3D_SDK_VERSION,它被定义在SDK的头文件中。在Direct3D被初始化时,D3D_SDK_VERSION作为参数传递给函数Direct3DCreate9(),并与DirectX的版本号比较,若比较不匹配则初始化将失败。这保证了系统能够创建适当的代码并正常运行,这个值本身并没有什么特别的含意,它仅仅只是个比较值。
D3DPRESENT_PARAMETERS结构
在创建Direct3D设备之前,还需要先初始化D3DPRESENT_PARAMETERS结构,该结构用于创建Direct3D设备对象。该结构定义了Direct3D设备对象的相关信息,而这些信息将会影响Direct3D设备的显示方法。该结构定义如下:

  struct D3DPRESENT_PARAMETERS{

   UINT BackBufferWidth;//指定后台缓冲区的宽度

   UINT BackBufferHeight;//指定后台缓冲区高度

   D3DFORMAT BackBufferFormat;//指定后台缓冲区的像素格式,设置为D3DFMT_UNKNOWN时,后台缓冲区与当前显卡的显示像素格式相同

   UINT BackBufferCount;//指定后台缓冲区的数量。该值可以为0、1、2、3,其中0和1时都表示创建一个后台缓冲区

   D3DMULTISAMPLE_TYPE MultiSampleType;//指定多重采样类型,用于图形反锯齿

   DWORD MultiSampleQuality;

   D3DSWAPEFFECT SwapEffect;//指定系统如何将后台缓冲区的内容复制到前台缓冲区,该成员是D3DSWAPEFFECT枚举类型

   HWND hDeviceWindow;//指定图形绘制窗口

   BOOL Windowed;//标识图形以窗口方式还全屏方式显示

   BOOL EnableAutoDepthStencil;//如果要使用Z缓冲,则把它设为TRUE

   D3DFORMAT AutoDepthStencilFormat;//如果不使用深度缓冲,那么这个参数将没有用。如果启动了深度缓冲,那么这个参数将为深度缓冲设定缓冲格式

   DWORD Flags;//可以设置为0或D3DPRESENTFLAG_LOCKABLE_BACKBUFFER

   UINT FullScreen_RefreshRateInHz;//指定显示适配器刷新屏幕的速率。以窗口显示设置为0;以全屏显示,取IDirect3D9::EnumAdapterModes()返回值

   UINT PresentationInterval;//指定后台缓存与前天缓存的最大交换频率

  };

ZeroMemory(PVOID Destination,SIZE_T Length)函数:ZeroMemory宏用0来填充一块内存区域。参数有两个,

Destination :指向一块准备用0来填充的内存区域的开始地址。
Length :准备用0来填充的内存区域的大小,按字节来计算。
CreateDevice()其包含参数按顺序:
UINT Adapter,//指定显卡序号通常设置为D3DADAPTER_DEFAULT
D3DDEVTYPE DeviceType,//指定Derect3D设备类型
HWND hFocusWindow,//指定当Direct3D程序从前台变换到后台时的提示窗口
DWORD BehaviorFlag,//指定Direct3D设备进行3D运算的工作方式
D3DPRESENT_PARAMETERS* pPresentationParameters,//指向结构体D3DPRESENT_PARAMETERS
IDirect3DDevice**  ppReturnedDeviceInterface//CreateDirect()函数将返回的Direct3D设备对象指针地址存储在它的最后一个参数ppReturnedDeviceInterface中
参考:1.http://blog.sina.com.cn/s/blog_4a0a14170100f48y.html
2.http://blog.csdn.net/warmtrue/article/details/4632330
3.《精通DirectX 3D图形与动画程序设计》

转载于:https://www.cnblogs.com/xiguapi/p/4135251.html

Direct3D初始化代码含义相关推荐

  1. python代码大全表解释-【初学】Python异常代码含义对照表

    原标题:[初学]Python异常代码含义对照表 Python常见的异常提示及含义对照表如下: 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 Keyb ...

  2. 计算机主板检测卡50,主板诊断卡怎么使用 主板诊断卡代码含义及处理方法

    对于主板诊断卡,相信不少电脑爱好者.电脑技术员都不会陌生,它是维修电脑主机必备检测工具之一.不过还是有一些朋友对主板诊断卡一知半解,甚至对主板诊断卡一无所知.主板诊断卡怎么使用?其实主要难点就在于诊断 ...

  3. DirectX11 Direct3D初始化

    Direct3D初始化 1. Direct3D初始化步骤 下面将讲解如何初始化Direct3D.我们将Direct3D的初始化过程分为如下几个步骤: 1.使用D3D11CreateDevice方法创建 ...

  4. 【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )

    文章目录 I . 主构造函数 II . 主构造函数声明属性 III . init 初始化代码块 IV . 主构造函数参数 和 成员变量访问方式 V . 主构造函数 可见性 设置 VI . 次构造函数 ...

  5. flink sql的datastream与dataset初始化代码汇总

    flink sql 数据类型 初始化代码汇总 dataset ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironme ...

  6. Spring Environment仅用于初始化代码

    从3.1版开始, Spring框架提供了对几种不同来源的抽象,通过它们您可以轻松地配置应用程序: Environment . 在这篇文章中,我描述了一个微基准测试,我可以证明该基准测试是一个方便的AP ...

  7. linux内存映射起始地址,内存初始化代码分析(三):创建系统内存地址映射

    内存初始化代码分析(三):创建系统内存地址映射 作者:linuxer 发布于:2016-11-24 12:08 分类:内存管理 一.前言 经过内存初始化代码分析(一)和内存初始化代码分析(二)的过渡, ...

  8. ARM Uboot经历——Uboot初始化代码解析

    Uboot初始化代码主要是在Uboot重定位之前的一系列处理,起源于start.s文件,涉及crt0.s和board.c等文件,会完成最系统环境最初始的设置和结构体赋值. reset的相关处理 从_s ...

  9. ARM固件开发(LPC1768启动初始化代码)

    ARM固件开发(LPC1768启动初始化代码) 一.复位 ARM启动中需要配置上电复位功能,因为这样才能确保上电之后程序处于初始状态而并非程序指针未知.通常启动代码编译器自带,而程序入口基本上都是以复 ...

最新文章

  1. 运维岗位技能风向标!
  2. 谷歌浏览器怎么重发请求_chrome 浏览器的预提取资源机制导致的一个请求发送两次的问题以及ClientAbortException异常...
  3. python获取get请求的耗时时间_突破python爬取极限,超牛逼的异步协程爬虫
  4. NOP (code)_NOP指令作用及解析
  5. 国产嵌入式操作系统发展思考
  6. LeetCode 1974. 使用特殊打字机键入单词的最少时间
  7. jQuery学习笔记03
  8. 星期天写了点蛋疼的东西(3)
  9. Xcode中导入文件报错
  10. matlab 定义离散函数,matlab离散点拟合函数
  11. python绘制拟合曲线与样本点_python 拟合曲线并求参
  12. 7篇ICLR论文,遍览联邦学习最新研究进展
  13. mac关于 E45: ‘readonly‘ option is set (add ! to override)
  14. a5m2使用方法 mysql_反転
  15. 计算机视觉入门CV之街道字符识别—01赛题理解
  16. 一文搞懂css 2D动画效果
  17. 关于AndroBench在Android 10以后性能衰减的问题分析
  18. 给toB创业程序员的建议
  19. 从FPGA到ACAP,“万能芯片”蝶变转型
  20. 《我和我的祖国》之《夺冠》:所有人都在欢呼,只有他在哭......

热门文章

  1. 七天学习计划_c#_[1]泛型类(还有六天,明天继续写!)
  2. c语言位段sizeof,C语言位段的介绍
  3. 中修改环境变量_嵌入式 Linux下永久生效环境变量bashrc
  4. python回溯算法_什么是回溯法,Python解法交流?
  5. 服务器接收ios图片无法显示,IOS下图片不能显示问题的解决办法
  6. win10创建新的计算机用户名和密码忘了,Win10 2004中要使用本计算机用户必须输入用户名和密码选项不见了如何恢复?...
  7. oracle cbo 查询展开,Oracle CBO几种基本的查询转换详解
  8. C++知识点47——类继承中的类型转换与访问权限控制(下)
  9. webpack 采坑(CleanWebpackPlugin 插件报错: CleanWebpackPlugin is not a constructor ;)
  10. Google Guava 概要