青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當(dāng)自強(qiáng)而不息

DXUT框架剖析(6)

在窗口和設(shè)備創(chuàng)建好之后,應(yīng)用程序需要使用消息循環(huán)處理窗口消息、更新和渲染場景、處理設(shè)備事件。應(yīng)用程序可以實(shí)現(xiàn)自己的消息循環(huán),也可以使用DXUT消息循環(huán),注冊相應(yīng)的回調(diào)函數(shù),可以讓DXUT處理設(shè)備、幀消息事件。

 

進(jìn)入消息循環(huán)

為使用DXUT框架的消息循環(huán),可以調(diào)用DXUTMainLoop()函數(shù):

Starts the main execution loop of DXUT.

 HRESULT DXUTMainLoop( 
HACCEL hAccel
) ;

Parameters

hAccel
[in] Handle to an accelerator table to use in translating keyboard messages from the Windows message queue, or NULL if not using an accelerator table. The default value is NULL.

Return Values

If the function succeeds, the return value is S_OK. If the function fails, the return value can be one of the error codes in DXUTERR.

Remarks

This function starts the message loop that will run for the lifetime of the application. During execution, DXUTMainLoop calls the registered callback functions to ask the application to update and render the frame, as well as handle any device or input events.

 

Custom Main Loop

For some advanced applications a custom main loop may be a better design. It is possible to use DXUT with a custom main loop. An example of how to do this is shown below.

INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, INT )
{
DXUTSetCallbackD3D9DeviceAcceptable( IsDeviceAcceptable );
DXUTSetCallbackD3D9DeviceCreated( OnCreateDevice );
DXUTSetCallbackD3D9DeviceReset( OnResetDevice );
DXUTSetCallbackD3D9FrameRender( OnFrameRender );
DXUTSetCallbackD3D9DeviceLost( OnLostDevice );
DXUTSetCallbackD3D9DeviceDestroyed( OnDestroyDevice );
DXUTSetCallbackMsgProc( MsgProc );
DXUTSetCallbackKeyboard( KeyboardProc );
DXUTSetCallbackFrameMove( OnFrameMove );
DXUTSetCallbackDeviceChanging( ModifyDeviceSettings );

DXUTInit( true, true );
DXUTCreateWindow( L"Example" );
DXUTCreateDevice( true, 640, 480 );

// Custom main loop
HWND hWnd = DXUTGetHWND();
BOOL bGotMsg;
MSG msg;
msg.message = WM_NULL;
PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE );

while( WM_QUIT != msg.message )
{
// Use PeekMessage() so we can use idle time to render the scene
bGotMsg = ( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) != 0 );

if( bGotMsg )
{
// Translate and dispatch the message
if( 0 == TranslateAccelerator( hWnd, NULL, &msg ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
else
{
// Render a frame during idle time (no messages are waiting)
DXUTRender3DEnvironment();
}
}

return DXUTGetExitCode();
}

This example calls DXUTRender3DEnvironment to have DXUT update and render the scene and handle device events. While it is possible for the application to completely replicate this functionality, it is not recommended.

DXUTRender3DEnvironment

Renders the 3D environment.

 VOID DXUTRender3DEnvironment() ;

Parameters

None.

Return Values

No return value.

Remarks

This method does not normally need to be called. It is useful only when the application does not use DXUTMainLoop but still wants DXUT to assist with rendering.

This method checks whether the device is lost. If so, the method attempts to reset the device and then calls the LPDXUTCALLBACKFRAMEMOVE and LPDXUTCALLBACKD3D10FRAMERENDER callback functions.

If the application window is minimized or the application is paused, CPU time is yielded to other processes.

 

處理事件

框架使用回調(diào)函數(shù)機(jī)制來使應(yīng)用程序?qū)κ录龀龇磻?yīng)。應(yīng)用程序只需對框架注冊和設(shè)置相應(yīng)的函數(shù)指針,則當(dāng)事件發(fā)生時,框架就會調(diào)用相應(yīng)的函數(shù)??蚣懿恍枰运械幕卣{(diào)函數(shù),所以應(yīng)用程序只須對所需要的回調(diào)函數(shù)進(jìn)行注冊即可。通過為回調(diào)函數(shù)設(shè)置參數(shù)pUserContext,回調(diào)函數(shù)可以從應(yīng)用程序接受內(nèi)容,比如將該參數(shù)設(shè)置為一個指向類對象的指針。

DXUT框架可以處理以下事件類型:

(1)設(shè)備事件

當(dāng)應(yīng)用程序使用Direct3D設(shè)備渲染圖形時,該設(shè)備有可能處于丟失狀態(tài)。這種情況的發(fā)生有多種原因,例如按下Alt + Tab鍵離開一個全屏模式的應(yīng)用程序,或者按下Ctrl + Alt + Del鍵,或者啟動了另一個全屏3D應(yīng)用程序。發(fā)生這種情況時,當(dāng)調(diào)用一些函數(shù)(如Present)時,Direct3D API通過返回D3DERR_DEVICELOST通知應(yīng)用程序設(shè)備丟失。

當(dāng)設(shè)備丟失時,應(yīng)用程序負(fù)責(zé)釋放所有不能在設(shè)備丟失時存在的Direct3D資源對象,如在D3DPOOL_DEFAULT內(nèi)存池中創(chuàng)建的對象。如果沒有釋放這些對象,那么該設(shè)備從丟失狀態(tài)返回時就不能被重新設(shè)置。當(dāng)設(shè)備丟失時,應(yīng)用程序必須等待。當(dāng)設(shè)備返回時,應(yīng)用程序必須調(diào)用函數(shù) IDirect3DDevice9::Reset(),并重新創(chuàng)建所有不能在Reset()函數(shù)中存在的對象。

通過DXUT框架,這個過程可以通過在應(yīng)用程序中使用回調(diào)函數(shù)來簡化,這些回調(diào)函數(shù)處理各種設(shè)備事件:設(shè)備改變、創(chuàng)建、重新設(shè)置、丟失或銷毀。當(dāng)設(shè)備丟失時,框架會有提示;當(dāng)它從丟失狀態(tài)返回時,框架會適當(dāng)調(diào)用相應(yīng)的回調(diào)函數(shù),重新設(shè)置該設(shè)備,即框架使用應(yīng)用程序的回調(diào)函數(shù)在適當(dāng)?shù)臅r間釋放和重新創(chuàng)建設(shè)備對象。應(yīng)用程序需要做的是注冊并實(shí)現(xiàn)相關(guān)回調(diào)函數(shù),各回調(diào)函數(shù)的類型、注冊、調(diào)用時機(jī)等細(xì)節(jié)見下表:

注冊函數(shù) 應(yīng)用程序回調(diào)函數(shù) 框架調(diào)用時機(jī) 創(chuàng)建資源 釋放資源
DXUTSetCallback-
DeviceChanging
LPDXUTCALLBACK-
MODIFYDEVICESETTINGS
在創(chuàng)建Direct3D設(shè)備之前調(diào)用,應(yīng)用程序可以返回FALSE,拒絕改變該設(shè)備。 x x
DXUTSetCallback-
D3D9DeviceCreated
LPDXUTCALLBACK-
D3D9DEVICECREATED
當(dāng)應(yīng)用程序初始化和重新創(chuàng)建設(shè)備時,在Direct3D設(shè)備創(chuàng)建之后立即調(diào)用。 創(chuàng)建D3DPOOL_MANAGED資源,因?yàn)檫@些資源無論什么時候被銷毀都需要重新加載,但這些資源被重新設(shè)置時不需要重新加載。在這里創(chuàng)建的資源需要在LPDXUTCALLBACK-DEVICEDESTROYED中釋放。 x
DXUTSetCallback-
D3D9DeviceReset
LPDXUTCALLBACK-
D3D9DEVICERESET
當(dāng)Direct3D設(shè)備丟失又被重新設(shè)置后立即調(diào)用。 創(chuàng)建D3DPOOL_DEFAULT資源,因?yàn)檫@些資源無論什么時候丟失或重新設(shè)置時都需要重新加載,在這里創(chuàng)建的資源需要在LPDXUTCALLBACK-DEVICELOST中釋放。 x
DXUTSetCallback-
D3D9DeviceLost
LPDXUTCALLBACK-
D3D9DEVICELOST
當(dāng)Direct3D設(shè)備變?yōu)閬G失狀態(tài)且在Reset調(diào)用之前,立即調(diào)用。 x 釋放在回調(diào)函數(shù)LPDXUTCALLBACK-D3D9DEVICERESET中創(chuàng)建的資源,這些資源通常包括所有的D3DPOOL_DEFAULT資源。
DXUTSetCallback-
D3D9DeviceDestroyed
LPDXUTCALLBACK-
D3D9DEVICEDESTROYED
當(dāng)應(yīng)用程序終止或重新創(chuàng)建設(shè)備時,Direct3D設(shè)備被銷毀后,立即調(diào)用。 x 釋放在回調(diào)函數(shù)LPDXUTCALLBACK-
D3D9DEVICECREATED中創(chuàng)建的資源,這些資源通常包括所有的D3DPOOL_MANAGED資源。

當(dāng)設(shè)備在窗口和全屏模式間切換時常常需要重新設(shè)置,但有時它必須通過Direct3D重新創(chuàng)建。

調(diào)用這些回調(diào)函數(shù)是可選的,但如果應(yīng)用程序沒有使用函數(shù)DXUTSetCallbackD3D9DeviceDestroyed()和 DXUTSetCallbackD3D9DeviceCreated()注冊銷毀回調(diào)函數(shù)和創(chuàng)建回調(diào)函數(shù),則改變設(shè)備或在硬件抽象層設(shè)備和參考設(shè)備間切換都不能進(jìn)行。

類似地,如果沒有用函數(shù)DXUTSetCallbackD3D9DeviceLost()和 DXUTSetCallbackD3D9DeviceReset()注冊丟失回調(diào)函數(shù)和重置回調(diào)函數(shù),則當(dāng)設(shè)備丟失或重置設(shè)備時,框架無法通知應(yīng)用程序。這樣一來,所有不在D3DPOOL_MANAGED內(nèi)存中的設(shè)備對象都不能重新設(shè)置。


 

posted on 2008-05-15 16:58 lovedday 閱讀(1217) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲午夜视频在线观看| 狠狠干综合网| 欧美成人官网二区| 欧美日韩成人在线| 在线精品福利| 亚洲精品国产视频| 免费欧美电影| 午夜精品成人在线| 欧美色偷偷大香| 国产精品成人免费视频| 国产一区视频观看| 国产精品网曝门| 亚洲精品午夜| 亚洲人精品午夜| 亚洲剧情一区二区| 久久av最新网址| 亚洲欧美日韩中文视频| 国产精品国内视频| 亚洲一品av免费观看| 亚洲乱码久久| 欧美深夜福利| 午夜精品久久久久久久白皮肤| 亚洲精品视频免费| 欧美一区二区三区视频免费| 乱人伦精品视频在线观看| 亚洲激情啪啪| 亚洲视频一区二区| 欧美成人精品一区| 亚洲一区二区视频| 亚洲久色影视| 欧美一级理论片| 久久一日本道色综合久久| 亚洲精品美女在线| 性欧美xxxx大乳国产app| 亚洲人成网站在线播| 久久久爽爽爽美女图片| 亚洲欧洲精品天堂一级 | 久久成人一区| 欧美激情精品久久久久久久变态 | 日韩亚洲国产欧美| 亚洲免费视频网站| 在线观看成人一级片| 蜜乳av另类精品一区二区| 国产精品久久久久久模特| 欧美黄色网络| 亚洲高清三级视频| 欧美在线free| 久久永久免费| 麻豆视频一区二区| 亚洲欧美日韩国产中文| 欧美日韩另类在线| 亚洲激情欧美激情| 国产日韩欧美在线播放不卡| 国产精品99久久久久久www| 99成人在线| 欧美三区在线视频| 亚洲视频大全| 欧美一级专区| 国内精品久久久久国产盗摄免费观看完整版| 91久久久一线二线三线品牌| 欧美黄色影院| 亚洲国产一区二区三区a毛片| 亚洲电影免费在线| 久久成人免费电影| 亚洲一二三区精品| 国产日韩欧美在线观看| 欧美激情第二页| 国产精品毛片va一区二区三区| 一区二区三区四区五区精品| 久久精品一本久久99精品| 欧美午夜精品理论片a级大开眼界| 一区二区三区视频在线观看 | 亚洲国产裸拍裸体视频在线观看乱了中文 | 快射av在线播放一区| 亚洲福利视频一区二区| 亚洲第一搞黄网站| 国产一区二区三区四区hd| 蜜桃精品一区二区三区 | 国产一区二区黄色| 欧美xart系列在线观看| 亚洲男人的天堂在线aⅴ视频| 久久久久久有精品国产| 99热这里只有精品8| **欧美日韩vr在线| 国产欧美日韩免费| 亚洲区第一页| 欧美精品久久久久久| 欧美国产激情| 久久久夜夜夜| 欧美chengren| 亚洲视频综合| 亚洲精品一线二线三线无人区| 欧美主播一区二区三区美女 久久精品人| 国产精品亚洲а∨天堂免在线| 欧美精品乱人伦久久久久久| 久久久99免费视频| 久久精品国产精品亚洲精品| 亚洲欧美国产高清va在线播| 一区二区电影免费观看| 亚洲美女黄色片| 在线视频精品一区| 亚洲精品欧美| 免费精品99久久国产综合精品| 亚洲欧美日韩中文在线制服| 中文av一区特黄| 亚洲欧美一区二区原创| 性高湖久久久久久久久| 欧美一区二区三区久久精品 | 国产视频在线观看一区二区| 久久成人免费网| 欧美精品啪啪| 国产日韩欧美亚洲| **欧美日韩vr在线| 一本久道久久综合狠狠爱| 午夜亚洲视频| 欧美成年人网站| 久久久噜噜噜久久狠狠50岁| 国产精品久久久亚洲一区| 99国内精品久久| 欧美激情一区二区三区成人| 久久精品人人做人人爽| 韩国av一区二区三区在线观看| 欧美亚洲视频在线观看| 亚洲无限乱码一二三四麻| 欧美人成在线视频| 一区二区三区视频在线看| 欧美大片国产精品| 欧美成人免费播放| 日韩视频在线一区| 久久国产精品亚洲va麻豆| 亚洲欧洲精品一区二区| 美女在线一区二区| 亚洲人成绝费网站色www| 亚洲精品一二区| 国产伦精品一区二区| 久久性天堂网| 欧美人成在线| 欧美在线视频a| 免费看黄裸体一级大秀欧美| 亚洲伦理自拍| 亚洲自拍偷拍麻豆| 亚洲黑丝在线| 亚洲人成毛片在线播放| 亚洲国产精品成人综合色在线婷婷| 欧美精品一区二区在线观看 | 亚洲一区视频在线观看视频| 亚洲欧美日韩国产成人| 在线观看视频日韩| 一区二区激情| 亚洲国产精品热久久| 亚洲一区在线播放| 99在线精品视频在线观看| 欧美一区二区视频网站| 中日韩午夜理伦电影免费| 榴莲视频成人在线观看| 亚洲欧美视频在线观看视频| 久久精品亚洲一区二区三区浴池| 制服诱惑一区二区| 欧美成人国产一区二区| 久久在线播放| 国产一区三区三区| 欧美一级成年大片在线观看| 亚洲一区精彩视频| 国产精品伦一区| 亚洲一区二区三区视频| 亚洲欧美不卡| 国产欧美日韩精品丝袜高跟鞋 | 欧美亚洲三区| 国产精品久久久久久一区二区三区| 亚洲精品日韩激情在线电影| 亚洲人成小说网站色在线| 欧美与黑人午夜性猛交久久久| 亚洲精选中文字幕| 中文在线资源观看网站视频免费不卡 | 久久精品视频在线看| 久久久国产亚洲精品| 黄色国产精品| 欧美福利视频在线| 亚洲午夜免费视频| 久久天天综合| 在线视频欧美一区| 国产综合久久久久影院| 久久噜噜噜精品国产亚洲综合 | 欧美不卡视频一区发布| 亚洲国产成人tv| 欧美激情91| 欧美一区二区三区男人的天堂 | 国产欧美韩日| 欧美1区2区| 亚洲欧美日韩网| 91久久国产综合久久| 欧美伊久线香蕉线新在线| 亚洲国产欧美不卡在线观看| 国产精品视频第一区| 欧美77777| 美女久久一区| 巨乳诱惑日韩免费av| 久久精品系列| 亚洲午夜在线视频| 日韩午夜电影av|