// The start of the Application int App::start(const std::vector<std::string> &args) { clan::DisplayWindowDescription win_desc; win_desc.set_allow_resize(true); win_desc.set_title("Perlin Noise Example"); win_desc.set_size(clan::Size( 800, 520 ), false); clan::DisplayWindow window(win_desc); clan::SlotContainer cc; cc.connect(window.sig_window_close(), clan::bind_member(this, &App::on_window_close)); cc.connect(window.get_ic().get_keyboard().sig_key_up(), clan::bind_member(this, &App::on_input_up)); std::string theme; if (clan::FileHelp::file_exists("../../../Resources/GUIThemeAero/theme.css")) theme = "../../../Resources/GUIThemeAero"; else if (clan::FileHelp::file_exists("../../../Resources/GUIThemeBasic/theme.css")) theme = "../../../Resources/GUIThemeBasic"; else throw clan::Exception("No themes found"); clan::Canvas canvas(window); clan::GUIWindowManagerTexture wm(window); clan::GUIManager gui(wm, theme); // Deleted automatically by the GUI Options *options = new Options(gui, canvas.get_size()); clan::Image image_grid(canvas, "../../Display_Render/Blend/Resources/grid.png"); image_grid.set_color(clan::Colorf(0.4f, 0.4f, 1.0f, 1.0f)); clan::PerlinNoise noise; clan::Image noise_image; clan::TextureFormat last_sized_format = clan::tf_rgb8; float last_amplitude = 0.0f; int last_width = 0; int last_height = 0; int last_octaves = 0 ; float last_start_x = 0.0f; float last_length_x = 0.0f; float last_start_y = 0.0f; float last_length_y = 0.0f; float last_position_z = 0.0f; float last_position_w = 0.0f; PerlinDimension last_dimension = perlin_2d; bool last_is_normals_set = false; while (!quit) { wm.process(); wm.draw_windows(canvas); bool changed_flag = false; if (last_dimension != options->dimension) { changed_flag = true; last_dimension = options->dimension; } if (last_is_normals_set != options->is_normals_set) { changed_flag = true; last_is_normals_set = options->is_normals_set; } if (last_sized_format != options->sized_format) { changed_flag = true; last_sized_format = options->sized_format; noise.set_format(last_sized_format); } if (last_amplitude != options->amplitude) { changed_flag = true; last_amplitude = options->amplitude; noise.set_amplitude(last_amplitude); } if (last_width != options->width) { changed_flag = true; last_width = options->width; noise.set_size(last_width, last_height); } if (last_height != options->height) { changed_flag = true; last_height = options->height; noise.set_size(last_width, last_height); } if (last_octaves != options->octaves) { changed_flag = true; last_octaves = options->octaves; noise.set_octaves(last_octaves); } if (last_start_x != options->start_x) { changed_flag = true; last_start_x = options->start_x; } if (last_length_x != options->length_x) { changed_flag = true; last_length_x = options->length_x; } if (last_start_y != options->start_y) { changed_flag = true; last_start_y = options->start_y; } if (last_length_y != options->length_y) { changed_flag = true; last_length_y = options->length_y; } if (last_position_z != options->position_z) { changed_flag = true; last_position_z = options->position_z; } if (last_position_w != options->position_w) { changed_flag = true; last_position_w = options->position_w; } if (changed_flag) { clan::PixelBuffer pbuff; switch (last_dimension) { case perlin_1d: pbuff = noise.create_noise1d(last_start_x, last_start_x + last_length_x); break; case perlin_2d: pbuff = noise.create_noise2d(last_start_x, last_start_x + last_length_x, last_start_y, last_start_y + last_length_y); break; case perlin_3d: pbuff = noise.create_noise3d(last_start_x, last_start_x + last_length_x, last_start_y, last_start_y + last_length_y, last_position_z); break; case perlin_4d: default: pbuff = noise.create_noise4d(last_start_x, last_start_x + last_length_x, last_start_y, last_start_y + last_length_y, last_position_z, last_position_w); break; } if (last_is_normals_set) pbuff = convert_to_normalmap(pbuff); pbuff = pbuff.to_format(clan::tf_rgba8); // Required for clanD3D noise_image = clan::Image(canvas, pbuff, pbuff.get_size()); } image_grid.draw(canvas, 32, 32); noise_image.draw(canvas, 33, 33); window.flip(1); clan::KeepAlive::process(); } return 0; }
bool App::update() { options->set_needs_render(); options->set_viewport(canvas.get_size()); options->set_background_color(clan::Colorf(0.6f, 0.6f, 0.2f, 1.0f)); options->update(); if (last_dimension != options->dimension) { changed_flag = true; last_dimension = options->dimension; } if (last_is_normals_set != options->is_normals_set) { changed_flag = true; last_is_normals_set = options->is_normals_set; } if (last_sized_format != options->sized_format) { changed_flag = true; last_sized_format = options->sized_format; noise.set_format(last_sized_format); } if (last_amplitude != options->amplitude) { changed_flag = true; last_amplitude = options->amplitude; noise.set_amplitude(last_amplitude); } if (last_width != options->width) { changed_flag = true; last_width = options->width; noise.set_size(last_width, last_height); } if (last_height != options->height) { changed_flag = true; last_height = options->height; noise.set_size(last_width, last_height); } if (last_octaves != options->octaves) { changed_flag = true; last_octaves = options->octaves; noise.set_octaves(last_octaves); } if (last_start_x != options->start_x) { changed_flag = true; last_start_x = options->start_x; } if (last_length_x != options->length_x) { changed_flag = true; last_length_x = options->length_x; } if (last_start_y != options->start_y) { changed_flag = true; last_start_y = options->start_y; } if (last_length_y != options->length_y) { changed_flag = true; last_length_y = options->length_y; } if (last_position_z != options->position_z) { changed_flag = true; last_position_z = options->position_z; } if (last_position_w != options->position_w) { changed_flag = true; last_position_w = options->position_w; } if (changed_flag) { changed_flag = false; clan::PixelBuffer pbuff; switch (last_dimension) { case perlin_1d: pbuff = noise.create_noise1d(last_start_x, last_start_x + last_length_x); break; case perlin_2d: pbuff = noise.create_noise2d(last_start_x, last_start_x + last_length_x, last_start_y, last_start_y + last_length_y); break; case perlin_3d: pbuff = noise.create_noise3d(last_start_x, last_start_x + last_length_x, last_start_y, last_start_y + last_length_y, last_position_z); break; case perlin_4d: default: pbuff = noise.create_noise4d(last_start_x, last_start_x + last_length_x, last_start_y, last_start_y + last_length_y, last_position_z, last_position_w); break; } if (last_is_normals_set) pbuff = convert_to_normalmap(pbuff); pbuff = pbuff.to_format(clan::tf_rgba8); // Required for clanD3D noise_image = clan::Image(canvas, pbuff, pbuff.get_size()); } image_grid.draw(canvas, 32, 32); noise_image.draw(canvas, 33, 33); window.flip(1); return !quit; }