.plan

everybody lies

导航

Emptyproject分析

Emptyproject分析(SimpleSample)

1,InitApp()
WinMain中有一个InitApp(),在sample中存在,但是在emptyproject中没有,该函数是用于设定已经声明的一些一般变量的初始值的。比如某些按钮。
2,IsDeviceAcceptable()
被WinMain使用  DXUTCreateDevice( D3DADAPTER_DEFAULT, true, 640, 480, IsDeviceAcceptable, ModifyDeviceSettings );的方式调用。
主要用于判断显卡的功能是否符合程序所需,DXUTCreateDevice不断切换显卡性能的组合,针对每个组合(setting)进行IsDeviceAcceptable的测试,直到返回true。
3,ModifyDeviceSettings()
寻找显卡能够支持的功能。
4,OnCreatDevice()
对D3D相关的变量进行初始化,有字体,设备,阴影,模型,纹理等。
5,OnResetDevice()
做一些还原设定,主要是g_pFont,g_pEffect,g_pTexSprite,建立一个Camera,设定视窗右上角和右下角的设定(对话框)
继而进入DXUTMainLoop(),游戏循环,会不断调用OnFrameMove()和OnFrameRender()

6,OnFrameMove()
7,OnFrameRender()
在主循环中,每当需要重画一个新画面的时候,先进入Move来设置一些数值,比如Camera的位置,然后使用Render来进行渲染。
Render先清理buffer,使用Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(0, 45, 50, 170), 1.0f, 0)来实现。
D3D中有三种BUFFER:
Color Buffer:用于呈现窗口上每个Pixel的color值,又称为Render Target,也就是最后着色目标的BUFFER。
Depth Buffer:又称Z Buffer,用来判断Pixel的前后顺序。
Stencil Buffer:规范Color Buffer的运作范围。

8,RenderText()
输出一些信息到3D画面上,用于处理显示在窗口上的字。

9,OnLostDevice()
程序会不断在OnFrameMove()与OnFrameRender()中反复执行,当切换成全屏的时候,会去调用OnLostDevice(),其实就是在reset之前来释放所需要reset的资源。

10,OnDestroyDevice()
如果不单修改了全屏设置,还修改了分辨率的话,那么流程会是:
OnLostDevice()->OnDestroyDevice()->OnCreateDevice->OnResetDevice.
也就是说,他Destroy在CreateDevice中Create的资源。
使用了SAFE_RELEASE,该宏会去check pointer是不是null。

posted on 2009-12-17 01:57  housechen  阅读(480)  评论(0编辑  收藏  举报