static void pixelize (gfloat *input, gfloat *output, const GeglRectangle *roi, const GeglRectangle *extended_roi, const GeglRectangle *whole_region, GeglProperties *o) { gint start_x = block_index (roi->x, o->size_x) * o->size_x; gint start_y = block_index (roi->y, o->size_y) * o->size_y; gint x, y; gint off_shape_x, off_shape_y; gfloat color[4]; GeglRectangle rect_shape; rect_shape.width = ceilf (o->size_x * (gfloat)o->ratio_x); rect_shape.height = ceilf (o->size_y * (gfloat)o->ratio_y); off_shape_x = floorf ((o->size_x - (gfloat)o->ratio_x * o->size_x) / 2.0f); off_shape_y = floorf ((o->size_y - (gfloat)o->ratio_y * o->size_y) / 2.0f); for (y = start_y; y < roi->y + roi->height; y += o->size_y) for (x = start_x; x < roi->x + roi->width; x += o->size_x) { GeglRectangle rect = {x, y, o->size_x, o->size_y}; GeglRectangle rect2; rect_shape.x = x + off_shape_x; rect_shape.y = y + off_shape_y; gegl_rectangle_intersect (&rect, whole_region, &rect); if (rect.width < 1 || rect.height < 1) continue; rect2.x = rect.x - extended_roi->x; rect2.y = rect.y - extended_roi->y; rect2.width = rect.width; rect2.height = rect.height; mean_rectangle (input, &rect2, extended_roi->width, color); gegl_rectangle_intersect (&rect, roi, &rect); rect2.x = rect.x - roi->x; rect2.y = rect.y - roi->y; rect2.width = rect.width; rect2.height = rect.height; rect_shape.x -= roi->x; rect_shape.y -= roi->y; set_rectangle (output, &rect2, &rect_shape, roi->width, color, o->norm); } }
image_type render(mapnik::Map & map, double scale_factor, map_size const & tiles) const { mapnik::box2d<double> box = map.get_current_extent(); image_type image(map.width(), map.height()); map.resize(image.width() / tiles.width, image.height() / tiles.height); double tile_box_width = box.width() / tiles.width; double tile_box_height = box.height() / tiles.height; for (std::size_t tile_y = 0; tile_y < tiles.height; tile_y++) { for (std::size_t tile_x = 0; tile_x < tiles.width; tile_x++) { mapnik::box2d<double> tile_box( box.minx() + tile_x * tile_box_width, box.miny() + tile_y * tile_box_height, box.minx() + (tile_x + 1) * tile_box_width, box.miny() + (tile_y + 1) * tile_box_height); map.zoom_to_box(tile_box); image_type tile(ren.render(map, scale_factor)); set_rectangle(tile, image, tile_x * tile.width(), (tiles.height - 1 - tile_y) * tile.height()); } } return image; }
static gboolean process (GeglOperation *operation, GeglBuffer *input, GeglBuffer *output, const GeglRectangle *roi, gint level) { GeglRectangle src_rect; GeglRectangle *whole_region; GeglProperties *o = GEGL_PROPERTIES (operation); GeglOperationAreaFilter *op_area; op_area = GEGL_OPERATION_AREA_FILTER (operation); whole_region = gegl_operation_source_get_bounding_box (operation, "input"); if (gegl_operation_use_opencl (operation)) if (cl_process (operation, input, output, roi)) return TRUE; if (o->size_x * o->size_y < SQR (ALLOC_THRESHOLD_SIZE)) { gfloat background_color[4]; gfloat *input_buf = g_new (gfloat, (CHUNK_SIZE + o->size_x * 2) * (CHUNK_SIZE + o->size_y * 2) * 4); gfloat *output_buf = g_new (gfloat, SQR (CHUNK_SIZE) * 4); gint i, j; gegl_color_get_pixel (o->background, babl_format("RaGaBaA float"), background_color); for (j = 0; (j-1) * CHUNK_SIZE < roi->height; j++) for (i = 0; (i-1) * CHUNK_SIZE < roi->width; i++) { GeglRectangle chunked_result; GeglRectangle chunked_sizes; chunked_result = *GEGL_RECTANGLE (roi->x + i * CHUNK_SIZE, roi->y + j * CHUNK_SIZE, CHUNK_SIZE, CHUNK_SIZE); gegl_rectangle_intersect (&chunked_result, &chunked_result, roi); if (chunked_result.width < 1 || chunked_result.height < 1) continue; src_rect = chunked_result; src_rect.x -= op_area->left; src_rect.y -= op_area->top; src_rect.width += op_area->left + op_area->right; src_rect.height += op_area->top + op_area->bottom; gegl_buffer_get (input, &src_rect, 1.0, babl_format ("RaGaBaA float"), input_buf, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_CLAMP); gegl_rectangle_copy (&chunked_sizes, &chunked_result); chunked_sizes.x = 0; chunked_sizes.y = 0; set_rectangle (output_buf, &chunked_sizes, &chunked_sizes, chunked_result.width, background_color, GEGL_PIXELIZE_NORM_INFINITY); pixelize (input_buf, output_buf, &chunked_result, &src_rect, whole_region, o); gegl_buffer_set (output, &chunked_result, 0, babl_format ("RaGaBaA float"), output_buf, GEGL_AUTO_ROWSTRIDE); } g_free (input_buf); g_free (output_buf); } else { gegl_buffer_set_color (output, roi, o->background); pixelize_noalloc (input, output, roi, whole_region, o); } return TRUE; }
void MaterialDescription::load_xml(const xmlNodePtr node) { xmlNodePtr it; Uint32 i; SamplerParameterType sampler; if (node == 0) { EL_THROW_EXCEPTION(InvalidParameterException() << errinfo_message(UTF8("parameter is zero")) << errinfo_parameter_name(UTF8("node"))); } if (xmlStrcmp(node->name, BAD_CAST UTF8("material")) != 0) { return; } it = XmlUtil::children(node, true); do { for (i = 0; i < m_textures.size(); ++i) { sampler = static_cast<SamplerParameterType>(i); if (xmlStrcmp(it->name, BAD_CAST SamplerParameterUtil::get_str( sampler).get().c_str()) == 0) { set_texture(XmlUtil::get_string_value( it), sampler); set_sRGB(XmlUtil::get_bool_property(it, String(UTF8("sRGB"))), sampler); set_rectangle( XmlUtil::get_bool_property(it, String(UTF8( "rectangle")), false), sampler); } } if (xmlStrcmp(it->name, BAD_CAST UTF8("name")) == 0) { set_name(XmlUtil::get_string_value(it)); } if (xmlStrcmp(it->name, BAD_CAST UTF8("effect")) == 0) { set_effect(XmlUtil::get_string_value(it)); } if (xmlStrcmp(it->name, BAD_CAST UTF8("script")) == 0) { set_script(XmlUtil::get_string_value(it)); } if (xmlStrcmp(it->name, BAD_CAST UTF8("texture_matrix_0")) == 0) { set_texture_matrix( XmlUtil::get_mat2x3_value(it), 0); } if (xmlStrcmp(it->name, BAD_CAST UTF8("texture_matrix_1")) == 0) { set_texture_matrix( XmlUtil::get_mat2x3_value(it), 1); } if (xmlStrcmp(it->name, BAD_CAST UTF8("color")) == 0) { set_color(XmlUtil::get_vec4_value(it)); } if (xmlStrcmp(it->name, BAD_CAST UTF8("dudv_scale_offset")) == 0) { set_dudv_scale_offset(XmlUtil::get_vec4_value( it)); } if (xmlStrcmp(it->name, BAD_CAST UTF8("cast_shadows")) == 0) { set_cast_shadows(XmlUtil::get_bool_value(it)); } if (xmlStrcmp(it->name, BAD_CAST UTF8("culling")) == 0) { set_culling(XmlUtil::get_bool_value(it)); } } while (XmlUtil::next(it, true)); }
BlockGibEntity::BlockGibEntity() : PhysicsEntity(true) { set_respect_gravity(true); set_rectangle(sf::FloatRect(sf::Vector2f(), 4.0f * Block::BLOCK_SIZE)); }