render: Simplify miCompositeRects
Make a solid-fill picture for this instead of a 1x1 pixmap. In principle the backend can accelerate this directly, and we also get to preserve all the bits of the fill color. Signed-off-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
		
							parent
							
								
									9339fa87d0
								
							
						
					
					
						commit
						701f3a206d
					
				|  | @ -91,8 +91,6 @@ miCompositeRects(CARD8 op, | ||||||
|                  PicturePtr pDst, |                  PicturePtr pDst, | ||||||
|                  xRenderColor * color, int nRect, xRectangle *rects) |                  xRenderColor * color, int nRect, xRectangle *rects) | ||||||
| { | { | ||||||
|     ScreenPtr pScreen = pDst->pDrawable->pScreen; |  | ||||||
| 
 |  | ||||||
|     if (color->alpha == 0xffff) { |     if (color->alpha == 0xffff) { | ||||||
|         if (op == PictOpOver) |         if (op == PictOpOver) | ||||||
|             op = PictOpSrc; |             op = PictOpSrc; | ||||||
|  | @ -108,61 +106,18 @@ miCompositeRects(CARD8 op, | ||||||
|                          pDst->alphaOrigin.x, pDst->alphaOrigin.y); |                          pDst->alphaOrigin.x, pDst->alphaOrigin.y); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|         PictFormatPtr rgbaFormat; |  | ||||||
|         PixmapPtr pPixmap; |  | ||||||
|         PicturePtr pSrc; |  | ||||||
|         xRectangle one; |  | ||||||
|         int error; |         int error; | ||||||
|         Pixel pixel; |         PicturePtr pSrc = CreateSolidPicture(0, color, &error); | ||||||
|         GCPtr pGC; |  | ||||||
|         ChangeGCVal gcvals[2]; |  | ||||||
|         XID tmpval[1]; |  | ||||||
| 
 | 
 | ||||||
|         rgbaFormat = PictureMatchFormat(pScreen, 32, PICT_a8r8g8b8); |         if (pSrc) { | ||||||
|         if (!rgbaFormat) |             while (nRect--) { | ||||||
|             goto bail1; |                 CompositePicture(op, pSrc, 0, pDst, 0, 0, 0, 0, | ||||||
|  |                                  rects->x, rects->y, | ||||||
|  |                                  rects->width, rects->height); | ||||||
|  |                 rects++; | ||||||
|  |             } | ||||||
| 
 | 
 | ||||||
|         pPixmap = (*pScreen->CreatePixmap) (pScreen, 1, 1, rgbaFormat->depth, |             FreePicture((void *) pSrc, 0); | ||||||
|                                             CREATE_PIXMAP_USAGE_SCRATCH); |  | ||||||
|         if (!pPixmap) |  | ||||||
|             goto bail2; |  | ||||||
| 
 |  | ||||||
|         miRenderColorToPixel(rgbaFormat, color, &pixel); |  | ||||||
| 
 |  | ||||||
|         pGC = GetScratchGC(rgbaFormat->depth, pScreen); |  | ||||||
|         if (!pGC) |  | ||||||
|             goto bail3; |  | ||||||
|         gcvals[0].val = GXcopy; |  | ||||||
|         gcvals[1].val = pixel; |  | ||||||
| 
 |  | ||||||
|         ChangeGC(NullClient, pGC, GCFunction | GCForeground, gcvals); |  | ||||||
|         ValidateGC(&pPixmap->drawable, pGC); |  | ||||||
|         one.x = 0; |  | ||||||
|         one.y = 0; |  | ||||||
|         one.width = 1; |  | ||||||
|         one.height = 1; |  | ||||||
|         (*pGC->ops->PolyFillRect) (&pPixmap->drawable, pGC, 1, &one); |  | ||||||
| 
 |  | ||||||
|         tmpval[0] = xTrue; |  | ||||||
|         pSrc = CreatePicture(0, &pPixmap->drawable, rgbaFormat, |  | ||||||
|                              CPRepeat, tmpval, serverClient, &error); |  | ||||||
| 
 |  | ||||||
|         if (!pSrc) |  | ||||||
|             goto bail4; |  | ||||||
| 
 |  | ||||||
|         while (nRect--) { |  | ||||||
|             CompositePicture(op, pSrc, 0, pDst, 0, 0, 0, 0, |  | ||||||
|                              rects->x, rects->y, rects->width, rects->height); |  | ||||||
|             rects++; |  | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         FreePicture((void *) pSrc, 0); |  | ||||||
|  bail4: |  | ||||||
|         FreeScratchGC(pGC); |  | ||||||
|  bail3: |  | ||||||
|         (*pScreen->DestroyPixmap) (pPixmap); |  | ||||||
|  bail2: |  | ||||||
|  bail1: |  | ||||||
|         ; |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue