diff --git a/TODO b/TODO index efddbf5..56fe165 100644 --- a/TODO +++ b/TODO @@ -3,3 +3,5 @@ - Implement scaling and scrolling on previews. - Water and terrain LOD moves with the camera, fix it like in the wanderer. - Restore render progress. +- Find a licence and apply it. +- Translate UI ? diff --git a/cli/main.c b/cli/main.c index 4ecfbd2..261808c 100644 --- a/cli/main.c +++ b/cli/main.c @@ -111,7 +111,9 @@ int main(int argc, char** argv) conf_daytime_start += conf_daytime_step; } + printf("Cleaning up ...\n"); rendererDelete(&renderer); + paysagesQuit(); printf("\rDone. \n"); diff --git a/gui_qt/mainwindow.cpp b/gui_qt/mainwindow.cpp index b586e66..071f78e 100644 --- a/gui_qt/mainwindow.cpp +++ b/gui_qt/mainwindow.cpp @@ -24,6 +24,8 @@ int main(int argc, char** argv) { + int result; + paysagesInit(); QApplication app(argc, argv); @@ -31,7 +33,10 @@ int main(int argc, char** argv) window.show(); - return app.exec(); + result = app.exec(); + + paysagesQuit(); + return result; } MainWindow::MainWindow(QWidget *parent) : diff --git a/lib_paysages/array.c b/lib_paysages/array.c index f0c3a07..1c14a66 100644 --- a/lib_paysages/array.c +++ b/lib_paysages/array.c @@ -9,7 +9,7 @@ void arrayCreate(Array* array, int item_size) array->alloc_length = 3; array->item_size = item_size; array->dirty = 1; - array->data = malloc((size_t)item_size * 3); + array->data = malloc((size_t)item_size * array->alloc_length); } void arrayDelete(Array* array) diff --git a/lib_paysages/atmosphere.c b/lib_paysages/atmosphere.c index c160201..6d9ee0b 100644 --- a/lib_paysages/atmosphere.c +++ b/lib_paysages/atmosphere.c @@ -10,6 +10,10 @@ void atmosphereInit() { } +void atmosphereQuit() +{ +} + void atmosphereSave(FILE* f, AtmosphereDefinition* definition) { toolsSaveDouble(f, &definition->distance_near); diff --git a/lib_paysages/atmosphere.h b/lib_paysages/atmosphere.h index 946a800..a7541ef 100644 --- a/lib_paysages/atmosphere.h +++ b/lib_paysages/atmosphere.h @@ -19,6 +19,7 @@ typedef struct } AtmosphereDefinition; void atmosphereInit(); +void atmosphereQuit(); void atmosphereSave(FILE* f, AtmosphereDefinition* definition); void atmosphereLoad(FILE* f, AtmosphereDefinition* definition); diff --git a/lib_paysages/auto.c b/lib_paysages/auto.c index d7f1595..1a2a175 100644 --- a/lib_paysages/auto.c +++ b/lib_paysages/auto.c @@ -62,7 +62,6 @@ void autoGenRealisticLandscape(int seed) TerrainDefinition terrain; WaterDefinition water; CloudsDefinition clouds; - CloudsLayerDefinition* cloud; SkyDefinition sky; TexturesDefinition textures; TextureLayerDefinition* texture; @@ -78,7 +77,7 @@ void autoGenRealisticLandscape(int seed) /* Cloud layer */ clouds = cloudsCreateDefinition(); - cloud = cloudsGetLayer(&clouds, cloudsAddLayer(&clouds)); + cloudsAddLayer(&clouds); scenerySetClouds(&clouds); cloudsDeleteDefinition(&clouds); @@ -163,6 +162,7 @@ void autoGenRealisticLandscape(int seed) zoneIncludeCircleArea(zone, 0.8, 0.0, 0.0, 0.3, 4.0); modifierActionFixValue(mod, -8.0); terrainAddModifier(&terrain, mod); + modifierDelete(mod); /* DEBUG */ scenerySetTerrain(&terrain); terrainDeleteDefinition(&terrain); diff --git a/lib_paysages/camera.c b/lib_paysages/camera.c index 8bb3cb8..9df71aa 100644 --- a/lib_paysages/camera.c +++ b/lib_paysages/camera.c @@ -13,6 +13,10 @@ void cameraInit() { } +void cameraQuit() +{ +} + void cameraSave(FILE* f, CameraDefinition* camera) { v3Save(f, &camera->location); diff --git a/lib_paysages/camera.h b/lib_paysages/camera.h index af14607..fb25775 100644 --- a/lib_paysages/camera.h +++ b/lib_paysages/camera.h @@ -10,6 +10,7 @@ extern "C" { #endif void cameraInit(); +void cameraQuit(); void cameraSave(FILE* f, CameraDefinition* camera); void cameraLoad(FILE* f, CameraDefinition* camera); diff --git a/lib_paysages/clouds.c b/lib_paysages/clouds.c index 406fb31..021a242 100644 --- a/lib_paysages/clouds.c +++ b/lib_paysages/clouds.c @@ -27,6 +27,11 @@ void cloudsInit() cloudsLayerValidateDefinition(&NULL_LAYER); } +void cloudsQuit() +{ + cloudsLayerDeleteDefinition(&NULL_LAYER); +} + void cloudsSave(FILE* f, CloudsDefinition* definition) { int i; @@ -476,10 +481,10 @@ static Color _applyLayerLighting(CloudsLayerDefinition* definition, Renderer* re { Vector3 normal; - normal = v3Scale(_getNormal(definition, position, 1.0), 0.25); + normal = v3Scale(_getNormal(definition, position, 3.0), 0.25); + normal = v3Add(normal, v3Scale(_getNormal(definition, position, 2.0), 0.25)); + normal = v3Add(normal, v3Scale(_getNormal(definition, position, 1.0), 0.25)); normal = v3Add(normal, v3Scale(_getNormal(definition, position, 0.5), 0.25)); - normal = v3Add(normal, v3Scale(_getNormal(definition, position, 0.2), 0.25)); - normal = v3Add(normal, v3Scale(_getNormal(definition, position, 0.1), 0.25)); normal = v3Scale(v3Normalize(normal), 0.1); return renderer->applyLightingToSurface(renderer, position, normal, definition->material); diff --git a/lib_paysages/clouds.h b/lib_paysages/clouds.h index f8ed0dd..69faf75 100644 --- a/lib_paysages/clouds.h +++ b/lib_paysages/clouds.h @@ -38,6 +38,7 @@ typedef struct } CloudsDefinition; void cloudsInit(); +void cloudsQuit(); void cloudsSave(FILE* f, CloudsDefinition* definition); void cloudsLoad(FILE* f, CloudsDefinition* definition); diff --git a/lib_paysages/lighting.c b/lib_paysages/lighting.c index 8890609..37f273b 100644 --- a/lib_paysages/lighting.c +++ b/lib_paysages/lighting.c @@ -30,6 +30,10 @@ void lightingInit() _LIGHT_NULL.amplitude = 0.0; } +void lightingQuit() +{ +} + void lightingSave(FILE* f, LightingDefinition* definition) { int i; diff --git a/lib_paysages/lighting.h b/lib_paysages/lighting.h index f973fec..47c8604 100644 --- a/lib_paysages/lighting.h +++ b/lib_paysages/lighting.h @@ -31,6 +31,7 @@ typedef struct } LightingDefinition; void lightingInit(); +void lightingQuit(); void lightingSave(FILE* f, LightingDefinition* definition); void lightingLoad(FILE* f, LightingDefinition* definition); diff --git a/lib_paysages/main.c b/lib_paysages/main.c index 53620a9..b853964 100644 --- a/lib_paysages/main.c +++ b/lib_paysages/main.c @@ -47,6 +47,12 @@ void paysagesInit() cameraSetTarget(x - 1.0, height, 0.0);*/ } +void paysagesQuit() +{ + sceneryQuit(); + renderQuit(); +} + void paysagesSave(char* filepath) { scenerySaveToFile(filepath); diff --git a/lib_paysages/main.h b/lib_paysages/main.h index 96188ec..efef7db 100644 --- a/lib_paysages/main.h +++ b/lib_paysages/main.h @@ -6,6 +6,7 @@ extern "C" { #endif void paysagesInit(); +void paysagesQuit(); void paysagesSave(char* filepath); void paysagesLoad(char* filepath); diff --git a/lib_paysages/render.c b/lib_paysages/render.c index d196258..5aa174b 100644 --- a/lib_paysages/render.c +++ b/lib_paysages/render.c @@ -44,6 +44,10 @@ void renderInit() { } +void renderQuit() +{ +} + RenderArea* renderCreateArea() { RenderArea* result; @@ -74,8 +78,19 @@ RenderArea* renderCreateArea() void renderDeleteArea(RenderArea* area) { + int x; + int y; + + for (x = 0; x < area->width; x++) + { + for (y = 0; y < area->height; y++) + { + arrayDelete(area->pixels + (y * area->width + x)); + } + } + mutexDestroy(area->lock); - arrayDelete(area->pixels); + free(area->pixels); free(area->scanline_up); free(area->scanline_down); free(area); diff --git a/lib_paysages/render.h b/lib_paysages/render.h index f55c811..9a566b5 100644 --- a/lib_paysages/render.h +++ b/lib_paysages/render.h @@ -10,6 +10,8 @@ extern "C" { #endif void renderInit(); +void renderQuit(); + RenderArea* renderCreateArea(); void renderDeleteArea(RenderArea* area); diff --git a/lib_paysages/scenery.c b/lib_paysages/scenery.c index a01d5d9..bb7e379 100644 --- a/lib_paysages/scenery.c +++ b/lib_paysages/scenery.c @@ -36,6 +36,27 @@ void sceneryInit() _water = waterCreateDefinition(); } +void sceneryQuit() +{ + atmosphereDeleteDefinition(&_atmosphere); + cameraDeleteDefinition(&_camera); + cloudsDeleteDefinition(&_clouds); + lightingDeleteDefinition(&_lighting); + skyDeleteDefinition(&_sky); + terrainDeleteDefinition(&_terrain); + texturesDeleteDefinition(&_textures); + waterDeleteDefinition(&_water); + + atmosphereQuit(); + cameraQuit(); + cloudsQuit(); + lightingQuit(); + skyQuit(); + terrainQuit(); + texturesQuit(); + waterQuit(); +} + void scenerySaveToFile(char* filepath) { FILE* f = fopen(filepath, "wb"); diff --git a/lib_paysages/scenery.h b/lib_paysages/scenery.h index 6b8791e..de731cb 100644 --- a/lib_paysages/scenery.h +++ b/lib_paysages/scenery.h @@ -24,6 +24,8 @@ extern "C" { #endif void sceneryInit(); +void sceneryQuit(); + void scenerySaveToFile(char* filepath); void sceneryLoadFromFile(char* filepath); diff --git a/lib_paysages/sky.c b/lib_paysages/sky.c index f8ae1a3..926f822 100644 --- a/lib_paysages/sky.c +++ b/lib_paysages/sky.c @@ -18,6 +18,10 @@ void skyInit() { } +void skyQuit() +{ +} + void skySave(FILE* f, SkyDefinition* definition) { toolsSaveDouble(f, &definition->daytime); diff --git a/lib_paysages/sky.h b/lib_paysages/sky.h index 461b89e..d88a2d5 100644 --- a/lib_paysages/sky.h +++ b/lib_paysages/sky.h @@ -22,6 +22,7 @@ typedef struct } SkyDefinition; void skyInit(); +void skyQuit(); void skySave(FILE* f, SkyDefinition* definition); void skyLoad(FILE* f, SkyDefinition* definition); diff --git a/lib_paysages/terrain.c b/lib_paysages/terrain.c index 9290ae7..e14865a 100644 --- a/lib_paysages/terrain.c +++ b/lib_paysages/terrain.c @@ -17,6 +17,10 @@ void terrainInit() { } +void terrainQuit() +{ +} + void terrainSave(FILE* f, TerrainDefinition* definition) { int i; diff --git a/lib_paysages/terrain.h b/lib_paysages/terrain.h index c903164..123df98 100644 --- a/lib_paysages/terrain.h +++ b/lib_paysages/terrain.h @@ -25,6 +25,7 @@ typedef struct } TerrainDefinition; void terrainInit(); +void terrainQuit(); void terrainSave(FILE* f, TerrainDefinition* definition); void terrainLoad(FILE* f, TerrainDefinition* definition); diff --git a/lib_paysages/textures.c b/lib_paysages/textures.c index ec45083..4f10238 100644 --- a/lib_paysages/textures.c +++ b/lib_paysages/textures.c @@ -20,6 +20,11 @@ void texturesInit() _NULL_LAYER = texturesLayerCreateDefinition(); } +void texturesQuit() +{ + texturesLayerDeleteDefinition(&_NULL_LAYER); +} + void texturesSave(FILE* f, TexturesDefinition* definition) { int i; diff --git a/lib_paysages/textures.h b/lib_paysages/textures.h index f01debc..e3b29dc 100644 --- a/lib_paysages/textures.h +++ b/lib_paysages/textures.h @@ -26,6 +26,7 @@ typedef struct } TexturesDefinition; void texturesInit(); +void texturesQuit(); void texturesSave(FILE* f, TexturesDefinition* definition); void texturesLoad(FILE* f, TexturesDefinition* definition); diff --git a/lib_paysages/water.c b/lib_paysages/water.c index 6b77600..edff3b0 100644 --- a/lib_paysages/water.c +++ b/lib_paysages/water.c @@ -15,6 +15,10 @@ void waterInit() { } +void waterQuit() +{ +} + void waterSave(FILE* f, WaterDefinition* definition) { toolsSaveDouble(f, &definition->height); diff --git a/lib_paysages/water.h b/lib_paysages/water.h index afcfb79..5a5ccdf 100644 --- a/lib_paysages/water.h +++ b/lib_paysages/water.h @@ -35,6 +35,7 @@ typedef struct } WaterResult; void waterInit(); +void waterQuit(); void waterSave(FILE* f, WaterDefinition* definition); void waterLoad(FILE* f, WaterDefinition* definition);