示例#1
0
        public float[] GetAreaTess(TessTool tess, Tesselate.Tesselator.WindingRuleType windingRuleType, TessTriangleTechnique tessTechnique)
        {
#if DEBUG
            if (this.TessTriangleTech == 0)
            {
            }
#endif

            if (TessTriangleTech != tessTechnique)
            {
                //re tess again
                this.TessTriangleTech = tessTechnique;
                //***
                using (Borrow(out ReusableCoordList resuableCoordList))
                {
                    List <float> coordXYs         = resuableCoordList._coordXYs;
                    List <int>   contourEndPoints = resuableCoordList._contourEndPoints;


                    for (int i = 0; i < _figures.Length; ++i)
                    {
                        Figure figure = _figures[i];
                        coordXYs.AddRange(figure.coordXYs);
                        contourEndPoints.Add(coordXYs.Count - 1);
                    }


                    if (this.TessTriangleTech == TessTriangleTechnique.DrawArray)
                    {
                        tess.WindingRuleType = windingRuleType;
                        return(_areaTess = tess.TessAsTriVertexArray(
                                   coordXYs.ToArray(),
                                   contourEndPoints.ToArray(),
                                   out _tessAreaVertexCount));
                    }
                    else
                    {
                        tess.WindingRuleType = windingRuleType;
                        _areaTessIndexList   = tess.TessAsTriIndexArray(
                            coordXYs.ToArray(),
                            contourEndPoints.ToArray(),
                            out _areaTess,
                            out _tessAreaVertexCount);
                        return(_areaTess);
                    }
                }
            }
            else
            {
                //if equal
                return(_areaTess);
            }
        }
示例#2
0
 internal void CreateAreaTessVBOSegment(VBOStream ownerVBOStream,
                                        TessTool tess,
                                        Tesselate.Tesselator.WindingRuleType windingRuleType)
 {
     //
     float[] tessArea = GetAreaTess(tess, windingRuleType);
     if (tessArea != null)
     {
         _tessAreaVboSeg = ownerVBOStream.CreateSegment(tessArea, TessAreaVertexCount, 2);
     }
     else
     {
         //??
     }
     //
 }
示例#3
0
        public float[] GetAreaTess(TessTool tess,
                                   Tesselate.Tesselator.WindingRuleType windingRuleType,
                                   TessTriangleTechnique tech)
        {
#if DEBUG
            if (this.TessTriangleTech == 0)
            {
            }
#endif

            if (TessTriangleTech != tech)
            {
                //re tess again
                this.TessTriangleTech = tech;
                //***
                if (this.TessTriangleTech == TessTriangleTechnique.DrawArray)
                {
                    tess.WindingRuleType = windingRuleType;
                    return(_areaTess ??
                           (_areaTess = tess.TessAsTriVertexArray(coordXYs, null, out _tessAreaVertexCount)));
                }
                else
                {
                    tess.WindingRuleType = windingRuleType;
                    _indexListArray      = tess.TessAsTriIndexArray(coordXYs,
                                                                    null,
                                                                    out _areaTess,
                                                                    out _tessAreaVertexCount);
                    return(_areaTess);
                }
            }
            else
            {
                //if equal
                return(_areaTess);
            }
        }
示例#4
0
 internal float[] GetAreaTess(TessTool tess, Tesselate.Tesselator.WindingRuleType windingRuleType)
 {
     return((_figure != null) ?
            _figure.GetAreaTess(tess, windingRuleType, TessTriangleTechnique.DrawArray) :
            _figures.GetAreaTess(tess, windingRuleType, TessTriangleTechnique.DrawArray));
 }