diff options
author | Siarhei Siamashka <siarhei.siamashka@gmail.com> | 2012-12-14 18:43:57 +0200 |
---|---|---|
committer | Siarhei Siamashka <siarhei.siamashka@gmail.com> | 2013-01-27 20:49:43 +0200 |
commit | c3deb8334a71998b986a7b8d5b74bedf26cc23aa (patch) | |
tree | 6e1a6887a9436c41d3ba2df0a65590a401ed55e1 /pixman/pixman-bits-image.c | |
parent | a47ed2c31180e6c3b332747a1721731e0649b10f (diff) |
Add higher precision "pixman_transform_point_*" functions
The following new functions are added:
pixman_transform_point_31_16_3d() -
Calculates the product of a matrix and a vector multiplication.
pixman_transform_point_31_16() -
Calculates the product of a matrix and a vector multiplication.
Then converts the homogenous resulting vector [x, y, z] to
cartesian [x', y', 1] variant, where x' = x / z, and y' = y / z.
pixman_transform_point_31_16_affine() -
A faster sibling of the other two functions, which assumes affine
transformation, where the bottom row of the matrix is [0, 0, 1] and
the last element of the input vector is set to 1.
These functions transform a point with 31.16 fixed point coordinates from
the destination space to a point with 48.16 fixed point coordinates in
the source space.
The results are accurate and the rounding errors may only show up in
the least significant bit. No overflows are possible for the affine
transformations as long as the input data is provided in 31.16 format.
In the case of projective transformations, some output values may be not
representable using 48.16 fixed point format. In this case the results
are clamped to return maximum or minimum 48.16 values (so that the caller
can at least handle NONE and PAD repeats correctly).
Diffstat (limited to 'pixman/pixman-bits-image.c')
0 files changed, 0 insertions, 0 deletions