作为第一个程序,EmpytProject仅仅示范了如何绑定DXUTstate结构中的回调函数。
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
比如WinMain将得到的消息Msg作为参数调用回调函数MsgProc, MsgProc根据Msg的值作出相应的动作。
使用DXUT框架可以简化Win32和DirectX的api调用。
IsD3D9DeviceAcceptable Callback
这个函数可以在创建D3D9设备前决定是否在应用程序中使用系统某个功能。比如不使用REF设备,程序是否全屏等。同时也负责检测设备是否可用。
ModifyDeviceSettings Callback
在DXUT创建D3D9设备之前改变任何设置。
OnD3D9CreateDevice Callback
D3D9设备创建后调用此回调函数,用于申请资源,设置缓存, 处理其他必需的任务。
OnD3D9DestroyDevice Callback
当D3D9设备接口被释放后立即调用此回调函数。用于释放设备所使用的资源。(vertex/index buffers, the layout, the textures以及the effect等)
OnFrameMove Callback
在进行每一帧渲染之前调用此回调函数。设置随时间变化的变量,如位置矩阵,摄像机,粒子等。
OnD3D11FrameRender Callback
用于渲染的回调函数。
DXUT框架剖析(1)
在应用程序运行期间,当Direct3D设备变为丢失状态时,DXUT框架会调用OnD3D9LostDevice()函数,释放所有在回调函数OnD3D9ResetDevice()中创建的设备资源。也就是说,这时释放的资源都是D3DPOOL_DEFAULT类型的。当Direct3D设备从丢失状态恢复时,DXUT框架会调用回调函数OnD3D9ResetDevice()重新创建所有类型为D3DPOOL_DEFAULT的资源。也就是说,在程序运行时,如果出现设备丢失现象,OnD3D9LostDevice()和OnD3D9ResetDevice()这一对函数就需要分别调用一次。
在退出程序时,DXUT框架会依次调用OnD3D9LostDevice()和OnD3D9DestroyDevice()回调函数,在函数OnD3D9LostDevice()中释放由函数OnD3D9ResetDevice()创建的资源,在函数OnD3D9DestroyDevice()中释放由函数OnD3D9CreateDevice()创建的资源。
本文引用了DirectX11中的相关介绍。