Exemple #1
0
 public DrawBat GetBatch(Shader shader, Texture texture)
 {
     if (curBatch != null && curBatch.shader == shader && curBatch.texture == texture)
     {
         return(curBatch);
     }
     return(curBatch = FindOrCreateBatch(shader, texture, curQueue += 1));
 }
Exemple #2
0
        public void Finish()
        {
            for (var node = activeBatches.First; node != null; node = node.Next)
            {
                node.Value.Close();
            }

            for (var node = prevBatches.First; prevBatches.Count > 0; node = prevBatches.First)
            {
                node.Value.Deactivate();
                inactiveBatches.AddLast(node.Value);
                prevBatches.RemoveFirst();
            }

            // Same as prevBatches.AddRange(activeBatches); activeBatches.Clear();
            var swap = prevBatches;

            prevBatches   = activeBatches;
            activeBatches = swap;

            curBatch = null;
        }
Exemple #3
0
        /**
         * 0 - 1
         * | \ |
         * 2 - 3
         * 4, 2
         */
        public static void DrawQuad(this DrawBat bat, Quad q, Quad uv, Vec4 c)
        {
            int vi = bat.vertCount;
            int ti = bat.triCount;

            bat.RequestQuota(4, 2);

            var verts = bat.verts;

            verts[vi + 0].Set(q.tl.x, q.tl.y, 0);
            verts[vi + 1].Set(q.tr.x, q.tr.y, 0);
            verts[vi + 2].Set(q.bl.x, q.bl.y, 0);
            verts[vi + 3].Set(q.br.x, q.br.y, 0);

            var uvs = bat.uvs;

            uvs[vi + 0].Set(uv.tl.x, uv.tl.y);
            uvs[vi + 1].Set(uv.tr.x, uv.tr.y);
            uvs[vi + 2].Set(uv.bl.x, uv.bl.y);
            uvs[vi + 3].Set(uv.br.x, uv.br.y);

            var color  = new Color(c.x, c.y, c.z, c.w);
            var colors = bat.colors;

            colors[vi + 0] = color;
            colors[vi + 1] = color;
            colors[vi + 2] = color;
            colors[vi + 3] = color;

            var tris = bat.tris;

            tris[ti + 0] = vi;
            tris[ti + 1] = vi + 1;
            tris[ti + 2] = vi + 3;
            tris[ti + 3] = vi;
            tris[ti + 4] = vi + 3;
            tris[ti + 5] = vi + 2;
        }
Exemple #4
0
        DrawBat FindOrCreateBatch(Shader shader, Texture texture, int queue)
        {
            DrawBat batch;

            // if there is a prevBatch that matches
            for (var node = prevBatches.First; node != null; node = node.Next)
            {
                batch = node.Value;
                if (batch.shader == shader && batch.texture == texture)
                {
                    prevBatches.Remove(node);
                    batch.Open(queue);
                    activeBatches.AddLast(batch);
                    return(batch);
                }
            }

            // if there is an inactiveBatch that matches
            for (var node = inactiveBatches.First; node != null; node = node.Next)
            {
                batch = node.Value;
                if (batch.shader == shader && batch.texture == texture)
                {
                    inactiveBatches.Remove(node);
                    batch.Activate();
                    batch.Open(queue);
                    activeBatches.AddLast(batch);
                    return(batch);
                }
            }

            // create a new batch
            batch = new DrawBat(shader, texture);
            batch.Open(queue);
            activeBatches.AddLast(batch);
            return(batch);
        }
Exemple #5
0
        /**
         * 0 -- 1 -- 2 -- 3
         * | \  | \  | \  |
         * 4 -- 5 -- 6 -- 7
         * | \  | \  | \  |
         * 8 -- 9 -- 10 - 11
         * | \  | \  | \  |
         * 12 - 13 - 14 - 15
         * 16, 18
         */
        public static void DrawQuad9Sliced(this DrawBat bat, Quad q, Quad qI, Quad uv, Quad uvI, Vec4 c, bool fillInner)
        {
            int vi = bat.vertCount;
            int ti = bat.triCount;

            bat.RequestQuota(16, fillInner ? 18 : 16);

            var verts = bat.verts;

            verts[vi + 0].Set(q.tl.x, q.tl.y, 0);
            verts[vi + 1].Set(qI.tl.x, q.tl.y, 0);
            verts[vi + 2].Set(qI.tr.x, q.tr.y, 0);
            verts[vi + 3].Set(q.tr.x, q.tr.y, 0);

            verts[vi + 4].Set(q.tl.x, qI.tl.y, 0);
            verts[vi + 5].Set(qI.tl.x, qI.tl.y, 0);
            verts[vi + 6].Set(qI.tr.x, qI.tr.y, 0);
            verts[vi + 7].Set(q.tr.x, qI.tr.y, 0);

            verts[vi + 8].Set(q.bl.x, qI.bl.y, 0);
            verts[vi + 9].Set(qI.bl.x, qI.bl.y, 0);
            verts[vi + 10].Set(qI.br.x, qI.br.y, 0);
            verts[vi + 11].Set(q.br.x, qI.br.y, 0);

            verts[vi + 12].Set(q.bl.x, q.bl.y, 0);
            verts[vi + 13].Set(qI.bl.x, q.bl.y, 0);
            verts[vi + 14].Set(qI.br.x, q.br.y, 0);
            verts[vi + 15].Set(q.br.x, q.br.y, 0);

            var uvs = bat.uvs;

            uvs[vi + 0].Set(uv.tl.x, uv.tl.y);
            uvs[vi + 1].Set(uvI.tl.x, uv.tl.y);
            uvs[vi + 2].Set(uvI.tr.x, uv.tr.y);
            uvs[vi + 3].Set(uv.tr.x, uv.tr.y);

            uvs[vi + 4].Set(uv.tl.x, uvI.tl.y);
            uvs[vi + 5].Set(uvI.tl.x, uvI.tl.y);
            uvs[vi + 6].Set(uvI.tr.x, uvI.tr.y);
            uvs[vi + 7].Set(uv.tr.x, uvI.tr.y);

            uvs[vi + 8].Set(uv.bl.x, uvI.bl.y);
            uvs[vi + 9].Set(uvI.bl.x, uvI.bl.y);
            uvs[vi + 10].Set(uvI.br.x, uvI.br.y);
            uvs[vi + 11].Set(uv.br.x, uvI.br.y);

            uvs[vi + 12].Set(uv.bl.x, uv.bl.y);
            uvs[vi + 13].Set(uvI.bl.x, uv.bl.y);
            uvs[vi + 14].Set(uvI.br.x, uv.br.y);
            uvs[vi + 15].Set(uv.br.x, uv.br.y);

            var color  = new Color(c.x, c.y, c.z, c.w);
            var colors = bat.colors;

            colors[vi + 0]  = color;
            colors[vi + 1]  = color;
            colors[vi + 2]  = color;
            colors[vi + 3]  = color;
            colors[vi + 4]  = color;
            colors[vi + 5]  = color;
            colors[vi + 6]  = color;
            colors[vi + 7]  = color;
            colors[vi + 8]  = color;
            colors[vi + 9]  = color;
            colors[vi + 10] = color;
            colors[vi + 11] = color;
            colors[vi + 12] = color;
            colors[vi + 13] = color;
            colors[vi + 14] = color;
            colors[vi + 15] = color;

            var tris = bat.tris;

            tris[ti + 0] = vi;
            tris[ti + 1] = vi + 1;
            tris[ti + 2] = vi + 5;
            tris[ti + 3] = vi;
            tris[ti + 4] = vi + 5;
            tris[ti + 5] = vi + 4;

            tris[ti + 6]  = vi + 1;
            tris[ti + 7]  = vi + 2;
            tris[ti + 8]  = vi + 6;
            tris[ti + 9]  = vi + 1;
            tris[ti + 10] = vi + 6;
            tris[ti + 11] = vi + 5;

            tris[ti + 12] = vi + 2;
            tris[ti + 13] = vi + 3;
            tris[ti + 14] = vi + 7;
            tris[ti + 15] = vi + 2;
            tris[ti + 16] = vi + 7;
            tris[ti + 17] = vi + 6;

            tris[ti + 18] = vi + 4;
            tris[ti + 19] = vi + 5;
            tris[ti + 20] = vi + 9;
            tris[ti + 21] = vi + 4;
            tris[ti + 22] = vi + 9;
            tris[ti + 23] = vi + 8;

            tris[ti + 24] = vi + 6;
            tris[ti + 25] = vi + 7;
            tris[ti + 26] = vi + 11;
            tris[ti + 27] = vi + 6;
            tris[ti + 28] = vi + 11;
            tris[ti + 29] = vi + 10;

            tris[ti + 30] = vi + 8;
            tris[ti + 31] = vi + 9;
            tris[ti + 32] = vi + 13;
            tris[ti + 33] = vi + 8;
            tris[ti + 34] = vi + 13;
            tris[ti + 35] = vi + 12;

            tris[ti + 36] = vi + 9;
            tris[ti + 37] = vi + 10;
            tris[ti + 38] = vi + 14;
            tris[ti + 39] = vi + 9;
            tris[ti + 40] = vi + 14;
            tris[ti + 41] = vi + 13;

            tris[ti + 42] = vi + 10;
            tris[ti + 43] = vi + 11;
            tris[ti + 44] = vi + 15;
            tris[ti + 45] = vi + 10;
            tris[ti + 46] = vi + 15;
            tris[ti + 47] = vi + 14;

            if (fillInner)
            {
                tris[ti + 48] = vi + 5;
                tris[ti + 49] = vi + 6;
                tris[ti + 50] = vi + 10;
                tris[ti + 51] = vi + 5;
                tris[ti + 52] = vi + 10;
                tris[ti + 53] = vi + 9;
            }
        }
Exemple #6
0
 public void Start()
 {
     curQueue = TransparentQueue + 1;
     curBatch = null;
 }