xorg: work on delayed/dirty updates
This commit is contained in:
parent
ea98b503ca
commit
68ef2fadde
@ -311,6 +311,8 @@ int
|
||||
g_chmod_hex(const char* filename, int flags);
|
||||
void
|
||||
hexdump(unsigned char *p, unsigned int len);
|
||||
void
|
||||
RegionAroundSegs(RegionPtr reg, xSegment* segs, int nseg);
|
||||
|
||||
/* rdpdraw.c */
|
||||
Bool
|
||||
|
@ -346,6 +346,25 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
||||
|
||||
LLOGLN(10, ("rdpCopyArea:"));
|
||||
|
||||
if (pSrc->type == DRAWABLE_PIXMAP)
|
||||
{
|
||||
pSrcPixmap = (PixmapPtr)pSrc;
|
||||
pSrcPriv = GETPIXPRIV(pSrcPixmap);
|
||||
if (XRDP_IS_OS(pSrcPriv))
|
||||
{
|
||||
rdpup_check_dirty(pSrcPixmap, pSrcPriv);
|
||||
}
|
||||
}
|
||||
if (pDst->type == DRAWABLE_PIXMAP)
|
||||
{
|
||||
pDstPixmap = (PixmapPtr)pDst;
|
||||
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||
if (XRDP_IS_OS(pDstPriv))
|
||||
{
|
||||
rdpup_check_dirty(pDstPixmap, pDstPriv);
|
||||
}
|
||||
}
|
||||
|
||||
if (pSrc->type == DRAWABLE_WINDOW)
|
||||
{
|
||||
pSrcWnd = (WindowPtr)pSrc;
|
||||
@ -373,7 +392,6 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
||||
can_do_screen_blt = pGC->alu == GXcopy;
|
||||
if (can_do_screen_blt)
|
||||
{
|
||||
rdpup_check_dirty(pDstPixmap, pDstPriv);
|
||||
return rdpCopyAreaWndToPixmap(pSrcWnd, pDstPixmap, pDstPriv, pGC,
|
||||
srcx, srcy, w, h, dstx, dsty);
|
||||
}
|
||||
@ -387,7 +405,6 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
||||
pSrcPriv = GETPIXPRIV(pSrcPixmap);
|
||||
if (XRDP_IS_OS(pSrcPriv))
|
||||
{
|
||||
rdpup_check_dirty(pSrcPixmap, pSrcPriv);
|
||||
if (pDst->type == DRAWABLE_WINDOW)
|
||||
{
|
||||
pDstWnd = (WindowPtr)pDst;
|
||||
@ -403,7 +420,6 @@ rdpCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
|
||||
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||
if (XRDP_IS_OS(pDstPriv))
|
||||
{
|
||||
rdpup_check_dirty(pDstPixmap, pDstPriv);
|
||||
return rdpCopyAreaPixmapToPixmap(pSrcPixmap, pSrcPriv,
|
||||
pDstPixmap, pDstPriv,
|
||||
pGC, srcx, srcy, w, h,
|
||||
|
@ -86,11 +86,34 @@ rdpCopyPlane(DrawablePtr pSrc, DrawablePtr pDst,
|
||||
rdpPixmapRec* pDstPriv;
|
||||
rdpPixmapRec* pDirtyPriv;
|
||||
|
||||
PixmapPtr pSrcPixmap;
|
||||
rdpPixmapRec* pSrcPriv;
|
||||
|
||||
LLOGLN(10, ("rdpCopyPlane:"));
|
||||
|
||||
if (pSrc->type == DRAWABLE_PIXMAP)
|
||||
{
|
||||
pSrcPixmap = (PixmapPtr)pSrc;
|
||||
pSrcPriv = GETPIXPRIV(pSrcPixmap);
|
||||
if (XRDP_IS_OS(pSrcPriv))
|
||||
{
|
||||
rdpup_check_dirty(pSrcPixmap, pSrcPriv);
|
||||
}
|
||||
}
|
||||
if (pDst->type == DRAWABLE_PIXMAP)
|
||||
{
|
||||
pDstPixmap = (PixmapPtr)pDst;
|
||||
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||
if (XRDP_IS_OS(pDstPriv))
|
||||
{
|
||||
rdpup_check_dirty(pDstPixmap, pDstPriv);
|
||||
}
|
||||
}
|
||||
|
||||
/* do original call */
|
||||
rv = rdpCopyPlaneOrg(pSrc, pDst, pGC, srcx, srcy, w, h,
|
||||
dstx, dsty, bitPlane);
|
||||
|
||||
dirty_type = 0;
|
||||
pDirtyPriv = 0;
|
||||
post_process = 0;
|
||||
@ -108,7 +131,7 @@ rdpCopyPlane(DrawablePtr pSrc, DrawablePtr pDst,
|
||||
LLOGLN(10, ("rdpCopyPlane: gettig dirty"));
|
||||
pDstPriv->is_dirty = 1;
|
||||
pDirtyPriv = pDstPriv;
|
||||
dirty_type = RDI_IMGLY;
|
||||
dirty_type = RDI_IMGLL;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -87,6 +87,41 @@ rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
||||
|
||||
LLOGLN(10, ("rdpFillPolygon:"));
|
||||
|
||||
box.x1 = 0;
|
||||
box.y1 = 0;
|
||||
box.x2 = 0;
|
||||
box.y2 = 0;
|
||||
if (count > 0)
|
||||
{
|
||||
maxx = pPts[0].x;
|
||||
maxy = pPts[0].y;
|
||||
minx = maxx;
|
||||
miny = maxy;
|
||||
for (i = 1; i < count; i++)
|
||||
{
|
||||
if (pPts[i].x > maxx)
|
||||
{
|
||||
maxx = pPts[i].x;
|
||||
}
|
||||
if (pPts[i].x < minx)
|
||||
{
|
||||
minx = pPts[i].x;
|
||||
}
|
||||
if (pPts[i].y > maxy)
|
||||
{
|
||||
maxy = pPts[i].y;
|
||||
}
|
||||
if (pPts[i].y < miny)
|
||||
{
|
||||
miny = pPts[i].y;
|
||||
}
|
||||
}
|
||||
box.x1 = pDrawable->x + minx;
|
||||
box.y1 = pDrawable->y + miny;
|
||||
box.x2 = pDrawable->x + maxx + 1;
|
||||
box.y2 = pDrawable->y + maxy + 1;
|
||||
}
|
||||
|
||||
/* do original call */
|
||||
rdpFillPolygonOrg(pDrawable, pGC, shape, mode, count, pPts);
|
||||
|
||||
@ -107,7 +142,7 @@ rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
||||
LLOGLN(10, ("rdpFillPolygon: gettig dirty"));
|
||||
pDstPriv->is_dirty = 1;
|
||||
pDirtyPriv = pDstPriv;
|
||||
dirty_type = RDI_IMGLY;
|
||||
dirty_type = RDI_IMGLL;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -138,43 +173,6 @@ rdpFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
|
||||
|
||||
RegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
||||
if (cd != 0)
|
||||
{
|
||||
box.x1 = 0;
|
||||
box.y1 = 0;
|
||||
box.x2 = 0;
|
||||
box.y2 = 0;
|
||||
if (count > 0)
|
||||
{
|
||||
maxx = pPts[0].x;
|
||||
maxy = pPts[0].y;
|
||||
minx = maxx;
|
||||
miny = maxy;
|
||||
for (i = 1; i < count; i++)
|
||||
{
|
||||
if (pPts[i].x > maxx)
|
||||
{
|
||||
maxx = pPts[i].x;
|
||||
}
|
||||
if (pPts[i].x < minx)
|
||||
{
|
||||
minx = pPts[i].x;
|
||||
}
|
||||
if (pPts[i].y > maxy)
|
||||
{
|
||||
maxy = pPts[i].y;
|
||||
}
|
||||
if (pPts[i].y < miny)
|
||||
{
|
||||
miny = pPts[i].y;
|
||||
}
|
||||
box.x1 = pDrawable->x + minx;
|
||||
box.y1 = pDrawable->y + miny;
|
||||
box.x2 = pDrawable->x + maxx + 1;
|
||||
box.y2 = pDrawable->y + maxy + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cd == 1)
|
||||
{
|
||||
if (dirty_type != 0)
|
||||
|
@ -68,7 +68,7 @@ rdpFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit,
|
||||
PixmapPtr pDstPixmap;
|
||||
rdpPixmapRec* pDstPriv;
|
||||
|
||||
LLOGLN(0, ("rdpFillSpans: todo"));
|
||||
LLOGLN(10, ("rdpFillSpans: todo"));
|
||||
|
||||
/* do original call */
|
||||
rdpFillSpansOrg(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted);
|
||||
|
@ -62,6 +62,8 @@ rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
int npt, DDXPointPtr in_pts)
|
||||
{
|
||||
RegionRec clip_reg;
|
||||
RegionRec reg1;
|
||||
RegionRec reg2;
|
||||
int num_clips;
|
||||
int cd;
|
||||
int x;
|
||||
@ -83,6 +85,7 @@ rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
rdpPixmapRec* pDirtyPriv;
|
||||
|
||||
LLOGLN(10, ("rdpPolyPoint:"));
|
||||
LLOGLN(10, ("rdpPolyPoint: npt %d", npt));
|
||||
|
||||
if (npt > 32)
|
||||
{
|
||||
@ -145,7 +148,7 @@ rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
LLOGLN(10, ("rdpPolyPoint: gettig dirty"));
|
||||
pDstPriv->is_dirty = 1;
|
||||
pDirtyPriv = pDstPriv;
|
||||
dirty_type = RDI_IMGLY;
|
||||
dirty_type = RDI_IMGLL;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -182,7 +185,20 @@ rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
{
|
||||
if (dirty_type != 0)
|
||||
{
|
||||
/* TODO */
|
||||
RegionInit(®1, NullBox, 0);
|
||||
for (i = 0; i < npt; i++)
|
||||
{
|
||||
box.x1 = pts[i].x;
|
||||
box.y1 = pts[i].y;
|
||||
box.x2 = box.x1 + 1;
|
||||
box.y2 = box.y1 + 1;
|
||||
RegionInit(®2, &box, 0);
|
||||
RegionUnion(®1, ®1, ®2);
|
||||
RegionUninit(®2);
|
||||
}
|
||||
draw_item_add_fill_region(pDirtyPriv, ®1, pGC->fgPixel,
|
||||
pGC->alu);
|
||||
RegionUninit(®1);
|
||||
}
|
||||
else if (got_id)
|
||||
{
|
||||
@ -205,7 +221,21 @@ rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
{
|
||||
if (dirty_type != 0)
|
||||
{
|
||||
/* TODO */
|
||||
RegionInit(®1, NullBox, 0);
|
||||
for (i = 0; i < npt; i++)
|
||||
{
|
||||
box.x1 = pts[i].x;
|
||||
box.y1 = pts[i].y;
|
||||
box.x2 = box.x1 + 1;
|
||||
box.y2 = box.y1 + 1;
|
||||
RegionInit(®2, &box, 0);
|
||||
RegionUnion(®1, ®1, ®2);
|
||||
RegionUninit(®2);
|
||||
}
|
||||
RegionIntersect(®1, ®1, &clip_reg);
|
||||
draw_item_add_fill_region(pDirtyPriv, ®1, pGC->fgPixel,
|
||||
pGC->alu);
|
||||
RegionUninit(®1);
|
||||
}
|
||||
else if (got_id)
|
||||
{
|
||||
|
@ -55,10 +55,6 @@ rdpPolySegmentOrg(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment* pSegs)
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/* in rdpPolylines.c */
|
||||
void
|
||||
RegionAroundSegs(RegionPtr reg, xSegment* segs, int nsegs);
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment* pSegs)
|
||||
@ -79,7 +75,8 @@ rdpPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment* pSegs)
|
||||
rdpPixmapRec* pDstPriv;
|
||||
rdpPixmapRec* pDirtyPriv;
|
||||
|
||||
LLOGLN(10, ("rdpPolySegment: %d", nseg));
|
||||
LLOGLN(10, ("rdpPolySegment:"));
|
||||
LLOGLN(10, (" nseg %d", nseg));
|
||||
|
||||
segs = 0;
|
||||
if (nseg) /* get the rects */
|
||||
@ -114,7 +111,7 @@ rdpPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment* pSegs)
|
||||
LLOGLN(10, ("rdpPolySegment: gettig dirty"));
|
||||
pDstPriv->is_dirty = 1;
|
||||
pDirtyPriv = pDstPriv;
|
||||
dirty_type = RDI_IMGLY;
|
||||
dirty_type = RDI_IMGLL;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -56,46 +56,6 @@ rdpPolylinesOrg(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
RegionAroundSegs(RegionPtr reg, xSegment* segs, int nseg)
|
||||
{
|
||||
int index;
|
||||
BoxRec box;
|
||||
RegionRec treg;
|
||||
|
||||
index = 0;
|
||||
while (index < nseg)
|
||||
{
|
||||
if (segs[index].x1 < segs[index].x2)
|
||||
{
|
||||
box.x1 = segs[index].x1;
|
||||
box.x2 = segs[index].x2;
|
||||
}
|
||||
else
|
||||
{
|
||||
box.x1 = segs[index].x2;
|
||||
box.x2 = segs[index].x1;
|
||||
}
|
||||
box.x2++;
|
||||
if (segs[index].y1 < segs[index].y2)
|
||||
{
|
||||
box.y1 = segs[index].y1;
|
||||
box.y2 = segs[index].y2;
|
||||
}
|
||||
else
|
||||
{
|
||||
box.y1 = segs[index].y2;
|
||||
box.y2 = segs[index].y1;
|
||||
}
|
||||
box.y2++;
|
||||
RegionInit(&treg, &box, 0);
|
||||
RegionUnion(reg, reg, &treg);
|
||||
RegionUninit(&treg);
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
@ -119,46 +79,61 @@ rdpPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
rdpPixmapRec* pDstPriv;
|
||||
rdpPixmapRec* pDirtyPriv;
|
||||
|
||||
LLOGLN(0, ("rdpPolylines:"));
|
||||
|
||||
LLOGLN(10, ("rdpPolylines:"));
|
||||
LLOGLN(10, (" npt %d mode %d x %d y %d", npt, mode,
|
||||
pDrawable->x, pDrawable->y));
|
||||
#if 0
|
||||
LLOGLN(0, (" points"));
|
||||
for (i = 0; i < npt; i++)
|
||||
{
|
||||
LLOGLN(0, (" %d %d", pptInit[i].x, pptInit[i].y));
|
||||
}
|
||||
#endif
|
||||
/* convert lines to line segments */
|
||||
nseg = npt - 1;
|
||||
segs = 0;
|
||||
if (npt > 1)
|
||||
{
|
||||
segs = (xSegment*)g_malloc(sizeof(xSegment) * npt - 1, 0);
|
||||
segs = (xSegment*)g_malloc(sizeof(xSegment) * nseg, 0);
|
||||
segs[0].x1 = pptInit[0].x + pDrawable->x;
|
||||
segs[0].y1 = pptInit[0].y + pDrawable->y;
|
||||
if (mode == CoordModeOrigin)
|
||||
{
|
||||
segs[0].x2 = pptInit[1].x + pDrawable->x;
|
||||
segs[0].y2 = pptInit[1].y + pDrawable->y;
|
||||
for (i = 2; i < npt; i++)
|
||||
{
|
||||
segs[i - 1].x1 = segs[i - 2].x2;
|
||||
segs[i - 1].y1 = segs[i - 2].y2;
|
||||
segs[i - 1].x2 = pptInit[i].x + pDrawable->x;
|
||||
segs[i - 1].y2 = pptInit[i].y + pDrawable->y;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
segs[0].x2 = segs[0].x1 + pptInit[1].x;
|
||||
segs[0].y2 = segs[0].y1 + pptInit[1].y;
|
||||
}
|
||||
for (i = 2; i < npt; i++)
|
||||
{
|
||||
segs[i - 1].x1 = segs[i - 2].x2;
|
||||
segs[i - 1].y1 = segs[i - 2].y2;
|
||||
if (mode == CoordModeOrigin)
|
||||
for (i = 2; i < npt; i++)
|
||||
{
|
||||
segs[i - 1].x2 = pptInit[i].x + pDrawable->x;
|
||||
segs[i - 1].y2 = pptInit[i].x + pDrawable->x;
|
||||
}
|
||||
else
|
||||
{
|
||||
segs[i - 1].x2 = segs[i - 2].x2 + pptInit[i].x;
|
||||
segs[i - 1].y2 = segs[i - 2].y2 + pptInit[i].y;
|
||||
segs[i - 1].x1 = segs[i - 2].x2;
|
||||
segs[i - 1].y1 = segs[i - 2].y2;
|
||||
segs[i - 1].x2 = segs[i - 1].x1 + pptInit[i].x;
|
||||
segs[i - 1].y2 = segs[i - 1].y1 + pptInit[i].y;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LLOGLN(10, ("rdpPolylines: weird npt [%d]", npt));
|
||||
LLOGLN(0, ("rdpPolylines: weird npt [%d]", npt));
|
||||
}
|
||||
#if 0
|
||||
LLOGLN(0, (" segments"));
|
||||
for (i = 0; i < nseg; i++)
|
||||
{
|
||||
LLOGLN(0, (" %d %d %d %d", segs[i].x1, segs[i].y1,
|
||||
segs[i].x2, segs[i].y2));
|
||||
}
|
||||
#endif
|
||||
|
||||
/* do original call */
|
||||
rdpPolylinesOrg(pDrawable, pGC, mode, npt, pptInit);
|
||||
@ -180,7 +155,7 @@ rdpPolylines(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
LLOGLN(10, ("rdpPolylines: gettig dirty"));
|
||||
pDstPriv->is_dirty = 1;
|
||||
pDirtyPriv = pDstPriv;
|
||||
dirty_type = RDI_LINE;
|
||||
dirty_type = RDI_IMGLL;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -78,13 +78,11 @@ rdpPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
|
||||
rdpPixmapRec* pDstPriv;
|
||||
rdpPixmapRec* pDirtyPriv;
|
||||
|
||||
LLOGLN(0, ("rdpPushPixels:"));
|
||||
LLOGLN(10, ("rdpPushPixels:"));
|
||||
|
||||
/* do original call */
|
||||
rdpPushPixelsOrg(pGC, pBitMap, pDst, w, h, x, y);
|
||||
|
||||
//return;
|
||||
|
||||
dirty_type = 0;
|
||||
pDirtyPriv = 0;
|
||||
post_process = 0;
|
||||
|
@ -73,7 +73,7 @@ rdpSetSpans(DrawablePtr pDrawable, GCPtr pGC, char* psrc,
|
||||
rdpPixmapRec* pDstPriv;
|
||||
rdpPixmapRec* pDirtyPriv;
|
||||
|
||||
LLOGLN(0, ("rdpSetSpans: todo"));
|
||||
LLOGLN(10, ("rdpSetSpans: todo"));
|
||||
|
||||
/* do original call */
|
||||
rdpSetSpansOrg(pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted);
|
||||
|
@ -424,7 +424,7 @@ draw_item_remove(rdpPixmapRec* priv, struct rdp_draw_item* di)
|
||||
{
|
||||
if (di->u.line.segs != 0)
|
||||
{
|
||||
free(di->u.line.segs);
|
||||
g_free(di->u.line.segs);
|
||||
}
|
||||
}
|
||||
RegionDestroy(di->reg);
|
||||
@ -736,7 +736,7 @@ rdpRealizeWindow(WindowPtr pWindow)
|
||||
rdpWindowRec* priv;
|
||||
Bool rv;
|
||||
|
||||
LLOGLN(0, ("rdpRealizeWindow:"));
|
||||
LLOGLN(10, ("rdpRealizeWindow:"));
|
||||
priv = GETWINPRIV(pWindow);
|
||||
pScreen = pWindow->drawable.pScreen;
|
||||
pScreen->RealizeWindow = g_rdpScreen.RealizeWindow;
|
||||
@ -771,7 +771,7 @@ rdpUnrealizeWindow(WindowPtr pWindow)
|
||||
rdpWindowRec* priv;
|
||||
Bool rv;
|
||||
|
||||
LLOGLN(0, ("rdpUnrealizeWindow:"));
|
||||
LLOGLN(10, ("rdpUnrealizeWindow:"));
|
||||
priv = GETWINPRIV(pWindow);
|
||||
pScreen = pWindow->drawable.pScreen;
|
||||
pScreen->UnrealizeWindow = g_rdpScreen.UnrealizeWindow;
|
||||
|
@ -530,3 +530,43 @@ void
|
||||
FontCacheExtensionInit(INITARGS)
|
||||
{
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
RegionAroundSegs(RegionPtr reg, xSegment* segs, int nseg)
|
||||
{
|
||||
int index;
|
||||
BoxRec box;
|
||||
RegionRec treg;
|
||||
|
||||
index = 0;
|
||||
while (index < nseg)
|
||||
{
|
||||
if (segs[index].x1 < segs[index].x2)
|
||||
{
|
||||
box.x1 = segs[index].x1;
|
||||
box.x2 = segs[index].x2;
|
||||
}
|
||||
else
|
||||
{
|
||||
box.x1 = segs[index].x2;
|
||||
box.x2 = segs[index].x1;
|
||||
}
|
||||
box.x2++;
|
||||
if (segs[index].y1 < segs[index].y2)
|
||||
{
|
||||
box.y1 = segs[index].y1;
|
||||
box.y2 = segs[index].y2;
|
||||
}
|
||||
else
|
||||
{
|
||||
box.y1 = segs[index].y2;
|
||||
box.y2 = segs[index].y1;
|
||||
}
|
||||
box.y2++;
|
||||
RegionInit(&treg, &box, 0);
|
||||
RegionUnion(reg, reg, &treg);
|
||||
RegionUninit(&treg);
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user