summaryrefslogtreecommitdiff
path: root/pixman/pixman-bits-image.c
diff options
context:
space:
mode:
authorSiarhei Siamashka <siarhei.siamashka@gmail.com>2012-12-14 18:43:57 +0200
committerSiarhei Siamashka <siarhei.siamashka@gmail.com>2013-01-27 20:49:43 +0200
commitc3deb8334a71998b986a7b8d5b74bedf26cc23aa (patch)
tree6e1a6887a9436c41d3ba2df0a65590a401ed55e1 /pixman/pixman-bits-image.c
parenta47ed2c31180e6c3b332747a1721731e0649b10f (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