diff --git a/Makefile b/Makefile index fd91d01..b500b2c 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,9 @@ all: cd lib_paysages && make + cd gui_gtk && make clean: cd lib_paysages && make clean + cd gui_gtk && make clean .PHONY:all clean diff --git a/gui_gtk/Makefile b/gui_gtk/Makefile new file mode 100644 index 0000000..08bff95 --- /dev/null +++ b/gui_gtk/Makefile @@ -0,0 +1,21 @@ +SOURCES=$(wildcard *.c) +OBJECTS=${SOURCES:.c=.o} +HEADERS=$(wildcard ../lib_paysages/shared/*.h ../lib_paysages/*.h *.h) +RESULT=paysages-gtk +CC_FLAGS=-g -pg -Wall $(shell pkg-config --cflags gtk+-3.0) -I.. +CC_LDFLAGS=$(shell pkg-config --libs gtk+-3.0) -L../lib_paysages/ -lpaysages + +all:${RESULT} + +clean: + rm -f ${OBJECTS} + rm -f ${RESULT} + +%.o:%.c ${HEADERS} + ${CC} -c ${CC_FLAGS} $< -o $@ + +${RESULT}:${OBJECTS} + ${CC} $^ ${CC_LDFLAGS} -o $@ + +.PHONY:all clean + diff --git a/gui_gtk/common.h b/gui_gtk/common.h index 894d0ef..380d817 100644 --- a/gui_gtk/common.h +++ b/gui_gtk/common.h @@ -1,7 +1,7 @@ #include #include -#include "../shared/types.h" +#include "lib_paysages/shared/types.h" #include @@ -24,6 +24,8 @@ static inline GtkWidget* _get_widget(const char* name, const char* file, int lin } #define GET_WIDGET(_name_) (_get_widget(_name_, __FILE__, __LINE__)) +void guiUpdate(); + void guiTerrainInit(); void guiWaterInit(); diff --git a/gui_gtk/dlg_noise.c b/gui_gtk/dlg_noise.c index b24b6f5..9566893 100644 --- a/gui_gtk/dlg_noise.c +++ b/gui_gtk/dlg_noise.c @@ -1,8 +1,8 @@ /* Noise editor dialog */ #include "common.h" -#include "../shared/functions.h" -#include "../shared/constants.h" +#include "lib_paysages/shared/functions.h" +#include "lib_paysages/shared/constants.h" static GtkWidget* _dialog; static SmallPreview* _preview; @@ -28,13 +28,13 @@ static Color _cbPreview2DRenderPixel(SmallPreview* preview, double x, double y, { Color col; double max_value; - + /* TODO Cache this value */ max_value = noiseGetMaxValue(_generator); col.r = col.g = col.b = (noiseGet2DTotal(_generator, x, y) / max_value) * 0.5 + 0.5; col.a = 1.0; - + return col; } @@ -42,16 +42,16 @@ static void _setPreviewMode(int mode) { GtkButton* button; double max_value; - + max_value = noiseGetMaxValue(_generator); - + button = GTK_BUTTON(GET_WIDGET("noise_editor_preview_mode")); if (mode == 1) { _current_mode = 1; guiPreviewSetRenderer(_preview, _cbPreview1DRenderPixel); gtk_button_set_label(button, "1D"); - + guiPreviewConfigScrolling(_preview, -max_value * 100.0, max_value * 100.0, -max_value, max_value); } else if (mode == 2) @@ -59,10 +59,10 @@ static void _setPreviewMode(int mode) _current_mode = 2; guiPreviewSetRenderer(_preview, _cbPreview2DRenderPixel); gtk_button_set_label(button, "2D"); - + guiPreviewConfigScrolling(_preview, -max_value * 100.0, max_value * 100.0, -max_value * 100.0, max_value * 100.0); } - + guiPreviewConfigScaling(_preview, max_value * 0.001, max_value * 0.1, max_value * 0.001); guiPreviewSetViewport(_preview, 0.0, 0.0, max_value * 0.01); } @@ -75,7 +75,7 @@ static void _redrawPreview() static void _resetPreview() { _setPreviewMode(_current_mode); - + _redrawPreview(); } diff --git a/gui_gtk/global.c b/gui_gtk/global.c index 1aa3e53..c3f5387 100644 --- a/gui_gtk/global.c +++ b/gui_gtk/global.c @@ -2,8 +2,8 @@ #include #include -#include "../shared/functions.h" -#include "../shared/constants.h" +#include "lib_paysages/shared/functions.h" +#include "lib_paysages/shared/constants.h" #include "common.h" GtkBuilder* gui_definition; @@ -106,3 +106,11 @@ void guiUpdate() guiPreviewRedrawAll(); } + +int main(int argc, char** argv) +{ + paysagesInit(); + guiInit(); + guiStart(); + return 0; +} diff --git a/gui_gtk/preview.c b/gui_gtk/preview.c index 6e547af..0412a52 100644 --- a/gui_gtk/preview.c +++ b/gui_gtk/preview.c @@ -3,11 +3,10 @@ #include #include #include "common.h" -#include "../shared/types.h" -#include "../shared/functions.h" -#include "../shared/constants.h" -#include "../shared/system.h" -#include "../water.h" +#include "lib_paysages/shared/types.h" +#include "lib_paysages/shared/functions.h" +#include "lib_paysages/shared/constants.h" +#include "lib_paysages/shared/system.h" #define MAX_PREVIEWS 30 @@ -17,7 +16,7 @@ struct SmallPreview double conf_scroll_xmax; double conf_scroll_ymin; double conf_scroll_ymax; - + double conf_scale_min; double conf_scale_max; double conf_scale_step; @@ -241,7 +240,7 @@ static inline int _fixScaling(SmallPreview* preview, double scaling, double* new static int _cbMouseScroll(GtkEventBox* image, GdkEventScroll* event, gpointer data) { SmallPreview* preview = (SmallPreview*)data; - + /* TODO Center the zoom on the cursor */ if (event->direction == GDK_SCROLL_UP) @@ -262,7 +261,7 @@ static int _cbMouseScroll(GtkEventBox* image, GdkEventScroll* event, gpointer da } mutexRelease(preview->lock); } - + return 1; } @@ -287,18 +286,18 @@ static int _cbMouseMove(GtkEventBox* image, GdkEventMotion* event, gpointer data if (event->state & GDK_BUTTON1_MASK) { mutexAcquire(preview->lock); - + dx = (int)event->x - preview->mousex; dy = (int)event->y - preview->mousey; - + if (_fixScroll(preview, dx, dy, &dx, &dy)) { _scrollPixbuf(preview, dx, dy); } - + preview->mousex = (int)event->x; preview->mousey = (int)event->y; - + mutexRelease(preview->lock); } diff --git a/gui_gtk/tab_clouds.c b/gui_gtk/tab_clouds.c index 0c1ef4b..a7fe8de 100644 --- a/gui_gtk/tab_clouds.c +++ b/gui_gtk/tab_clouds.c @@ -1,9 +1,9 @@ /* Terrain tab */ #include "common.h" -#include "../shared/functions.h" -#include "../shared/constants.h" -#include "../clouds.h" +#include "lib_paysages/shared/functions.h" +#include "lib_paysages/shared/constants.h" +#include "lib_paysages/clouds.h" #include static SmallPreview* _preview; @@ -21,16 +21,16 @@ static void _revertCurrentLayer() { cloudsCopyDefinition(cloudsGetDefinition(_current_layer), &_definition); } - + /* TODO Revert layer from config */ - + guiPreviewRedraw(_preview); } static void _applyCurrentLayer() { /* TODO Apply layer config */ - + guiUpdate(); } @@ -48,7 +48,7 @@ static void _revertAll() gtk_list_store_append(_list_layers_model, &row); gtk_list_store_set(_list_layers_model, &row, 0, layer.ymin, 1, layer.ymax - layer.ymin, -1); } - + if (_current_layer < 0 || _current_layer >= n) { _current_layer = -1; @@ -62,7 +62,7 @@ static Color _cbPreviewPixel(SmallPreview* preview, double x, double y, double x { Color result, layer_color; Vector3 start, end; - + if (_current_layer < 0) { return COLOR_BLACK; @@ -118,7 +118,7 @@ void guiCloudsInit() guiPreviewConfigScrolling(_preview, -10000.0, 10000.0, -10000.0, 10000.0); guiPreviewSetViewport(_preview, 0.0, 0.0, 10.0); guiPreviewSetRenderer(_preview, _cbPreviewPixel); - + g_signal_connect(_list_layers, "cursor-changed", G_CALLBACK(_cbLayerSelected), NULL); guiCloudsUpdate(); diff --git a/gui_gtk/tab_render.c b/gui_gtk/tab_render.c index 7228280..e9b59f0 100644 --- a/gui_gtk/tab_render.c +++ b/gui_gtk/tab_render.c @@ -1,10 +1,10 @@ /* Terrain tab */ #include "common.h" -#include "../shared/functions.h" -#include "../shared/constants.h" -#include "../shared/globals.h" -#include "../shared/system.h" +#include "lib_paysages/shared/functions.h" +#include "lib_paysages/shared/constants.h" +#include "lib_paysages/shared/globals.h" +#include "lib_paysages/shared/system.h" static GtkImage* _render_final; static GdkPixbuf* _render_buffer = NULL; @@ -59,20 +59,20 @@ static void* _threadRender(void* data) static void _cbStartRender(GtkWidget* widget, gpointer data) { Thread* thread; - + /* Prepare render */ renderSetSize(gtk_spin_button_get_value(GTK_SPIN_BUTTON(GET_WIDGET("render_width"))), gtk_spin_button_get_value(GTK_SPIN_BUTTON(GET_WIDGET("render_height")))); autoSetRenderQuality((int)gtk_range_get_value(GTK_RANGE(GET_WIDGET("render_quality")))); gtk_widget_set_size_request(GET_WIDGET("render_preview"), render_width, render_height); gtk_image_clear(GTK_IMAGE(GET_WIDGET("render_preview"))); renderSetPreviewCallbacks(_previewResize, _previewClear, _previewDraw, _previewUpdate); - + /* Open render dialog */ gtk_window_set_deletable(GTK_WINDOW(GET_WIDGET("dialog_render")), 0); gtk_widget_show(GET_WIDGET("dialog_render")); gtk_widget_set_sensitive(GET_WIDGET("render_stop"), 1); gtk_widget_set_sensitive(GET_WIDGET("render_close"), 0); - + /* Do the render */ _rendering = 1; thread = threadCreate(_threadRender, NULL); @@ -85,7 +85,7 @@ static void _cbStartRender(GtkWidget* widget, gpointer data) } } threadJoin(thread); - + /* Clean up */ renderSetPreviewCallbacks(NULL, NULL, NULL, NULL); gtk_widget_set_sensitive(GET_WIDGET("render_stop"), 0); diff --git a/gui_gtk/tab_sky.c b/gui_gtk/tab_sky.c index 744c9b2..cf529fe 100644 --- a/gui_gtk/tab_sky.c +++ b/gui_gtk/tab_sky.c @@ -1,9 +1,9 @@ /* Terrain tab */ #include "common.h" -#include "../shared/functions.h" -#include "../shared/constants.h" -#include "../sky.h" +#include "lib_paysages/shared/functions.h" +#include "lib_paysages/shared/constants.h" +#include "lib_paysages/sky.h" #include static SmallPreview* _preview_horizon; diff --git a/gui_gtk/tab_terrain.c b/gui_gtk/tab_terrain.c index b013e47..33765ce 100644 --- a/gui_gtk/tab_terrain.c +++ b/gui_gtk/tab_terrain.c @@ -1,7 +1,7 @@ /* Terrain tab */ #include "common.h" -#include "../shared/functions.h" +#include "lib_paysages/shared/functions.h" static SmallPreview* _preview; @@ -11,7 +11,7 @@ static Color _cbPreviewRenderPixel(SmallPreview* preview, double x, double y, do result.r = result.g = result.b = terrainGetHeightNormalized(x, y); result.a = 1.0; - + return result; } @@ -30,7 +30,7 @@ static void _cbEditNoise(GtkWidget* widget, gpointer data) void guiTerrainInit() { g_signal_connect(GET_WIDGET("terrain_noise_edit"), "clicked", G_CALLBACK(_cbEditNoise), NULL); - + _preview = guiPreviewNew(GTK_IMAGE(GET_WIDGET("terrain_preview"))); guiPreviewConfigScaling(_preview, 0.01, 1.0, 0.05); guiPreviewConfigScrolling(_preview, -1000.0, 1000.0, -1000.0, 1000.0); diff --git a/gui_gtk/tab_water.c b/gui_gtk/tab_water.c index 55eef92..7c6eab4 100644 --- a/gui_gtk/tab_water.c +++ b/gui_gtk/tab_water.c @@ -1,9 +1,9 @@ /* Terrain tab */ #include "common.h" -#include "../shared/functions.h" -#include "../shared/constants.h" -#include "../water.h" +#include "lib_paysages/shared/functions.h" +#include "lib_paysages/shared/constants.h" +#include "lib_paysages/water.h" #include static SmallPreview* _preview_coverage; diff --git a/lib_paysages/Makefile b/lib_paysages/Makefile index c55a780..81b14d1 100644 --- a/lib_paysages/Makefile +++ b/lib_paysages/Makefile @@ -3,7 +3,7 @@ OBJECTS=${SOURCES:.c=.o} HEADERS=$(wildcard shared/*.h *.h) RESULT=libpaysages.so CC_FLAGS=-g -pg -Wall $(shell pkg-config --cflags glib-2.0) -CC_LDFLAGS=$(shell pkg-config --libs glib-2.0) +CC_LDFLAGS=$(shell pkg-config --libs glib-2.0) -lIL -lILU all:${RESULT} @@ -15,7 +15,7 @@ clean: ${CC} -c ${CC_FLAGS} $< -o $@ ${RESULT}:${OBJECTS} - ${CC} -o $@ -shared -Wl ${CC_LDFLAGS} $* + ${CC} $^ -shared ${CC_LDFLAGS} -o $@ .PHONY:all clean diff --git a/lib_paysages/main.c b/lib_paysages/main.c index 39cab06..572d589 100644 --- a/lib_paysages/main.c +++ b/lib_paysages/main.c @@ -12,94 +12,8 @@ #include "shared/functions.h" #include "shared/globals.h" -/*static char _filename[22]; - -static void _setupFilename(int number) +void paysagesInit() { - _filename[15] = (char)(97 + number / 26); - _filename[16] = (char)(97 + number % 26); -} - -static void _doRender(int number, int postonly) -{ - _setupFilename(number); - fprintf(stderr, "Rendering %s...\n", _filename); - - autoRenderAll(postonly); - - fprintf(stderr, "Saving %s...\n", _filename); - remove(_filename); - renderSaveToFile(_filename); -} - -static void _renderTurnTable(int count) -{ - int i; - - for (i = 0; i < count; i++) - { - cameraSetLocation(sin(M_PI * 2.0 * (double)i / (double)count) * 20.0, 8.0, cos(M_PI * 2.0 * (double)i / (double)count) * 20.0); - - _doRender(i, 0); - } -} - -static void _renderFly(int count, double speed) -{ - int i; - double x, y, z, ty1; - - x = 0.0; - y = 8.0; - z = 0.0; - for (i = 0; i < count; i++) - { - cameraSetLocation(x, y, z); - cameraSetTarget(x, y, z + 1.0); - _doRender(i, 0); - - ty1 = terrainGetHeight(x, z); - if (y > ty1 + 9.0) - { - y -= speed; - } - if (y < ty1 + 7.0) - { - y += speed; - } - z += speed; - } -} - -static void _renderDayTime(int count) -{ - int i; - - for (i = 0; i < count; i++) - { - autoSetDaytimeFraction(0.4 + (double)i / (double)count); - - _doRender(i, i > 0 ? 1 : 0); - } -} - -static void _renderQuality() -{ - int i; - - for (i = 1; i <= 10; i++) - { - autoSetRenderQuality(i); - renderSetSize(800, 600); - - _doRender(i - 1, 0); - } -}*/ - -int main(int argc, char** argv) -{ - /*strcpy(_filename, "./output/result__.png");*/ - ilInit(); iluInit(); @@ -107,20 +21,8 @@ int main(int argc, char** argv) cameraSetTarget(0.0, 5.0, 0.0); autoInit(); - guiInit(); autoSetRenderQuality(5); autoGenRealisticLandscape(0); autoSetDaytime(8, 30); - - guiStart(); - - //_doRender(0, 0); - //_renderTurnTable(600); - //_renderDayTime(600); - //_renderFly(600, 0.1); - //_renderQuality(); - - return 0; } - diff --git a/lib_paysages/shared/functions.h b/lib_paysages/shared/functions.h index 30c6277..246d994 100644 --- a/lib_paysages/shared/functions.h +++ b/lib_paysages/shared/functions.h @@ -4,6 +4,8 @@ #include "types.h" #include +void paysagesInit(); + /* array.c */ void arrayCreate(Array* array, int item_size); void arrayDelete(Array* array); @@ -91,11 +93,6 @@ void fogSetColor(Color col); void fogSetDistance(double near, double far); Color fogApplyToLocation(Vector3 location, Color base); -/* gui.c */ -void guiInit(); -void guiStart(); -void guiUpdate(); - /* lighting.c */ void lightingSave(FILE* f); void lightingLoad(FILE* f);