断点+堆栈跟踪--DXUT框架学习

断点+堆栈跟踪DXUT
1.     wWinMain函数即为程序的入口函数,首先注册一些用到的函数
2.     调用InitApp()函数,这个函数主要用来绘制界面,并注册界面的回调函数
3.     调用DXUTInit()函数,初始化DXUT,DXUTCreateWindow()创建win32窗口,DXUTCreateDevice()创建D3D设备
4.     之后进入消息的主循环,DXUTMainLoop(),里面封装了Windows的消息循环机制,并在消息空闲idle time的时候调用DXUTRender3DEnvironment()函数。在这个函数中会调用FrameMove()和FrameRender()函数。这个函数里面还会有时间控制。并对一些情况如设备丢失的相关代码。
关于DXUTRender3DEnvironment()函数的细节,会调用DXUTRender3DEnvironment9()函数,首先会判断设备是否丢失。如果设备丢失了,会掉哦也难怪DXUTChangeDevice()设备恢复。会对窗口模式及全屏模式分情况处理。通过GetTimeValues()可以高精度得到一些时间,调用DXUTUpdateFrameStats()函数会更新FPS时间。之后会通过单键得到FrameMove(),FrameRender()的函数指针,然后依次调用这两个函数。并通过nFrame来记录运行帧数。
5.     在OnFrameMove()(就是FrameMove函数)中会做一些对场景的更新,相当于Update函数,例如更新摄影机。DXUT提供了几种摄影机可以直接使用,它们自行与Input通信,改变摄影机。
6.     在OnFrameRender()函数中首先绘制需要的界面CDlg::OnRender()函数,之后便是正常的渲染图形。一些需要的渲染数据从Model层去取得。
7.     在渲染函数中可以渲染在屏幕上打印出一些string,当然可以设置位置,字体,颜色
8.     MsgProc()函数相当于win32的消息处理函数,在这里面调用所有活动对话框的回调函数,返回bool值可以拿来判断,箭头物体(模拟灯的模型)与摄影机会调用自身的HandleMessages()函数来更新自身的状态。
9.     可注册MouseProc()和KeyboardProc()函数来捕获一些Input操作。
10.     IsDeviceAcceptable()函数会根据机器的性能创建D3D的对象。
11.     ModifyDeviceSettings()可以更改设备的属性
12.     OnCreateDevice()函数  DXUTCreateDevice()中调用DXUTChangeDevice(),在DXUTChangeDevice()函数中调用DXUTCreate3DEnvironment9()函数,在创建3D环境的函数中,通过先前搜集到的一些设备参数创建设备。有一个pd3dDeviceFromApp的资源使用了引用计数。得到了OnCreateDevice()的函数指针。在OnCreateDevice()函数中用于加载一些模型和贴图,字体等资源。加载shaderFX文件也可以在这个过程。DXUT支持文件的检查,所有的错误都会弹出debug对话框提示。
13.     OnResetDevice()函数也是在DXUTCreate3DEnvironment9()中调用,会判断设备丢失或者需要reset的情况,然后得到OnResetDevice()函数的指针调用。在OnResetDevice()函数中reset操作(调用对应成员的OnResetDevice()函数),重新设置投影矩阵,用新的D3D设备初始化D3D,设置子对话框的大小和Location。
14.     OnGUIEvent()函数中是对所有的UI界面触发的响应。类似MFC,属于MVC模式中的View处理,将值保存在Model层。
15.     D3D设备丢失会马上调用OnLostDevice()函数,这个函数会调用对应成员的OnLostDevice()通知它们恢复状态。
16.     OnDestroyDevice()函数之后调用,释放资源。
17.     DXUT的界面资源由CDXUTDialogResourceManager资源管理器类统一管理,这个管理器维护了三个数组,CDXUTDialog,DXUTTextureNode,DXUTFontNode。CD3DSettingsDlg类不是继承CDXUTDialog类,而是组合了CDXUTDialog类,并且重载了Init函数,所以可以和CDXUTDialog类一起使用。
18.     DXUT.h.cpp中定义了一些传递函数指针的函数,typedef定义了对应的一堆函数指针。另外有DXUT的Initialization函数,一系列状态获取函数Get函数,还有一些设置函数,例如定时器。

posted @ 2008-11-12 23:52  Conster康  阅读(616)  评论(0编辑  收藏  举报