Пример #1
0
 void OnEnable()
 {
     Clear();
     SpriteMaterialManager.RegisterRenderMode(this);
 }
        private int groupPrimitive(int priCount, ref int visTriangles)
        {
            subMeshCount = 0;

            int              vertexIdx   = 0;
            Texture          lastTex     = null;
            uint             lastTexId   = 0;
            int              triangleCnt = 0;
            int              startIdx    = 0;
            SpriteRenderMode lastSRM     = SpriteRenderMode.None;


            SpritePrimitive primitive   = null;
            int             visPriCount = 0;

            for (int pi = 0; pi < priCount; pi++)
            {
                primitive = _primitives[pi];
                if (lastSRM != primitive.renderMode || lastTexId != primitive.texId)
                {
                    if (lastTexId != 0)
                    {
                        SubMeshInfo info = subMeshs[subMeshCount];

                        info.indexBase   = startIdx;
                        info.triangleCnt = triangleCnt;
                        info.mat         = SpriteMaterialManager.GetMaterial(lastSRM, lastTex);

                        subMeshCount++;

                        startIdx      = (vertexIdx >> 2) * 6;
                        visTriangles += triangleCnt;
                        triangleCnt   = 0;
                    }

                    lastTexId = primitive.texId;
                    lastTex   = primitive.texture;
                    lastSRM   = primitive.renderMode;
                }

                int c = primitive.size << 2;
                for (int i = 0; i < c; i++)
                {
                    int idx = vertexIdx + i;
                    vertices[idx] = primitive.position[i];
                    UVs[idx]      = primitive.uv[i];
                    colors[idx]   = primitive.color[i];
                }

                vertexIdx   += c;
                triangleCnt += (c >> 1);
                visPriCount++;
            }

            {
                SubMeshInfo _info = subMeshs[subMeshCount];

                _info.indexBase   = startIdx;
                _info.triangleCnt = triangleCnt;
                _info.mat         = SpriteMaterialManager.GetMaterial(lastSRM, lastTex);

                visTriangles += triangleCnt;
            }

            subMeshCount++;
            return(visPriCount);
        }
Пример #3
0
 void OnDisable()
 {
     SpriteMaterialManager.UnregisterRenderMode(this);
 }