예제 #1
0
        public override void ModifyMesh(UnityEngine.UI.VertexHelper helper)
        {
            var verts = ListPool <UIVertex> .Get();

            if (m_image == null)
            {
                return;
            }
            helper.GetUIVertexStream(verts);
            int count = verts.Count;

            helper.Clear();
            var   overrideSprite = m_image.overrideSprite;
            var   spriteSize     = overrideSprite.rect.size;
            float tileWidth      = spriteSize.x / m_image.pixelsPerUnit;
            float tileHeight     = spriteSize.y / m_image.pixelsPerUnit;
            var   leftTopUV      = Vector2.Min(verts[1].uv0, verts[4].uv0);
            var   rightBottomUV  = Vector2.Max(verts[1].uv0, verts[4].uv0);

            border = new Vector4(leftTopUV.x, leftTopUV.y, rightBottomUV.x, rightBottomUV.y);
            // for (int i = 0; i < shapeCount; ++i)
            {
                var rectBorder = verts[1].position - verts[4].position;
                rectBorder = new Vector3(Mathf.Abs(rectBorder.x), Mathf.Abs(rectBorder.y), Mathf.Abs(rectBorder.z));
                bool bTileVertical   = IsTileVertical;
                bool bTileHorizontal = IsTileHorizontal;
                for (int j = 0; j < 6; ++j)
                {
                    var index = j;
                    var vert  = verts[index];
                    var uv0   = vert.uv0;
                    //uv0.x = (uv0.x - leftTopUV.x) * rectBorder.x / tileWidth;
                    var uv1 = Vector2.one;
                    if (bTileVertical && tileHeight != 0)
                    {
                        uv1.y = ((tileHeight == 0 || tileHeight >= rectBorder.y) ? 1f : rectBorder.y / tileHeight);
                    }
                    if (bTileHorizontal && tileWidth != 0)
                    {
                        uv1.x = ((tileWidth == 0 || tileWidth >= rectBorder.x) ? 1f : rectBorder.x / tileWidth);
                    }
                    vert.uv0     = uv0;
                    vert.uv1     = uv1;
                    verts[index] = vert;
                }
            }
            m_image.material.SetVector("_Border", border);
            helper.Clear();
            helper.AddUIVertexTriangleStream(verts);
            verts.ReleaseToPool();
        }
예제 #2
0
파일: Text.cs 프로젝트: radtek/HinxCor
        protected override void OnPopulateMesh(UnityEngine.UI.VertexHelper toFill)
        {
            if (font == null)
            {
                return;
            }

            // We don't care if we the font Texture changes while we are doing our Update.
            // The end result of cachedTextGenerator will be valid for this instance.
            // Otherwise we can get issues like Case 619238.
            m_DisableFontTextureRebuiltCallback = true;

            Vector2 extents = rectTransform.rect.size;

            var settings = GetGenerationSettings(extents);

            cachedTextGenerator.PopulateWithErrors(text, settings, gameObject);

            // Apply the offset to the vertices
            IList <UIVertex> verts         = cachedTextGenerator.verts;
            float            unitsPerPixel = 1 / pixelsPerUnit;
            //Last 4 verts are always a new line... (\n)
            int vertCount = verts.Count - 4;

            Vector2 roundingOffset = new Vector2(verts[0].position.x, verts[0].position.y) * unitsPerPixel;

            roundingOffset = PixelAdjustPoint(roundingOffset) - roundingOffset;
            toFill.Clear();
            if (roundingOffset != Vector2.zero)
            {
                for (int i = 0; i < vertCount; ++i)
                {
                    int tempVertsIndex = i & 3;
                    m_TempVerts[tempVertsIndex]             = verts[i];
                    m_TempVerts[tempVertsIndex].position   *= unitsPerPixel;
                    m_TempVerts[tempVertsIndex].position.x += roundingOffset.x;
                    m_TempVerts[tempVertsIndex].position.y += roundingOffset.y;
                    if (tempVertsIndex == 3)
                    {
                        toFill.AddUIVertexQuad(m_TempVerts);
                    }
                }
            }
            else
            {
                for (int i = 0; i < vertCount; ++i)
                {
                    int tempVertsIndex = i & 3;
                    m_TempVerts[tempVertsIndex]           = verts[i];
                    m_TempVerts[tempVertsIndex].position *= unitsPerPixel;
                    if (tempVertsIndex == 3)
                    {
                        toFill.AddUIVertexQuad(m_TempVerts);
                    }
                }
            }

            m_DisableFontTextureRebuiltCallback = false;
        }
예제 #3
0
        /// <inheritdoc />
        protected override void OnPopulateMesh(UnityEngine.UI.VertexHelper helper)
        {
            helper.Clear();

            foreach (var item in items)
            {
                item.AddTo(helper);
            }
        }
        static StackObject *Clear_1(ILIntepreter __intp, StackObject *__esp, IList <object> __mStack, CLRMethod __method, bool isNewObj)
        {
            ILRuntime.Runtime.Enviorment.AppDomain __domain = __intp.AppDomain;
            StackObject *ptr_of_this_method;
            StackObject *__ret = ILIntepreter.Minus(__esp, 1);

            ptr_of_this_method = ILIntepreter.Minus(__esp, 1);
            UnityEngine.UI.VertexHelper instance_of_this_method = (UnityEngine.UI.VertexHelper) typeof(UnityEngine.UI.VertexHelper).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);

            instance_of_this_method.Clear();

            return(__ret);
        }
        static int _m_Clear(RealStatePtr L)
        {
            ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);


            UnityEngine.UI.VertexHelper __cl_gen_to_be_invoked = (UnityEngine.UI.VertexHelper)translator.FastGetCSObj(L, 1);


            try {
                {
                    __cl_gen_to_be_invoked.Clear(  );



                    return(0);
                }
            } catch (System.Exception __gen_e) {
                return(LuaAPI.luaL_error(L, "c# exception:" + __gen_e));
            }
        }
예제 #6
0
 protected override void OnPopulateMesh(UnityEngine.UI.VertexHelper vh)
 {
     if (buffer.modified)
     {
         buffer.modified = false;
         vh.Clear();
         int             count    = rectangleCount * 4;
         List <UIVertex> vertices = new List <UIVertex>();
         for (int i = 0; i < count; i += 4)
         {
             vertices.Add(buffer.vertices[i + 0]);
             vertices.Add(buffer.vertices[i + 1]);
             vertices.Add(buffer.vertices[i + 2]);
             vertices.Add(buffer.vertices[i + 2]);
             vertices.Add(buffer.vertices[i + 3]);
             vertices.Add(buffer.vertices[i + 0]);
         }
         vh.AddUIVertexTriangleStream(vertices);
     }
 }
예제 #7
0
파일: Text.cs 프로젝트: wcsjb/XiaoGame_New
        protected override void OnPopulateMesh(UnityEngine.UI.VertexHelper vh)
        {
            base.OnPopulateMesh(vh);
            var verts = ListPool <UnityEngine.UIVertex> .Get();

            vh.GetUIVertexStream(verts);
            var spriteTagCount = spriteTagList.Count;

            for (int i = 0; i < spriteTagCount; ++i)
            {
                var spriteTag = spriteTagList[i];
                spriteTag.active = true;
                var vertStart = spriteTag.index * 6;
                if (vertStart >= verts.Count)
                {
                    spriteTag.active = false;
                    continue;
                }
                var posLT = verts[vertStart].position;
                var posRB = verts[vertStart + 2].position;
                spriteTag.position = (posLT + posRB) * 0.5f;
                for (int j = 0; j < 6; ++j)
                {
                    int index = spriteTag.index * 6 + j;
                    var vert  = verts[index];
                    vert.uv0     = Vector2.zero;
                    vert.color   = new Color(0, 0, 0, 0);
                    verts[index] = vert;
                }
                spriteTagList[i] = spriteTag;
            }

            spriteTagChanged = true;

            vh.Clear();
            vh.AddUIVertexTriangleStream(verts);
            verts.ReleaseToPool();
        }
        protected override void OnPopulateMesh(UnityEngine.UI.VertexHelper toFill)
        {
            if (null == points_)
            {
                resetPoints();
            }

            if (points_.Length < 3)
            {
                return;
            }
            int           numPoints = points_.Length;
            RectTransform rectTrans = GetComponent <RectTransform>();
            UIVertex      vertex    = new UIVertex();

            Vector2 localOffset;

            localOffset.x = rectTrans.pivot.x * rectTrans.rect.width;
            localOffset.y = rectTrans.pivot.y * rectTrans.rect.height;

            Vector2 isize;
            Vector2 local;

            toFill.Clear();

            if (null == sprite)
            {
                isize.x = (1.0e-4f < rectTrans.rect.width) ? 1.0f / rectTrans.rect.width : 1.0f;
                isize.y = (1.0e-4f < rectTrans.rect.height) ? 1.0f / rectTrans.rect.height : 1.0f;

                for (int i = 0; i < numPoints; ++i)
                {
                    vertex.position = points_[i];
                    vertex.color    = this.color;

                    local = points_[i] + localOffset;

                    vertex.uv0.x = (local.x) * isize.x;
                    vertex.uv0.y = (local.y) * isize.y;

                    toFill.AddVert(vertex);
                }

                for (int i = 2; i < numPoints; ++i)
                {
                    toFill.AddTriangle(0, i - 1, i);
                }
                return;
            }

            //Debug.Log("OnPopulateMesh:" + gameObject.name + " " + sprite.packed);

            isize.x = (1 < sprite.texture.width) ? 1.0f / sprite.texture.width : 1.0f;
            isize.y = (1 < sprite.texture.height) ? 1.0f / sprite.texture.height : 1.0f;

            Vector2 localToSprite;

            localToSprite.x = sprite.rect.width / rectTrans.rect.width;
            localToSprite.y = sprite.rect.height / rectTrans.rect.height;

            //Debug.Log("sprite.packed " + sprite.packed);
            //Debug.Log("sprite.textureRectOffset " + sprite.textureRectOffset);
            //Debug.Log("sprite.textureRect " + sprite.textureRect);
            //Debug.Log("sprite.rect " + sprite.rect);
            //Debug.Log("sprite.pivot " + sprite.pivot);

            //Debug.Log("RectTransform.rect " + rectTrans.rect);
            //Debug.Log("RectTransform.pivot " + rectTrans.pivot);

            if (sprite.packed)
            {
                localOffset.x += sprite.textureRect.xMin;
                localOffset.y += sprite.textureRect.yMin;
                for (int i = 0; i < numPoints; ++i)
                {
                    vertex.position = points_[i];
                    vertex.color    = this.color;

                    local    = points_[i] + localOffset;
                    local.x *= localToSprite.x;
                    local.y *= localToSprite.y;

                    vertex.uv0.x = (local.x) * isize.x;
                    vertex.uv0.y = (local.y) * isize.y;

                    toFill.AddVert(vertex);
                }
            }
            else
            {
                for (int i = 0; i < numPoints; ++i)
                {
                    vertex.position = points_[i];
                    vertex.color    = this.color;

                    local    = points_[i] + localOffset;
                    local.x *= localToSprite.x;
                    local.y *= localToSprite.y;

                    vertex.uv0.x = (local.x) * isize.x;
                    vertex.uv0.y = (local.y) * isize.y;

                    toFill.AddVert(vertex);
                }
            }

            for (int i = 2; i < numPoints; ++i)
            {
                toFill.AddTriangle(0, i - 1, i);
            }
        }
예제 #9
0
        public override void ModifyMesh(UnityEngine.UI.VertexHelper helper)
        {
            var verts = ListPool <UIVertex> .Get();

            if (m_image == null)
            {
                return;
            }
            helper.GetUIVertexStream(verts);
            int count = verts.Count;

            var shapeCount = m_image.fillCenter ? 9 : 8;

            if (count < shapeCount * 6 || m_image.overrideSprite == null)
            {
                return;
            }
            helper.Clear();
            var   overrideSprite = m_image.overrideSprite;
            var   border         = overrideSprite.border;
            var   spriteSize     = overrideSprite.rect.size;
            float tileWidth      = (spriteSize.x - border.x - border.z) / m_image.pixelsPerUnit;
            float tileHeight     = (spriteSize.y - border.y - border.w) / m_image.pixelsPerUnit;

            for (int i = 0; i < shapeCount; ++i)
            {
                var leftTopUV     = verts[6 * i + 1].uv0;
                var rightBottomUV = verts[6 * i + 4].uv0;
                var rectBorder    = verts[6 * i + 4].position - verts[6 * i + 1].position;
                rectBorder = new Vector3(Mathf.Abs(rectBorder.x), Mathf.Abs(rectBorder.y), Mathf.Abs(rectBorder.z));
                bool bTileVertical   = m_image.fillCenter ? (IsBorderTileVertical && (i == 1 || i == 7) || IsCenterTileVertical && i == 4) : IsBorderTileVertical && (i == 1 || i == 6);
                bool bTileHorizontal = m_image.fillCenter ? (IsBorderTileHorizontal && (i == 3 || i == 5) || IsCenterTileHorizontal && i == 4) : IsBorderTileHorizontal && (i == 3 || i == 4);
                for (int j = 0; j < 6; ++j)
                {
                    var index = 6 * i + j;
                    var vert  = verts[index];
                    var uv1   = Vector2.zero;
                    if (bTileVertical && tileHeight != 0)
                    {
                        uv1.y = (tileHeight == 0 ? 0f : rectBorder.y / tileHeight);
                    }
                    if (bTileHorizontal && tileWidth != 0)
                    {
                        uv1.x = (tileWidth == 0 ? 0f : rectBorder.x / tileWidth);
                    }
                    vert.uv1 = uv1;
                    var tangent = m_image.rectTransform.InverseTransformDirection(leftTopUV.x, leftTopUV.y, rightBottomUV.x);

                    vert.tangent = new Vector4(tangent.x, tangent.y, tangent.z, rightBottomUV.y);
                    if (m_changeBorderColor && !(m_image.fillCenter && i == 4))
                    {
                        vert.color *= m_borderColor;
                    }
                    if (m_changeCenterColor && (m_image.fillCenter && i == 4))
                    {
                        if (j == 0 || j == 5)
                        {
                            vert.color = vert.color * m_customCenterColor[0];
                        }
                        else if (j == 1)
                        {
                            vert.color = vert.color * m_customCenterColor[1];
                        }
                        else if (j == 2 || j == 3)
                        {
                            vert.color = vert.color * m_customCenterColor[2];
                        }
                        else if (j == 4)
                        {
                            vert.color = vert.color * m_customCenterColor[3];
                        }
                    }
                    verts[index] = vert;
                }
            }
            helper.Clear();
            helper.AddUIVertexTriangleStream(verts);
            verts.ReleaseToPool();
        }
예제 #10
0
 protected override void OnPopulateMesh(UnityEngine.UI.VertexHelper vh)
 {
     vh.Clear();
 }
예제 #11
0
        public override void ModifyMesh(UnityEngine.UI.VertexHelper helper)
        {
            var verts = ListPool <UIVertex> .Get();

            if (m_image == null)
            {
                return;
            }
            helper.GetUIVertexStream(verts);
            int count = verts.Count;

            var shapeCount = m_image.fillCenter ? 9 : 8;

            if (count < shapeCount * 6 || m_image.overrideSprite == null)
            {
                return;
            }
            helper.Clear();
            var   overrideSprite = m_image.overrideSprite;
            var   border         = overrideSprite.border;
            var   spriteSize     = overrideSprite.rect.size;
            float tileWidth      = (spriteSize.x - border.x - border.z) / m_image.pixelsPerUnit;
            float tileHeight     = (spriteSize.y - border.y - border.w) / m_image.pixelsPerUnit;

            for (int i = 0; i < shapeCount; ++i)
            {
                var leftTopUV     = verts[6 * i + 1].uv0;
                var rightBottomUV = verts[6 * i + 4].uv0;
                leftTopUV     = new Vector2((int)(leftTopUV.x * 10000), (int)(leftTopUV.y * 10000));
                rightBottomUV = new Vector2((int)(rightBottomUV.x * 10000), (int)(rightBottomUV.y * 10000));
                var rectBorder = verts[6 * i + 4].position - verts[6 * i + 1].position;
                rectBorder = new Vector3(Mathf.Abs(rectBorder.x), Mathf.Abs(rectBorder.y), Mathf.Abs(rectBorder.z));
                bool bTileVertical   = m_image.fillCenter ? (IsBorderTileVertical && (i == 1 || i == 7) || IsCenterTileVertical && i == 4) : IsBorderTileVertical && (i == 1 || i == 6);
                bool bTileHorizontal = m_image.fillCenter ? (IsBorderTileHorizontal && (i == 3 || i == 5) || IsCenterTileHorizontal && i == 4) : IsBorderTileHorizontal && (i == 3 || i == 4);
                for (int j = 0; j < 6; ++j)
                {
                    var index = 6 * i + j;
                    var vert  = verts[index];
                    var uv0   = vert.uv0;
                    var uv1   = Vector2.zero;
                    if (bTileVertical && tileHeight != 0)
                    {
                        uv1.y = ((tileHeight == 0 || tileHeight >= rectBorder.y) ? 1f : tileHeight / rectBorder.y);
                    }
                    if (bTileHorizontal && tileWidth != 0)
                    {
                        uv1.x = ((tileWidth == 0 || tileWidth >= rectBorder.x) ? 1f : tileWidth / rectBorder.x);
                    }
                    uv0     *= 0.5f;
                    uv0.x   += (uv0.x * leftTopUV.x) < 0 ? -leftTopUV.x : leftTopUV.x;
                    uv0.y   += (uv0.y * leftTopUV.y) < 0 ? -leftTopUV.y : leftTopUV.y;
                    uv1     *= 0.5f;
                    uv1.x   += rightBottomUV.x < 0 ? -rightBottomUV.x : rightBottomUV.x;
                    uv1.y   += rightBottomUV.y < 0 ? -rightBottomUV.y : rightBottomUV.y;
                    vert.uv0 = uv0;
                    vert.uv1 = uv1;
                    if (m_changeBorderColor && !(m_image.fillCenter && i == 4))
                    {
                        vert.color *= m_borderColor;
                    }
                    if (m_changeCenterColor && (m_image.fillCenter && i == 4))
                    {
                        if (j == 0 || j == 5)
                        {
                            vert.color = vert.color * m_customCenterColor[0];
                        }
                        else if (j == 1)
                        {
                            vert.color = vert.color * m_customCenterColor[1];
                        }
                        else if (j == 2 || j == 3)
                        {
                            vert.color = vert.color * m_customCenterColor[2];
                        }
                        else if (j == 4)
                        {
                            vert.color = vert.color * m_customCenterColor[3];
                        }
                    }
                    verts[index] = vert;
                }
            }
            helper.Clear();
            helper.AddUIVertexTriangleStream(verts);
            verts.ReleaseToPool();
        }
예제 #12
0
        /// <summary>
        /// Modifies the mesh.
        /// </summary>
        /// <param name="vh">Vertex buffer object.</param>
        public override void ModifyMesh(UnityEngine.UI.VertexHelper vh)
#endif
        {
            if (!IsActive())
            {
                return;
            }
            using (ListPool <UIVertex> .Scope uiVertices = new ListPool <UIVertex> .Scope())
            {
#if IS_VBO_UI_VERTEX
                int count = vertices.Count;
#else
        #if IS_VBO_MESH
                using (UnityEngine.UI.VertexHelper vh = new UnityEngine.UI.VertexHelper(mesh))
                {
                    vh.GetUIVertexStream(uiVertices.List);
                }
        #else
                vh.GetUIVertexStream(uiVertices.List);
        #endif
                int count = uiVertices.List.Count;
#endif
                if (count == 0)
                {
                    return;
                }
                float yMin = this.graphic.rectTransform.rect.yMin;
                float yMax = this.graphic.rectTransform.rect.yMax;
                switch (m_FillMode)
                {
                case GradientFillMode.PerQuad:
#if IS_VBO_UI_VERTEX
                    for (int i = 0; i < count; i += 4)
                    {
                        ApplyTint(vertices, i, m_TopColor);
                        ApplyTint(vertices, i + 1, m_TopColor);
                        ApplyTint(vertices, i + 2, m_BottomColor);
                        ApplyTint(vertices, i + 3, m_BottomColor);
                    }
#else
                    for (int i = 0; i < count; i += 6)
                    {
                        ApplyTint(uiVertices.List, i, m_TopColor);
                        ApplyTint(uiVertices.List, i + 1, m_TopColor);
                        ApplyTint(uiVertices.List, i + 2, m_BottomColor);
                        ApplyTint(uiVertices.List, i + 3, m_BottomColor);
                        ApplyTint(uiVertices.List, i + 4, m_BottomColor);
                        ApplyTint(uiVertices.List, i + 5, m_TopColor);
                    }
        #if IS_VBO_MESH
                    using (UnityEngine.UI.VertexHelper vh = new UnityEngine.UI.VertexHelper())
                    {
                        vh.AddUIVertexTriangleStream(uiVertices.List);
                        vh.FillMesh(mesh);
                    }
        #else
                    vh.Clear();
                    vh.AddUIVertexTriangleStream(uiVertices.List);
        #endif
#endif
                    return;

                case GradientFillMode.GeometryBounds:
                    yMin = uiVertices.List[0].position.y;
                    yMax = uiVertices.List[0].position.y;
                    for (int i = 1; i < count; i++)
                    {
                        float y = uiVertices.List[i].position.y;
                        if (y > yMax)
                        {
                            yMax = y;
                        }
                        if (y < yMin)
                        {
                            yMin = y;
                        }
                    }
                    break;
                }
                float div = 1f / (yMax - yMin);
#if IS_VBO_UI_VERTEX
                for (int i = 0; i < count; ++i)
                {
                    ApplyTint(
                        vertices,
                        i,
                        Color32.Lerp(m_TopColor, m_BottomColor, (yMax - uiVertices.List[i].position.y) * div)
                        );
                }
#else
                for (int i = 0; i < count; ++i)
                {
                    ApplyTint(
                        uiVertices.List,
                        i,
                        Color32.Lerp(m_TopColor, m_BottomColor, (yMax - uiVertices.List[i].position.y) * div)
                        );
                }
        #if IS_VBO_MESH
                using (UnityEngine.UI.VertexHelper vh = new UnityEngine.UI.VertexHelper())
                {
                    vh.AddUIVertexTriangleStream(uiVertices.List);
                    vh.FillMesh(mesh);
                }
        #else
                vh.Clear();
                vh.AddUIVertexTriangleStream(uiVertices.List);
        #endif
#endif
            }
        }