ILM_EXPORT ilmErrorTypes
ilm_initWithNativedisplay(t_ilm_nativedisplay nativedisplay)
{
    ilmErrorTypes err = ILM_SUCCESS;
    t_ilm_nativedisplay display = 0;

    init_ilmCommonPlatformTable();

    err = gIlmCommonPlatformFunc.init(nativedisplay);
    if (ILM_SUCCESS != err)
    {
        return err;
    }

    display = gIlmCommonPlatformFunc.getNativedisplay();

    err = ilmClient_init(display);
    if (ILM_SUCCESS != err)
    {
        gIlmCommonPlatformFunc.destroy();
        return err;
    }

    err = ilmControl_init(display);
    if (ILM_SUCCESS != err)
    {
        ilmClient_destroy();
        gIlmCommonPlatformFunc.destroy();
        return err;
    }

    return ILM_SUCCESS;
}
    void TearDown()
    {
       //print_lmc_get_scene();
       t_ilm_layer* layers = NULL;
       t_ilm_int numLayer=0;
       EXPECT_EQ(ILM_SUCCESS, ilm_getLayerIDs(&numLayer, &layers));
       for (t_ilm_int i=0; i<numLayer; i++)
       {
           EXPECT_EQ(ILM_SUCCESS, ilm_layerRemove(layers[i]));
       };
       free(layers);

       t_ilm_surface* surfaces = NULL;
       t_ilm_int numSurfaces=0;
       EXPECT_EQ(ILM_SUCCESS, ilm_getSurfaceIDs(&numSurfaces, &surfaces));
       for (t_ilm_int i=0; i<numSurfaces; i++)
       {
           EXPECT_EQ(ILM_SUCCESS, ilm_surfaceRemove(surfaces[i]));
       };
       free(surfaces);

       EXPECT_EQ(ILM_SUCCESS, ilm_commitChanges());
       EXPECT_EQ(ILM_SUCCESS, ilmClient_destroy());
       EXPECT_EQ(ILM_SUCCESS, ilm_destroy());
    }
ILM_EXPORT ilmErrorTypes
ilm_destroy(void)
{
    ilmControl_destroy(); // block until control thread is stopped
    ilmClient_destroy();
    ilmErrorTypes retVal = gIlmCommonPlatformFunc.destroy();
    return retVal;
}