D3D初始化一

      少说多做,开干:

 

      微软设计DirectX的目的其实上,让程序员轻松上阵,不用了解设备的底层。而DirectX扮演的角色便是代替程序员与底层设备打交道而已。 它的设计模式应用了COM技术,所谓COM技术说白了就是用接口实现另一相关接口。特点是独立于编程语言、向下兼容的特性。C-OM对象有自己的内存管理。当我们使用完一个COM的接口的时候,要记得用Release释放。 本文的目的是,借此复习下D3D的初始化。 那D3D的初始化,究竟如何做呢,在学习D3D前,我们有必要了解一下图形学的基础知识和数据类型:

 

      (1)表面:D3D中的表面是IDirect3DSurface9。那它是做什么的呢?实际上它保存了2D图形数据,是个像素点阵而已。内存布局是线性数组。所谓线性的概念就是内存排版是连续的。那既然知道这个了,有人会说,那它的具体应用是什么呢?可能聪明的你,我这样一描述,你就知道它是做什么的啦!没错,它是用来读写表面数据的,此外它还有一个额外的功能就是返回表面信息,之所以返回表面信息,是给程序员能够更改表面数据留下的后门。现在只需了解即可!

 

      (2)多重采样机制:由于D3D是用表面来描述表面数据的,在正常显示的时候,可能会存在一定程度的损伤。基于这个原因,多重采样机制(Multisampling)诞生了。它的目的就是尽量柔化这个缺陷。它有一个特定的枚举变量来指定:D3DMULTISAMPLE。具体参见DirectX的API,如果不想看英文的,那你就从网上搜下。。。额外需要注意一点的是,尽量不要使用全屏抗锯齿!

 

      (3)像素的格式:当我们创建一个表面或者纹理的时候,经常需要指定这些D3D资源的像素格式,它是由D3D的FORMAT枚举类型所指定的。最为常用的有一下几种:D3DFORMAT_R8G8B8、D3DFORMAT_A8R8G8B8、D3DFORMAT_X8R8G8B8。还有一点需要声明的是,因为现在的处理器都是32位的啦,所以,你使用后两种方式,它的执行效率会高于第一种。

 

      (4)内存池:D3D中的内存池是做什么的呢。它实际上保存的是表面和D3D的一些资源。D3D的内存池的指定,是由D3DPOOL来指定的。一般的我们推荐使用D3DPOOL_MANAGER和D3DPOOL_DEFAULT。最好把所有的资源放置在D3DPOOL_MANAGER里边,除非有特殊情况需要将其指定在D3DPOOL_DEFAULT里边。放在D3DPOOL_MANAGED里的资源被Direct3D runtime 管理,这些资源只有在频繁使用时会被Direct3D runtime放到显示内存里,方便GPU快速取用.Direct3D runtime很少会引起明显的性能问题,但如果性能分析报告(profile)显示这种性能瓶颈确实存在于此,那么人工地把关键资源转而放在D3DPOOL_DEFAULT里也会是一种解决方案(这样资源就会呆在显示内存里,GPU可以快速取用)。如果你想更为细致的了解这块,请参阅:http://school.ogdev.net/ArticleShow.asp?id=5989&categoryid=9。锁定操作会影响CPU-GPU的协作效率,所以你希望尽可能少的锁定次数.如果有大量数据需要处理,考虑分而治之.这样程序的效率便不会有显著的下降.一种可能的实作技术就是维护一个保存了待执行命令的队列,一桢只执行1个(或2,3…个),而不管其后还有多少命令在等待。以上所述现在仅需了解,随着探讨慢慢深入!

 

      (5)交换链和页面切换。其实这块,你做个了解就可以。这是D3D自带的双缓冲处理技术。如果你想深入了解,请参阅相关的技术文章!

 

      (6)深度缓冲:深度缓冲也是一个表面,但它存储的不是表面图像数据,而是用来保存图像深度信息的。一张图片的规格如果是640*480像素分辨率的图片,那它就有与之对应的640*480个深度信息。说白了深度缓冲对于D3D的意义就是确定哪个像素先被画出来。还有一个概念就是深度缓冲的格式。深度缓冲的格式影响着深度测试的精确性。一个24位的深度值要比一个16位的深度值更为精确。类型是D3DFORMAT枚举类型。

 

      (7)顶点处理:顶点处理时D3D图形学的基础。它能够通过两种方法被处理,一种是软件,一种是硬件。使用硬件处理总是首选的,因为它比软件更快而且不占用CPU资源,这意味着CPU可以有更多的时间去处理其他的模块。还有就是,如果硬件顶点处理时通过的,那意味着它也支持硬件几何变化、及拥有光栅化处理的能力!

 

      (8)设备能力:Direct3D支持的每一特性都对应于一个D3DCAPS9结构中的一个数据。初始化一个D3DCAPS9实例,应该从你的设备实际特性为基础。因此在我们的应用程序里,我们能够通过检测D3DCAPS9结构所对应的某一成员来检测设备是否支持这一特性。 以上简要介绍了在初始化D3D之前,需要了解的一些个概念。下篇,一块进行D3D的初始化演示!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值