void DynamicsWorld::Initialize(Stage& stage, Integration::DynamicsFactory& dynamicsFactory, DynamicsWorldConfigPtr config)
{
    // Create shader for debug drawing
    const std::string debugDrawVertexShader(
        "attribute lowp vec4 aColor;\n"
        "varying mediump vec4 vColor;\n"
        "void main()\n"
        "{\n"
        "  vColor = aColor;\n"
        "  gl_Position = uMvpMatrix * vec4(aPosition, 1.0);\n"
        "}\n" );

    const std::string debugDrawFragmentShader(
        "varying mediump vec4 vColor;\n"
        "void main()\n"
        "{\n"
        "  gl_FragColor = vColor;\n"
        "}\n" );

    mDebugShader = ShaderEffect::New(debugDrawVertexShader, debugDrawFragmentShader, GEOMETRY_TYPE_IMAGE, Dali::ShaderEffect::HINT_NONE);

    mDynamicsWorld = new SceneGraph::DynamicsWorld( stage.GetDynamicsNotifier(),
            stage.GetNotificationManager(),
            dynamicsFactory );

    Integration::DynamicsWorldSettings* worldSettings( new Integration::DynamicsWorldSettings(*config->GetSettings()) );
    const SceneGraph::Shader* shader( static_cast< const SceneGraph::Shader* >(mDebugShader->GetSceneObject()) );
    InitializeDynamicsWorldMessage( stage.GetUpdateManager(), mDynamicsWorld, worldSettings, shader );

    mGravity = config->GetGravity();
}
void DynamicsWorld::Terminate(Stage& stage)
{
    DALI_LOG_INFO(Debug::Filter::gDynamics, Debug::Verbose, "%s\n", __PRETTY_FUNCTION__);

    if( stage.IsInstalled() )
    {
        while( !mBodies.empty() )
        {
            ActorPtr actor( mBodies.begin()->second );
            if( actor )
            {
                actor->DisableDynamics();
            }
        }

        TerminateDynamicsWorldMessage( stage.GetUpdateManager() );
    }
}