What I do in OpenGL is draw a rectangle (well two triangles) textured with the image with PAD repeat. Outside the rectangle is 0,0,0,0. This produces the sharp edge I wanted and allows full acceleration to be used. Because OpenGL and DirectX assume that such sharp edges are how images will be drawn with translations, they obviously made this the accelerated path.

Even if you don't want to use geometry, you could also intersect the clip with a quad (using the current clip implementation) and then draw all images with PAD.

The problem is that you have to get rid of the current, and useless, definition of NONE. It must be changed to make a "sharp" edge. This will not change the output when the image scale is 1 or less, and I believe the change when the image scale is > 1 will produce the results desired by most users (ie they expect that drawing a 10x10 image will cover the same pixels as a 10x10 rectangle).

Soeren Sandmann wrote:
Bill Spitzak <spit...@gmail.com> writes:

This is in fact what users expect, and also what other graphics
libraries are doing (which explains why the hardware is supporting PAD
directly).

The reason Render's NONE is difficult to accelerate in hardware is
that for formats without alpha (such as x8r8g8b8), Render wants the
border to be (0, 0, 0, 0), whereas GL will give you (0xFF, 0, 0, 0).

I thought I heard at one point that Direct3D can do (0, 0, 0, 0), but
maybe not.


Soren

_______________________________________________
Pixman mailing list
Pixman@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pixman

Reply via email to