DirectX 11 编程指南

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

微软在2009年8月的DirectXSDK中发布了DirectX的正式版本。基于对DirectX的一贯兴趣,我把DirectX Graphics的文档边看边译为中文。也算是一份学习笔记吧。

众所周知,Direct3D是在Windows平台上开发实时3D应用的软件开发接口。随着Windows操作系统的升级,Direct3D的版本也随着升级。WindowsXP对应Direct3D9的各个版本,Vista对应D3D10,10.1,Windows7则对应D3D11。所以在XP平台上是没法做D3D10及以上的开发了。不过看起来因为Win7实际上是Vista的一个升级,所以微软也准备在Vista上支持D3D11。

D3D11是D3D10的一个超集,即它包含了D3D10的所有功能,并在其渲染管线上添加了一些新的特性。根据官方的文档,D3D11的新特性包括:

ComputerShader(计算着色器)

计算着色器能把GPU当成一种通用功能的并行处理器来使用。其实在D3D9时代就已经可以应用GPU来进行GP(General-Purpose)计算了,只不过那时候需要使用一些特殊的手段来处理(比如将数据包装成“纹理”)。在D3D11中专门实现了这样一个着色器阶段来支持GP计算,应该使得开发这类应用更为方便一些了。(参考NVIDIA的CUDA 技术以及OpenCL标准)

虽然计算着色器也是通过D3DDevice进行访问的,并能和其他的图形着色器共享内存资源,但它并不直接连接到其他的着色器阶段上面。这大概是因为ComputerShader并不直接与图形渲染功能相关吧。

Dynamic Shader Linkage(动态着色器链接)

D3D11包含的SM5(Shader Model规范)支持面向对象语言的构建方式,并支持运行时的着色器链接。

多线程(Multithreading)

随着CPU的多核化趋势渐渐普及,D3DAPI对多线程的支持势在必行。D3D11对多线程提供了这样的功能支持:

  • 并发的对象创建 - 可以在多个线程中并发地进行对象(资源、着色器等)的创建。
  • 在多线程中创建命令列表 - 命令列表是一个记录了图形处理命令的序列。在D3D11中,可以在多个线程中创建命令列表,然后又主渲染线程来发送这个命令列表到渲染硬件。

Tessellation(细分)

细分技术使得能够用不同的精度等级(LOD,Level of detail)来渲染一个模型。GPU可以根据所需的LOD来处理输入的模型,以得到相应负责度的实际模型。这项技术可以大大减少内存带宽对三角形数量的限制。这项技术通过两个新的着色器阶段来实现:Hull Shader(壳着色器)和Domain Shader(域着色器)。

除了上面的4项主要的特性外,D3D11还支持:

  • 通过在创建Device的时候指定特性等级(feature level),D3D11可以在低于等级的硬件(即不完全支持D3D11规格的硬件)上运行。
  • ShaderModel 5
  • 大内存支持 支持超过4GB的资源。
  • …(有待深入了解)

 

DirectX11 不但包含了新的Direct3D 11。 还引入了两个新的图形组件: Direct2D和DirectWrite。

Direct2D是一套硬件加速的、立即模式的2D图形绘制接口。(是用来取代GDI,GDI+,DirectDraw吗?) 它能高性能、高质量地绘制2D图形、位图以及文本。D2D能与D3D及GDI良好地互操作。

DirectWrite支持高质量的文本渲染,与分辨率无关的字体轮廓线绘制,全unicode文本支持及布局处理等等。

 

在D3D API 中, Device(设备)是一个核心的概念,Device是对一个图形硬件的抽象,它负责创建和销毁其他的对象,渲染图元等功能。D3D11中,Device对象主要用来管理资源,而DeviceContext对象执行渲染操作。一个对象只能被创建它的Device使用。多个Device可以通过共享资源来共享数据,但这个共享的资源也只能在创建它的Device内使用。(意思就是说多个Device都可以访问共享对象里面的数据,但处了创建Device之外,其他Device不能直接把这个资源连接到渲染管线上使用)

每个Device都由一个ID3D11Device接口来代表,可以通过D3D11CreateDevice或者D3D11CreateDeviceAndSwapChain函数来创建这个接口。每个Device都可以使用一个或多个DeviceContext,这主要是用来支持多线程操作。

D3D11CreateDevice函数的原型如下:

HRESULT D3D11CreateDevice(IDXGIAdapter*pAdapter,D3D_DRIVER_TYPEDriverType,HMODULESoftware,UINTFlags,CONS

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值