(2)幀事件
框架也提供了幀事件,它在渲染過程中的每一幀被調用,應用程序應該注冊并實現這些回調函數,如下表所示:
應用程序回調函數 |
注冊回調函數 |
框架調用時機 |
場景渲染 |
LPDXUTCALLBACK-
FRAMEMOVE |
DXUTSetCallback-
FrameMove |
在每一幀開始時調用一次 |
這個回調函數是應用程序處理場景更新的最好位置,但它不應包括實際的渲染調用,渲染調用應放在幀渲染回調函數中。 |
LPDXUTCALLBACK-
D3D9FRAMERENDER |
DXUTSetCallback-
D3D9FrameRender |
在每一幀結束或窗口需要重畫時調用 |
所有對場景的渲染調用都應在此回調函數中完成,在這個回調函數返回后,框架將調用Present()來顯示交換鏈中下一緩沖區的內容。 |
DXUTSetCallbackFrameMove
Sets the frame update callback function.
VOID DXUTSetCallbackFrameMove(
LPDXUTCALLBACKFRAMEMOVE pCallbackFrameMove ,
void* pUserContext
) ;
Parameters
- pCallbackFrameMove
- [in] Pointer to a LPDXUTCALLBACKFRAMEMOVE callback
function. If the callback function is supplied, it will be called at the
beginning of every frame to facilitate updates to the scene. If NULL, DXUT
will not notify the application about new frames.
- pUserContext
- [in] Pointer to a user-defined value which is
passed to the callback function. Typically used by an application to pass a
pointer to a data structure that provides context information for the
callback function. The default value is NULL
Return Values
No return value.
Remarks
The LPDXUTCALLBACKFRAMEMOVE callback
function is the appropriate location for the application to handle updates to
the scene. However, LPDXUTCALLBACKFRAMEMOVE is not intended to
contain actual rendering calls, which should instead be placed in the
LPDXUTCALLBACKD3D9FRAMERENDER or LPDXUTCALLBACKD3D10FRAMERENDER callback
function. These callbacks is called when rendering with either Direct3D 9 or
Direct3D 10 respectively.
The LPDXUTCALLBACKFRAMEMOVE callback
function will be called once per frame, while the render callback function will
be called whenever the scene needs to be rendered, which might be more than once
per frame on rare occasion if a WM_PAINT message occurs.
LPDXUTCALLBACKFRAMEMOVE
Application-defined callback function that allows for
updating the scene. This function is called by DXUT once each frame, before the
application renders the scene.
VOID LPDXUTCALLBACKFRAMEMOVE(
DOUBLE fTime ,
FLOAT fElapsedTime ,
void* pUserContext
) ;
Parameters
- fTime
- [in] Time elapsed since the application started,
in seconds.
- fElapsedTime
- [in] Time elapsed since the last frame, in
seconds.
- pUserContext
- [in] Pointer to a user-defined value which is
passed to the callback function. Typically used by an application to pass a
pointer to a data structure that provides context information for the
callback function. The default value is NULL
Return Values
No return value.
Remarks
The LPDXUTCALLBACKFRAMEMOVE callback
function is the appropriate location for the application to handle updates to
the scene. However, LPDXUTCALLBACKFRAMEMOVE is not intended to
contain actual rendering calls, which should instead be placed in the
LPDXUTCALLBACKD3D9FRAMERENDER or LPDXUTCALLBACKD3D10FRAMERENDER callback
function. These callbacks is called when rendering with either Direct3D 9 or
Direct3D 10 respectively.
The LPDXUTCALLBACKFRAMEMOVE callback
function will be called once per frame, while the render callback function will
be called whenever the scene needs to be rendered, which might be more than once
per frame on rare occasion if a WM_PAINT message occurs.
DXUTSetCallbackD3D9FrameRender
Sets the Direct3D 9 frame render callback function.
VOID DXUTSetCallbackD3D9FrameRender(
LPDXUTCALLBACKD3D9FRAMERENDER pCallback ,
void* pUserContext
) ;
Parameters
- pCallback
- [in] Pointer to a LPDXUTCALLBACKD3D9FRAMERENDER
callback function. If the callback function is supplied, it will be called
once per frame for the application to render the current scene using the
Direct3D 9 device. If NULL, DXUT will not prompt the application to render
the scene.
- pUserContext
- [in] Pointer to a user-defined value which is
passed to the callback function. Typically used by an application to pass a
pointer to a data structure that provides context information for the
callback function. The default value is NULL
Return Values
No return value.
Remarks
This function only needs to be called if the
application supports rendering with Direct3D 9 device.
The LPDXUTCALLBACKD3D9FRAMERENDER
callback function is the appropriate location for the application to render the
current scene using the Direct3D 9 device. The LPDXUTCALLBACKFRAMEMOVE callback
function will be called once per frame, while
LPDXUTCALLBACKD3D9FRAMERENDER will be called when the scene needs to be
rendered, which might be more than once per frame.
LPDXUTCALLBACKD3D9FRAMERENDER
Application-defined callback function that allows for
rendering the scene using a Direct3D 9 device. This function is called by DXUT
at the end of every frame, and whenever the application needs to paint the
scene.
VOID LPDXUTCALLBACKD3D9FRAMERENDER(
IDirect3DDevice9 * pd3dDevice ,
DOUBLE fTime ,
FLOAT fElapsedTime ,
void* pUserContext
) ;
Parameters
- pd3dDevice
- [in] Pointer to the Direct3D 9 device used for
rendering.
- fTime
- [in] Time elapsed since the application started,
in seconds.
- fElapsedTime
- [in] Time elapsed since the last frame, in
seconds.
- pUserContext
- [in] Pointer to a user-defined value which is
passed to the callback function. Typically used by an application to pass a
pointer to a data structure that provides context information for the
callback function. The default value is NULL
Return Values
No return value.
Remarks
The LPDXUTCALLBACKD3D9FRAMERENDER
callback function is the appropriate location for the application to render the
current scene using the Direct3D 9 device. The LPDXUTCALLBACKFRAMEMOVE callback
function will be called once per frame, while
LPDXUTCALLBACKD3D9FRAMERENDER will be called when the scene needs to be
rendered, which might be more than once per frame.
DXUT will call this function after the
LPDXUTCALLBACKFRAMEMOVE callback function.
在函數 LPDXUTCALLBACKFRAMEMOVE 中,通常進行數據變換,比如設置坐標變換矩陣。在函數 LPDXUTCALLBACKD3D9FRAMERENDER 中,主要進行圖形的渲染,類似于Direct3D
API中的Render()函數。
(3)消息事件
框架通過下表中的回調函數和相應的注冊函數來傳遞窗口消息、鍵盤事件和鼠標事件,編寫應用程序對這些事件做出適當反應。
應用程序回調函數 |
注冊回調函數 |
描述 |
LPDXUTCALLBACKMSGPROC |
DXUTSetCallbackMsgProc |
處理來自DXUT消息泵的窗口消息 |
LPDXUTCALLBACKKEYBOARD |
DXUTSetCallbackKeyboard |
處理來自DXUT消息泵的鍵盤事件 |
LPDXUTCALLBACKMOUSE |
DXUTSetCallbackMouse |
處理來自DXUT消息泵的鼠標事件 |
DXUTSetCallbackKeyboard
Sets the keyboard event callback function.
VOID DXUTSetCallbackKeyboard(
LPDXUTCALLBACKKEYBOARD pCallbackKeyboard ,
void* pUserContext
) ;
Parameters
- pCallbackKeyboard
- [in] Pointer to a LPDXUTCALLBACKKEYBOARD keyboard
event callback function. If supplied, the callback function will be called
for keyboard events. If NULL, DXUT will not notify the application about
keyboard events.
- pUserContext
- [in] Pointer to a user-defined value which is
passed to the callback function. Typically used by an application to pass a
pointer to a data structure that provides context information for the
callback function. The default value is NULL
Return Values
No return value.
Remarks
The pCallbackKeyboard keyboard event callback function
will be called when any keyboard event occurs.
This callback mechanism is provided to simplify
handling keyboard messages through the windows message pump, but does not
preclude the application from handling those messages directly through the
LPDXUTCALLBACKMSGPROC callback.
LPDXUTCALLBACKKEYBOARD
Application-defined keyboard event callback function,
called by DXUT.
VOID LPDXUTCALLBACKKEYBOARD(
UINT nChar ,
bool bKeyDown ,
bool bAltDown ,
void* pUserContext
) ;
Parameters
- nChar
- [in] A virtual-key code for the key. See
Virtual-Key Codes for a listing.
- bKeyDown
- [in] TRUE if key is down. FALSE if the key is up
- bAltDown
- [in] TRUE if the ALT key is also down.
- pUserContext
- [in] Pointer to a user-defined value which is
passed to the callback function. Typically used by an application to pass a
pointer to a data structure that provides context information for the
callback function. The default value is NULL
Return Values
No return value.
Remarks
The pCallbackKeyboard keyboard event callback function
will be called when any keyboard event occurs.
This callback mechanism is provided to simplify
handling keyboard messages through the windows message pump, but does not
preclude the application from handling those messages directly through the
LPDXUTCALLBACKMSGPROC callback.
DXUTSetCallbackMouse
Sets the mouse event callback function.
VOID DXUTSetCallbackMouse(
LPDXUTCALLBACKMOUSE pCallbackMouse ,
BOOL bIncludeMouseMove ,
void* pUserContext
) ;
Parameters
- pCallbackMouse
- [in] Pointer to an LPDXUTCALLBACKMOUSE mouse event
callback function. If supplied, the callback function will be called for
mouse events. If NULL, DXUT will not notify the application about mouse
events.
- bIncludeMouseMove
- [in] If TRUE, the mouse movement events are passed
to the pCallbackMouse callback function. Default value is FALSE.
- pUserContext
- [in] Pointer to a user-defined value which is
passed to the callback function. Typically used by an application to pass a
pointer to a data structure that provides context information for the
callback function. The default value is NULL
Return Values
No return value.
Remarks
The pCallbackMouse mouse event callback function will
be called when any mouse events occurs
This callback mechanism is provided to simplify
handling mouse messages through the Windows message pump, but does not preclude
the application from handling those messages directly in the
LPDXUTCALLBACKMSGPROC callback function.
LPDXUTCALLBACKMOUSE
Application-defined mouse event callback function,
called by DXUT when it receives mouse events.
VOID LPDXUTCALLBACKMOUSE(
bool bLeftButtonDown ,
bool bRightButtonDown ,
bool bMiddleButtonDown ,
bool bSideButton1Down ,
bool bSideButton2Down ,
INT nMouseWheelDelta ,
INT xPos ,
INT yPos ,
void* pUserContext
) ;
Parameters
- bLeftButtonDown
- [in] The left mouse button is down.
- bRightButtonDown
- [in] The right mouse button is down.
- bMiddleButtonDown
- [in] The middle mouse button is down.
- bSideButton1Down
- [in] Windows 2000/Windows XP: The first side
button is down.
- bSideButton2Down
- [in] Windows 2000/Windows XP: The second side
button is down.
- nMouseWheelDelta
- [in] The distance and direction the mouse wheel
has rolled, expressed in multiples or divisions of WHEEL_DELTA, which is
120. A positive value indicates that the wheel was rotated forward, away
from the user; a negative value indicates that the wheel was rotated
backward, toward the user.
- xPos
- [in] x-coordinate of the pointer, relative to the
upper-left corner of the client area.
- yPos
- [in] y-coordinate of the pointer, relative to the
upper-left corner of the client area.
- pUserContext
- [in] Pointer to a user-defined value which is
passed to the callback function. Typically used by an application to pass a
pointer to a data structure that provides context information for the
callback function. The default value is NULL
Return Values
No return value.
Remarks
The pCallbackMouse mouse event callback function will
be called when any mouse events occurs
This callback mechanism is provided to simplify
handling mouse messages through the Windows message pump, but does not preclude
the application from handling those messages directly in the
LPDXUTCALLBACKMSGPROC callback function.