[PATCH renderproto] Add floating point transforms
walter harms
wharms at bfs.de
Sat Aug 16 01:44:52 PDT 2014
Am 15.08.2014 17:55, schrieb Keith Packard:
> Fixed point coordinates don't provide reasonable precision for
> transformation operations; the resulting transforms are often off by
> several pixels.
>
> Allow clients to represent the transformation using either fixed point
> or floating point.
>
> Signed-off-by: Keith Packard <keithp at keithp.com>
> ---
> configure.ac | 2 +-
> render.h | 5 ++++-
> renderproto.h | 26 ++++++++++++++++++++++++++
> renderproto.txt | 42 ++++++++++++++++++++++++++++++++++++++++--
> 4 files changed, 71 insertions(+), 4 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 8154a3a..43d054f 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1,5 +1,5 @@
> AC_PREREQ([2.60])
> -AC_INIT([RenderProto], [0.11.1], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
> +AC_INIT([RenderProto], [0.12.0], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
> AM_INIT_AUTOMAKE([foreign dist-bzip2])
>
> # Require xorg-macros: XORG_DEFAULT_OPTIONS
> diff --git a/render.h b/render.h
> index 7ecde3f..0f04cc6 100644
> --- a/render.h
> +++ b/render.h
> @@ -77,7 +77,10 @@ typedef XID PictFormat;
> #define X_RenderCreateLinearGradient 34
> #define X_RenderCreateRadialGradient 35
> #define X_RenderCreateConicalGradient 36
> -#define RenderNumberRequests (X_RenderCreateConicalGradient+1)
> +/* 0.12 */
> +#define X_RenderSetPictureTransformFloat 37
> +
> +#define RenderNumberRequests (X_RenderSetPictureTransformFloat+1)
>
> #define BadPictFormat 0
> #define BadPicture 1
> diff --git a/renderproto.h b/renderproto.h
> index b7b72c1..4fe8da6 100644
> --- a/renderproto.h
> +++ b/renderproto.h
> @@ -640,6 +640,32 @@ typedef struct {
>
> #define sz_xRenderCreateConicalGradientReq 24
>
> +/* 0.12 and higher */
> +
> +typedef struct {
> + float matrix11;
> + float matrix12;
> + float matrix13;
> + float matrix21;
> + float matrix22;
> + float matrix23;
> + float matrix31;
> + float matrix32;
> + float matrix33;
> +} xRenderTransformFloat;
Would it make sense to use double for internal calculation ?
Most systems provide 64bit (or more) fpu-registers these days.
re,
wh
> +#define sz_xRenderTransformFloat 36
> +
> +typedef struct {
> + CARD8 reqType;
> + CARD8 renderReqType;
> + CARD16 length B16;
> + Picture picture B32;
> + xRenderTransformFloat transform;
> +} xRenderSetPictureTransformFloatReq;
> +
> +#define sz_xRenderSetPictureTransformFloatReq 44
> +
> #undef Window
> #undef Drawable
> #undef Font
> diff --git a/renderproto.txt b/renderproto.txt
> index 9f1f231..fe5a233 100644
> --- a/renderproto.txt
> +++ b/renderproto.txt
> @@ -1,6 +1,6 @@
> The X Rendering Extension
> - Version 0.11
> - 2009-07-15
> + Version 0.12
> + 2014-08-13
> Keith Packard
> keithp at keithp.com
>
> @@ -12,6 +12,10 @@ Rendering geometric figures is accomplished by client-side tessellation into
> either triangles or trapezoids. Text is drawn by loading glyphs into the
> server and rendering sets of them.
>
> +1.1 Version 0.12
> +
> +Version 0.12 adds 32-bit floating point transforms.
> +
> 2. Acknowledgments
>
> This extension was the work of many people, in particular:
> @@ -252,6 +256,15 @@ ANIMCURSORELT [
> cursor: CURSOR
> delay: CARD32
> ]
> +6.1 Protocol Types added in Version 0.12
> +
> +FLOAT 32-bit IEEE 754 single precision float
> +TRANSFORMFLOAT [
> + p11, p12, p13: FLOAT
> + p21, p22, p23: FLOAT
> + p31, p32, p33: FLOAT
> + ]
> +
> 7. Standard PictFormats
>
> The server must support a Direct PictFormat with 8 bits each of red, green,
> @@ -1143,6 +1156,29 @@ CreateConicalGradient
> The colors are non premultiplied.
>
>
> +14.1 Extension requests added in Version 0.12
> +
> +SetPictureTransformFloat
> +
> + picture: PICTURE
> + transform: TRANSFORMFLOAT
> +
> + Errors:
> + Alloc, Value, Picture
> +
> + This request changes the projective transformation used to
> + map coordinates when 'picture' is used as the source or
> + mask in any compositing operation. The transform
> + maps from destination pixel geometry back to the source pixel
> + geometry.
> +
> + Setting a transform via this request replaces any transform
> + set by SetPictureTransform. Similarly, setting a transform via
> + SetPictureTransform replaces any transform set with this
> + request.
> +
> + The matrix must be invertable, else a Value error is generated.
> +
> 15. Extension Versioning
>
> The Render extension was developed in parallel with the implementation to
> @@ -1206,3 +1242,5 @@ what each version before 1.0 implemented:
> 0.11:
> Blend mode operators
>
> + 0.12:
> + Floating point transforms
More information about the xorg-devel
mailing list