The fb version simply calls the new pixman_composite_triangles(). This
allows us to get rid of miCreateAlphaPicture().
---
 fb/fbpict.c     |    1 +
 fb/fbpict.h     |   10 ++++++
 fb/fbtrap.c     |   87 +++++++++++++++++++++++++++++++++++++++++++------------
 render/mipict.c |    2 +-
 render/mipict.h |   17 -----------
 render/mitrap.c |   49 -------------------------------
 render/mitri.c  |   59 -------------------------------------
 7 files changed, 80 insertions(+), 145 deletions(-)

diff --git a/fb/fbpict.c b/fb/fbpict.c
index 6e66db8..312f3df 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -367,6 +367,7 @@ fbPictureInit (ScreenPtr pScreen, PictFormatPtr formats, 
int nformats)
     ps->Trapezoids = fbTrapezoids;
     ps->AddTraps = fbAddTraps;
     ps->AddTriangles = fbAddTriangles;
+    ps->Triangles = fbTriangles;
 
     return TRUE;
 }
diff --git a/fb/fbpict.h b/fb/fbpict.h
index 03d2665..b880ebb 100644
--- a/fb/fbpict.h
+++ b/fb/fbpict.h
@@ -75,4 +75,14 @@ fbTrapezoids (CARD8      op,
              int           ntrap,
              xTrapezoid    *traps);
 
+extern _X_EXPORT void
+fbTriangles (CARD8         op,
+            PicturePtr     pSrc,
+            PicturePtr     pDst,
+            PictFormatPtr  maskFormat,
+            INT16          xSrc,
+            INT16          ySrc,
+            int            ntris,
+            xTriangle     *tris);
+
 #endif /* _FBPICT_H_ */
diff --git a/fb/fbtrap.c b/fb/fbtrap.c
index 578c327..5387e1a 100644
--- a/fb/fbtrap.c
+++ b/fb/fbtrap.c
@@ -157,16 +157,27 @@ fbAddTriangles (PicturePtr  pPicture,
     }
 }
 
+typedef void (* CompositeShapesFunc) (pixman_op_t op,
+                                     pixman_image_t *src,
+                                     pixman_image_t *dst,
+                                     pixman_format_code_t mask_format,
+                                     int x_src, int y_src,
+                                     int x_dst, int y_dst,
+                                     int n_shapes, void *shapes);
 
-void
-fbTrapezoids (CARD8        op,
-             PicturePtr    pSrc,
-             PicturePtr    pDst,
-             PictFormatPtr maskFormat,
-             INT16         xSrc,
-             INT16         ySrc,
-             int           ntrap,
-             xTrapezoid    *traps)
+static void
+fbShapes (CompositeShapesFunc  composite,
+         CARD8                 op,
+         PicturePtr            pSrc,
+         PicturePtr            pDst,
+         PictFormatPtr         maskFormat,
+         INT16                 xSrc,
+         INT16                 ySrc,
+         INT16                 xDst,
+         INT16                 yDst,
+         int                   nshapes,
+         void *                shapes)
+         
 {
     pixman_image_t *src, *dst;
     int src_xoff, src_yoff;
@@ -178,7 +189,6 @@ fbTrapezoids (CARD8     op,
     if (src && dst)
     {
        pixman_format_code_t format;
-       int x_dst, y_dst;
 
        if (!maskFormat)
        {
@@ -206,17 +216,56 @@ fbTrapezoids (CARD8           op,
            }
        }
 
-       x_dst = traps[0].left.p1.x >> 16;
-       y_dst = traps[0].left.p1.y >> 16;
-       
-       pixman_composite_trapezoids (op, src, dst, format,
-                                    xSrc + src_xoff,
-                                    ySrc + src_yoff,
-                                    x_dst + dst_xoff,
-                                    y_dst + dst_yoff,
-                                    ntrap, (pixman_trapezoid_t *)traps);
+       composite (op, src, dst, format,
+                  xSrc + src_xoff,
+                  ySrc + src_yoff,
+                  xDst + dst_xoff,
+                  yDst + dst_yoff,
+                  nshapes, shapes);
     }
 
     free_pixman_pict (pSrc, src);
     free_pixman_pict (pDst, dst);
 }
+
+void
+fbTrapezoids (CARD8        op,
+             PicturePtr    pSrc,
+             PicturePtr    pDst,
+             PictFormatPtr maskFormat,
+             INT16         xSrc,
+             INT16         ySrc,
+             int           ntrap,
+             xTrapezoid    *traps)
+{
+    int xDst, yDst;
+
+    xDst = traps[0].left.p1.x >> 16;
+    yDst = traps[0].left.p1.y >> 16;
+    
+    fbShapes ((CompositeShapesFunc)pixman_composite_trapezoids,
+             op, pSrc, pDst, maskFormat,
+             xSrc, ySrc, xDst, yDst,
+             ntrap, traps);
+}
+
+void
+fbTriangles (CARD8         op,
+            PicturePtr    pSrc,
+            PicturePtr    pDst,
+            PictFormatPtr maskFormat,
+            INT16          xSrc,
+            INT16          ySrc,
+            int            ntris,
+            xTriangle    *tris)
+{ 
+    int xDst, yDst;
+
+    xDst = tris[0].p1.x >> 16;
+    yDst = tris[0].p1.y >> 16;
+    
+    fbShapes ((CompositeShapesFunc)pixman_composite_triangles,
+             op, pSrc, pDst, maskFormat,
+             xSrc, ySrc, xDst, yDst,
+             ntris, tris);
+}
diff --git a/render/mipict.c b/render/mipict.c
index 46b45b5..3b73888 100644
--- a/render/mipict.c
+++ b/render/mipict.c
@@ -632,7 +632,7 @@ miPictureInit (ScreenPtr pScreen, PictFormatPtr formats, 
int nformats)
     ps->Glyphs         = miGlyphs;
     ps->CompositeRects = miCompositeRects;
     ps->Trapezoids     = 0;
-    ps->Triangles      = miTriangles;
+    ps->Triangles      = 0;
     ps->TriStrip       = miTriStrip;
     ps->TriFan         = miTriFan;
     
diff --git a/render/mipict.h b/render/mipict.h
index be7b20b..d149589 100644
--- a/render/mipict.h
+++ b/render/mipict.h
@@ -152,16 +152,6 @@ extern _X_EXPORT void
 miTriangleBounds (int ntri, xTriangle *tris, BoxPtr bounds);
 
 extern _X_EXPORT void
-miTriangles (CARD8         op,
-            PicturePtr     pSrc,
-            PicturePtr     pDst,
-            PictFormatPtr  maskFormat,
-            INT16          xSrc,
-            INT16          ySrc,
-            int            ntri,
-            xTriangle      *tris);
-
-extern _X_EXPORT void
 miTriStrip (CARD8          op,
            PicturePtr      pSrc,
            PicturePtr      pDst,
@@ -181,13 +171,6 @@ miTriFan (CARD8            op,
          int           npoint,
          xPointFixed   *points);
 
-extern _X_EXPORT PicturePtr
-miCreateAlphaPicture (ScreenPtr            pScreen, 
-                     PicturePtr    pDst,
-                     PictFormatPtr pPictFormat,
-                     CARD16        width,
-                     CARD16        height);
-
 extern _X_EXPORT Bool
 miInitIndexed (ScreenPtr       pScreen,
               PictFormatPtr    pFormat);
diff --git a/render/mitrap.c b/render/mitrap.c
index 1f09a1e..445f236 100644
--- a/render/mitrap.c
+++ b/render/mitrap.c
@@ -34,55 +34,6 @@
 #include "picturestr.h"
 #include "mipict.h"
 
-PicturePtr
-miCreateAlphaPicture (ScreenPtr            pScreen, 
-                     PicturePtr    pDst,
-                     PictFormatPtr pPictFormat,
-                     CARD16        width,
-                     CARD16        height)
-{
-    PixmapPtr      pPixmap;
-    PicturePtr     pPicture;
-    GCPtr          pGC;
-    int                    error;
-    xRectangle     rect;
-
-    if (width > 32767 || height > 32767)
-       return 0;
-
-    if (!pPictFormat)
-    {
-       if (pDst->polyEdge == PolyEdgeSharp)
-           pPictFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
-       else
-           pPictFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
-       if (!pPictFormat)
-           return 0;
-    }
-
-    pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, 
-                                       pPictFormat->depth, 0);
-    if (!pPixmap)
-       return 0;
-    pGC = GetScratchGC (pPixmap->drawable.depth, pScreen);
-    if (!pGC)
-    {
-       (*pScreen->DestroyPixmap) (pPixmap);
-       return 0;
-    }
-    ValidateGC (&pPixmap->drawable, pGC);
-    rect.x = 0;
-    rect.y = 0;
-    rect.width = width;
-    rect.height = height;
-    (*pGC->ops->PolyFillRect)(&pPixmap->drawable, pGC, 1, &rect);
-    FreeScratchGC (pGC);
-    pPicture = CreatePicture (0, &pPixmap->drawable, pPictFormat,
-                             0, 0, serverClient, &error);
-    (*pScreen->DestroyPixmap) (pPixmap);
-    return pPicture;
-}
-
 static xFixed
 miLineFixedX (xLineFixed *l, xFixed y, Bool ceil)
 {
diff --git a/render/mitri.c b/render/mitri.c
index a805a71..b258c21 100644
--- a/render/mitri.c
+++ b/render/mitri.c
@@ -68,65 +68,6 @@ miTriangleBounds (int ntri, xTriangle *tris, BoxPtr bounds)
 }
 
 void
-miTriangles (CARD8         op,
-            PicturePtr     pSrc,
-            PicturePtr     pDst,
-            PictFormatPtr  maskFormat,
-            INT16          xSrc,
-            INT16          ySrc,
-            int            ntri,
-            xTriangle      *tris)
-{
-    ScreenPtr          pScreen = pDst->pDrawable->pScreen;
-    PictureScreenPtr    ps = GetPictureScreen(pScreen);
-    
-    /*
-     * Check for solid alpha add
-     */
-    if (op == PictOpAdd && miIsSolidAlpha (pSrc))
-    {
-       (*ps->AddTriangles) (pDst, 0, 0, ntri, tris);
-    }
-    else if (maskFormat)
-    {
-       BoxRec          bounds;
-       PicturePtr      pPicture;
-       INT16           xDst, yDst;
-       INT16           xRel, yRel;
-       
-       xDst = tris[0].p1.x >> 16;
-       yDst = tris[0].p1.y >> 16;
-
-       miTriangleBounds (ntri, tris, &bounds);
-       if (bounds.x2 <= bounds.x1 || bounds.y2 <= bounds.y1)
-           return;
-       pPicture = miCreateAlphaPicture (pScreen, pDst, maskFormat,
-                                        bounds.x2 - bounds.x1,
-                                        bounds.y2 - bounds.y1);
-       if (!pPicture)
-           return;
-       (*ps->AddTriangles) (pPicture, -bounds.x1, -bounds.y1, ntri, tris);
-       
-       xRel = bounds.x1 + xSrc - xDst;
-       yRel = bounds.y1 + ySrc - yDst;
-       CompositePicture (op, pSrc, pPicture, pDst,
-                         xRel, yRel, 0, 0, bounds.x1, bounds.y1,
-                         bounds.x2 - bounds.x1, bounds.y2 - bounds.y1);
-       FreePicture (pPicture, 0);
-    }
-    else
-    {
-       if (pDst->polyEdge == PolyEdgeSharp)
-           maskFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
-       else
-           maskFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
-       
-       for (; ntri; ntri--, tris++)
-           miTriangles (op, pSrc, pDst, maskFormat, xSrc, ySrc, 1, tris);
-    }
-}
-
-void
 miTriStrip (CARD8          op,
            PicturePtr      pSrc,
            PicturePtr      pDst,
-- 
1.7.3.1

_______________________________________________
Pixman mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pixman

Reply via email to