static void
freeSnowglobe (CompScreen *s)
{
    SNOWGLOBE_SCREEN (s);

    if (as->snow)
        free (as->snow);

    freeWater (as->water);
    freeWater (as->ground);

    glDeleteLists(as->snowflakeDisplayList,  1);
}
Exemple #2
0
void freeScene(Scene * scene)
{
    freeCamera(scene->camera);
    freeWorld(scene->world);
    freeWater(scene->water);
    free(scene->context);
    free(scene);
    glfwTerminate();
}
void
updateGround (CompScreen *s, float time)
{
    SNOWGLOBE_SCREEN (s);
    CUBE_SCREEN (s);

    int sDiv = snowglobeGetGridQuality (s);
    int size = s->hsize * cs->nOutput;

    Bool update = FALSE;

    if (!as->ground)
    {
	as->ground = genWater (size, sDiv, cs->distance, -0.5);
	update = TRUE;
    }

    if (!as->ground)
	return;

    if (as->ground->size != size || as->ground->sDiv != sDiv ||
	as->ground->distance != cs->distance)
    {
	freeWater (as->ground);
	as->ground = genWater (size, sDiv, cs->distance, -0.5);

	update = TRUE;
	if (!as->ground)
	    return;
    }

    if (!update)
	return;

    as->ground->wave1 = (float)(rand() & 15) / 15.0;
    as->ground->wave2 = (float)(rand() & 15) / 15.0;

    as->ground->bh  = -0.45;
    as->ground->wa  = 0.1;
    as->ground->swa = 0.02;
    as->ground->wf  = 2.0;
    as->ground->swf = 10.0;

    updateHeight (as->ground);
}
void
updateWater (CompScreen *s, float time)
{
    SNOWGLOBE_SCREEN (s);
    CUBE_SCREEN (s);

    int sDiv = 0;
    int size = s->hsize * cs->nOutput;

    if (!as->water)
	as->water = genWater (size, sDiv, cs->distance, -0.5);

    if (!as->water)
	return;



    if (as->water->size != size || as->water->sDiv != sDiv ||
	as->water->distance != cs->distance)
    {
	freeWater (as->water);
	as->water = genWater (size, sDiv, cs->distance, -0.5);

	if (!as->water)
	    return;
    }

    as->water->wave1 += 0;
    as->water->wave2 += 0;

    as->water->wave1 = 0;
    as->water->wave2 = 0;
    as->water->bh  = 0.5;

	as->water->wa  = 0.0;
	as->water->swa = 0.0;
	as->water->wf  = 0.0;
	as->water->swf = 0.0;

}