Exemplo n.º 1
0
    private void DrawOnMultipleDrawCalls(List <List <MadSprite> > batchedSprites)
    {
        try {
            for (int i = 0; i < batchedSprites.Count; i++)
            {
                var sprites = batchedSprites[i];

                var drawCall = NextDrawCall();
                var mesh     = drawCall.mesh;
                mesh.Clear();
                mesh.subMeshCount = 1;

                MadList <int> triangles;

                if (!trianglesPool.CanTake())
                {
                    trianglesPool.Add(new MadList <int>());
                }

                triangles = trianglesPool.Take();

                for (int j = 0; j < sprites.Count; j++)
                {
                    var      sprite = sprites[j];
                    Material material;
                    sprite.DrawOn(ref vertices, ref colors, ref uv, ref triangles, out material);
                    if (j == 0)
                    {
                        drawCall.SetMaterial(material);
                    }
                }

                triangles.Trim();
                vertices.Trim();
                colors.Trim();
                uv.Trim();

                mesh.vertices = vertices.Array;
                mesh.colors32 = colors.Array;
                mesh.uv       = uv.Array;
                mesh.SetTriangles(triangles.Array, 0);

#if !UNITY_METRO
                mesh.RecalculateNormals();
#endif
                triangles.Clear();
                trianglesPool.Release(triangles);

                vertices.Clear();
                colors.Clear();
                uv.Clear();
                triangleList.Clear();
            }
#if !MAD_EBT && (!UNITY_5 || !UNITY_WEBGL) // http://fogbugz.unity3d.com/default.asp?675175_r3deh2mdhmitddpj
        } finally {
#else
        } finally {} {
Exemplo n.º 2
0
    void LateUpdate()
    {
        var meshFilter = transform.GetComponent <MeshFilter>();
        var mesh       = meshFilter.sharedMesh;

        mesh.Clear();

        var sprites = VisibleSprites(panel.sprites);

        SortByGUIDepth(sprites);

        Material[] materials = new Material[sprites.Count];

        mesh.subMeshCount = sprites.Count;

        for (int i = 0; i < sprites.Count; ++i)
        {
            var           sprite = sprites[i];
            Material      material;
            MadList <int> triangles = new MadList <int>();

            sprite.DrawOn(ref vertices, ref colors, ref uv, ref triangles, out material);

            triangles.Trim();
            triangleList.Add(triangles);
            materials[i] = material;
        }

        vertices.Trim();
        colors.Trim();
        uv.Trim();
        triangleList.Trim();

        mesh.vertices = vertices.Array;
        mesh.colors32 = colors.Array;
        mesh.uv       = uv.Array;
        mesh.RecalculateNormals();

        for (int i = 0; i < triangleList.Count; ++i)
        {
            MadList <int> triangles = triangleList[i];
            mesh.SetTriangles(triangles.Array, i);
        }

        renderer.sharedMaterials = materials;

        vertices.Clear();
        colors.Clear();
        uv.Clear();
        triangleList.Clear();
    }
Exemplo n.º 3
0
    void LateUpdate()
    {
        if (panel == null)
        {
            panel = GetComponent <MadPanel>();
        }

        var mesh = drawCall.mesh;

        mesh.Clear();

        var visibleSprites = VisibleSprites(panel.sprites);

        SortByGUIDepth(visibleSprites);
        var batchedSprites = Batch(visibleSprites);

        Material[] materials = new Material[batchedSprites.Count];

        mesh.subMeshCount = batchedSprites.Count;

        for (int i = 0; i < batchedSprites.Count; ++i)
        {
            List <MadSprite> sprites = batchedSprites[i];

            MadList <int> triangles;

            if (!trianglesPool.CanTake())
            {
                trianglesPool.Add(new MadList <int>());
            }

            triangles = trianglesPool.Take();

            for (int j = 0; j < sprites.Count; ++j)
            {
                var      sprite = sprites[j];
                Material material;
                sprite.DrawOn(ref vertices, ref colors, ref uv, ref triangles, out material);
                materials[i] = material;
            }

            triangles.Trim();
            triangleList.Add(triangles);
        }

        vertices.Trim();
        colors.Trim();
        uv.Trim();
        triangleList.Trim();

        mesh.vertices = vertices.Array;
        mesh.colors32 = colors.Array;
        mesh.uv       = uv.Array;

        // excluding for metro, because of a bug
#if !UNITY_METRO
        mesh.RecalculateNormals();
#endif

        for (int i = 0; i < triangleList.Count; ++i)
        {
            MadList <int> triangles = triangleList[i];
            mesh.SetTriangles(triangles.Array, i);
            triangles.Clear();
            trianglesPool.Release(triangles);
        }

        //renderer.sharedMaterials = materials;
        drawCall.SetMaterials(materials);

        vertices.Clear();
        colors.Clear();
        uv.Clear();
        triangleList.Clear();
    }