void Newton::UpdatePhysicsAsync (dgFloat32 timestep) { UpdateAsync (timestep); if (!IsBusy()) { NewtonDeadBodies & bodyList = *this; NewtonDeadJoints & jointList = *this; jointList.DestroyJoints (*this); bodyList.DestroyBodies (*this); } }
void Newton::UpdatePhysicsAsync (dgFloat32 timestep) { UpdateAsync (timestep); }
//---------------------------------------------------------------------------------- // //---------------------------------------------------------------------------------- int main(int argc, char **argv) { #if _WIN32 char current_path[MAX_PATH + 1]; GetDirectoryName(current_path, argv[0]); SetCurrentDirectoryA(current_path); #endif InitWindow(); // 描画用インスタンスの生成 g_renderer = ::EffekseerRendererDX9::Renderer::Create( g_d3d_device, 2000 ); // エフェクト管理用インスタンスの生成(自動フリップは行わない) g_manager = ::Effekseer::Manager::Create( 2000, false ); // 描画用インスタンスから描画機能を設定 g_manager->SetSpriteRenderer( g_renderer->CreateSpriteRenderer() ); g_manager->SetRibbonRenderer( g_renderer->CreateRibbonRenderer() ); g_manager->SetRingRenderer( g_renderer->CreateRingRenderer() ); g_manager->SetModelRenderer( g_renderer->CreateModelRenderer() ); // 描画用インスタンスからテクスチャの読込機能を設定 // 独自拡張可能、現在はファイルから読み込んでいる。 g_manager->SetTextureLoader( g_renderer->CreateTextureLoader() ); g_manager->SetModelLoader( g_renderer->CreateModelLoader() ); // 音再生用インスタンスの生成 g_sound = ::EffekseerSound::Sound::Create( g_xa2, 16, 16 ); // 音再生用インスタンスから再生機能を指定 g_manager->SetSoundPlayer( g_sound->CreateSoundPlayer() ); // 音再生用インスタンスからサウンドデータの読込機能を設定 // 独自拡張可能、現在はファイルから読み込んでいる。 g_manager->SetSoundLoader( g_sound->CreateSoundLoader() ); // 投影行列を設定 g_renderer->SetProjectionMatrix( ::Effekseer::Matrix44().PerspectiveFovRH( 90.0f / 180.0f * 3.14f, (float)g_window_width / (float)g_window_height, 1.0f, 50.0f ) ); // カメラ行列を設定 g_renderer->SetCameraMatrix( ::Effekseer::Matrix44().LookAtRH( ::Effekseer::Vector3D( 10.0f, 5.0f, 20.0f ), ::Effekseer::Vector3D( 0.0f, 0.0f, 0.0f ), ::Effekseer::Vector3D( 0.0f, 1.0f, 0.0f ) ) ); // エフェクトの読込 g_effect = Effekseer::Effect::Create( g_manager, (const EFK_CHAR*)L"test.efk" ); // スレッド生成 g_thread = std::thread([]() -> void { UpdateAsync(nullptr); }); MainLoop(); // スレッド破棄 g_esc = true; g_thread.join(); // エフェクトの破棄 ES_SAFE_RELEASE( g_effect ); // 先にエフェクト管理用インスタンスを破棄 g_manager->Destroy(); // 次に音再生用インスタンスを破棄 g_sound->Destroy(); // 次に描画用インスタンスを破棄 g_renderer->Destroy(); // XAudio2の解放 if( g_xa2_master != NULL ) { g_xa2_master->DestroyVoice(); g_xa2_master = NULL; } ES_SAFE_RELEASE( g_xa2 ); // DirectXの解放 ES_SAFE_RELEASE( g_d3d_device ); ES_SAFE_RELEASE( g_d3d ); // COMの終了処理 CoUninitialize(); return 0; }