メイン ループの作成

DXUT を初期化し、ウィンドウを作成し、デバイスを作成したら、次の手順は、メイン ループ関数 (レンダリング ループまたはメッセージ ループとも呼ばれる) の実装です。メイン ループは、シーンを更新してレンダリングし、デバイス イベントとウィンドウ メッセージに応答します。

  • メイン ループのストック
  • カスタム メイン ループ

メイン ループのストック

DXUT で提供されるメイン ループの使用は非常に簡単です。これを行うには DXUTMainLoop を呼び出します。

    DXUTMainLoop();

この関数が呼び出された場合は、アプリケーションを閉じるまでは値を返しません。アプリケーションは、デバイス イベントを処理しメッセージに応答するために、DXUT でコールバックを登録します。

カスタム メイン ループ

一部の高度なアプリケーションには、カスタム メイン ループの方が適した設計である場合があります。カスタム メイン ループを DXUT で使用することができます。次に、これを行う方法の例を示します。

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();
}

この例では、DXUTRender3DEnvironment を呼び出して、DXUT でシーンを更新してレンダリングし、デバイス イベントを処理します。この機能をアプリケーションですべて模倣することは可能ですが、それはお勧めできません。

次の手順

次の手順は、イベントの処理です。

関連項目

DXUT プログラミング ガイド