示例#1
0
        public void UpdateQuad(QuadHandle _handle)
        {
            var handle = _handle.index;
            var data   = Data[handle];

            Trace.Assert(handle < Handles.Count);

            {
                int[] verts = new int[4];
                // vertexes
                int vOffset = vPerQuad * handle;
                for (int i = 0; i < 4; ++i)
                {
                    var vIndex = i + vOffset;
                    verts[i]       = vIndex;
                    vArray[vIndex] = new TVertex().GenVertex(data, i);
                }

                // indexes to those vertexes
                // see the index diagram at https://github.com/MonoGame/MonoGame/blob/develop/MonoGame.Framework/Graphics/SpriteBatcher.cs
                // except we flipped vertex 2 and 3
                int iOffset = iPerQuad * handle;
                iArray[iOffset + 0] = verts[0];
                iArray[iOffset + 1] = verts[1];
                iArray[iOffset + 2] = verts[2];

                iArray[iOffset + 3] = verts[0];
                iArray[iOffset + 4] = verts[2];
                iArray[iOffset + 5] = verts[3];
            }

            handlesToUpdate.Add(_handle);
        }
示例#2
0
        public QuadHandle AddQuad(TQuadData data)
        {
            var newHandle = new QuadHandle()
            {
                index = Handles.Count
            };

            Handles.Add(newHandle);
            Trace.Assert(Handles.Count <= MaxQuads, "Too many quads added");


            Data.Add(data);
            UpdateQuad(newHandle);

            return(newHandle);
        }
示例#3
0
        public void RemoveQuad(QuadHandle toHandle)
        {
            var lastIndex  = Handles.Count - 1;
            var fromHandle = Handles[lastIndex];

            // if they are equal, we don't need to do anything
            if (toHandle.index != Handles.Count - 1)
            {
                // copy last into another position
                Data[toHandle.index]    = Data[lastIndex];
                Handles[toHandle.index] = Handles[lastIndex];

                // update the handle
                fromHandle.index = toHandle.index;
                UpdateQuad(fromHandle);
            }

            // remove the data for the last element
            Data.RemoveAt(lastIndex);
            Handles.RemoveAt(lastIndex);
        }