Ejemplo n.º 1
0
    pixel_t operator()( const vector2_t& p, const vector2_t& du, const vector2_t& dv) const
	{
		RAMEN_ASSERT( has_top_sampler_);

		int y = math::fast_float_floor( p.y);

		if( y < src_area().min.y || y > src_area().max.y)
	        return pixel_t( 0, 0, 0, 0);

		int x = math::fast_float_floor( p.x);

		if( x < src_area().min.x || x > src_area().max.x)
	        return pixel_t( 0, 0, 0, 0);

		float max_width = std::max( Imath::Math<float>::fabs( du.x),  std::max( Imath::Math<float>::fabs( du.y),
							std::max( Imath::Math<float>::fabs( dv.x), Imath::Math<float>::fabs( dv.y))));

		float width = 2.0f * max_width;

		float fract;
		int level = find_level_and_fract( width, fract);
		image::pixel_t result = sample_level( level, p);

		if( fract != 0.0f)
		{
			RAMEN_ASSERT( level < num_levels() - 1);

			image::pixel_t tmp = sample_level( level + 1, p);
			result = lerp_pixels( tmp, result, fract);
		}

		return result;
	}
Ejemplo n.º 2
0
corner_pin_node_t::matrix3_type corner_pin_node_t::do_calc_transform_matrix_at_frame( float frame, int subsample) const
{
    Imath::Box2i src_area( input_as<image_node_t>()->format());
	src_area.max.x++;
	src_area.max.y++;

    boost::array<Imath::V2d, 4> src_pts;
    src_pts[0].x = src_area.min.x;
    src_pts[0].y = src_area.min.y;
    src_pts[1].x = src_area.max.x;
    src_pts[1].y = src_area.min.y;
    src_pts[2].x = src_area.max.x;
    src_pts[2].y = src_area.max.y;
    src_pts[3].x = src_area.min.x;
    src_pts[3].y = src_area.max.y;

    boost::array<Imath::V2d, 4> dst_pts;
    get_corners_at_frame( dst_pts, frame, 1.0f / subsample);

    if( quad_is_convex( dst_pts))
	{
		boost::optional<matrix3_type> m( quadToQuadMatrix( src_pts, dst_pts));

		if( m)
		    return m.get();
	}
	
	return matrix3_type( 0, 0, 0,
						0, 0, 0,
						0, 0, 0);
}
Ejemplo n.º 3
0
void resize_catrom( const image::const_image_view_t& src, const Imath::Box2i& src_defined,
					   const image::image_view_t& dst, const Imath::Box2i& dst_area,
					  const Imath::V2i& center, const Imath::V2f& scale)
{
	Imath::Box2i src_area( resize_box( dst_area, center, scale.x, scale.y));
	Imath::Box2i tmp_area( calc_tmp_area<lanczos3_filter_t>( src_area, dst_area, scale.y));
	image::buffer_t tmp( tmp_area, 4);
	resize_catrom_( src, src_defined, src_area, tmp.rgba_view(), tmp_area, dst, dst_area, center, scale);
}
Ejemplo n.º 4
0
/**
 * Copy tile area into clipboard.
 *
 * @param tile Northern tile of the area to copy.
 * @param flags Command flags.
 * @param p1 Various bits:
 *    \li bits  0..1   [2] - clipboard buffer index
 *    \li bits  2..31 [30] - [ unused ]
 * @param p2 Various bits:
 *    \li bits  0..5   [6] - width of area to copy
 *    \li bits  6..11  [6] - height of area to copy
 *    \li bits 12..31 [20] - [ unused ]
 * @param text Unused.
 * @return The cost of this operation or an error.
 */
CommandCost CmdCopyToClipboard(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
{
	/* clipboard is available only in a sigle player game and only to the local company */
	if (_networking || !IsLocalCompany()) return CMD_ERROR;

	/* extract and validate clipboard buffer index */
	uint index = GB(p1, 0, 2);
	if (index >= NUM_CLIPBOARD_BUFFERS || index == INSTANT_COPY_PASTE_BUFFER) return CMD_ERROR;

	/* calculate and validate source area */
	TileArea src_area(tile, GB(p2, 0, 6), GB(p2, 6, 6));
	CommandCost ret = ValParamCopyPasteArea(src_area);
	if (ret.Failed()) return ret;

	/* copy to clipboard only when executing (DC_EXEC) */
	if (flags & DC_EXEC) CopyToClipboard(GetClipboardBuffer(index), src_area);

	/* return the cost */
	return CommandCost(INVALID_EXPENSES, 0);
}
Ejemplo n.º 5
0
boost::optional<Imath::M33d> corner_pin_node_t::do_calc_transform_matrix_at_time( float time, int subsample) const
{
    Imath::Box2i src_area( input()->domain());

    boost::array<Imath::V2d, 4> src_pts;
    src_pts[0].x = src_area.min.x;
    src_pts[0].y = src_area.min.y;
    src_pts[1].x = src_area.max.x;
    src_pts[1].y = src_area.min.y;
    src_pts[2].x = src_area.max.x;
    src_pts[2].y = src_area.max.y;
    src_pts[3].x = src_area.min.x;
    src_pts[3].y = src_area.max.y;

    boost::array<Imath::V2d, 4> dst_pts;
    get_corners_at_time( dst_pts, time);

    boost::optional<Imath::M33d> m;

    if( quad_is_convex( dst_pts))
        m = quadToQuadMatrix( src_pts, dst_pts);

    return m;
}
Ejemplo n.º 6
0
    void operator()(unsigned begin, unsigned end)
    {
        using color = agg::rgba8;
        using order = agg::order_rgba;
        using const_rendering_buffer = util::rendering_buffer<image_rgba8>;
        using blender_type = agg::comp_op_adaptor_rgba_pre<color, order>;
        using pixfmt_type = agg::pixfmt_custom_blend_rgba<blender_type, agg::rendering_buffer>;
        using renderer_type = agg::renderer_base<pixfmt_type>;

        agg::rendering_buffer dst_buffer(
            dst.bytes(),
            safe_cast<unsigned>(dst.width()),
            safe_cast<unsigned>(dst.height()),
            safe_cast<int>(dst.row_size()));
        const_rendering_buffer src_buffer(src);
        pixfmt_type pixf(dst_buffer);
        pixf.comp_op(static_cast<agg::comp_op_e>(mode));
        agg::pixfmt_alpha_blend_rgba<agg::blender_rgba32_pre,
                                     const_rendering_buffer,
                                     agg::pixel32_type> pixf_mask(src_buffer);
        renderer_type ren(pixf);
        agg::rect_i src_area(0, begin, src.width() - 1, end - 1);
        ren.blend_from(pixf_mask, &src_area, dx, dy, safe_cast<agg::cover_type>(255 * opacity));
    }