Esempio n. 1
0
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);

            if (disposing)
            {
                Indices = null;
                OriginalVertices = null;
                Vertices = null;
                indexBuffer = null;
                vertexBuffer = null;
            }

        }
Esempio n. 2
0
        public override void CalculateVertexPoints()
        {
            float width = Texture.PixelsWide;
            float height = Texture.PixelsHigh;
            float imageH = Texture.ContentSizeInPixels.Height;

            int numOfPoints = (GridSize.X + 1) * (GridSize.Y + 1);

            vertexBuffer = new CCVertexBuffer<CCV3F_T2F>(numOfPoints, CCBufferUsage.WriteOnly);
            vertexBuffer.Count = numOfPoints;
            indexBuffer = new CCIndexBuffer<ushort>(GridSize.X * GridSize.Y * 6, BufferUsage.WriteOnly);
            indexBuffer.Count = GridSize.X * GridSize.Y * 6;

            Vertices = vertexBuffer.Data.Elements;
            Indices = indexBuffer.Data.Elements;

            OriginalVertices = new CCVertex3F[numOfPoints];

            CCV3F_T2F[] vertArray = Vertices;
            ushort[] idxArray = Indices;

            var l1 = new int[4];
            var l2 = new CCVertex3F[4];
            var tex1 = new int[4];
            var tex2 = new CCPoint[4];

            //int idx = -1;
            for (int x = 0; x < GridSize.X; ++x)
            {
                for (int y = 0; y < GridSize.Y; ++y)
                {
                    float x1 = x * Step.X;
                    float x2 = x1 + Step.X;
                    float y1 = y * Step.Y;
                    float y2 = y1 + Step.Y;

                    var a = (short) (x * (GridSize.Y + 1) + y);
                    var b = (short) ((x + 1) * (GridSize.Y + 1) + y);
                    var c = (short) ((x + 1) * (GridSize.Y + 1) + (y + 1));
                    var d = (short) (x * (GridSize.Y + 1) + (y + 1));

                    int idx = ((y * GridSize.X) + x) * 6;

                    idxArray[idx + 0] = (ushort) a;
                    idxArray[idx + 1] = (ushort) b;
                    idxArray[idx + 2] = (ushort) d;
                    idxArray[idx + 3] = (ushort) b;
                    idxArray[idx + 4] = (ushort) c;
                    idxArray[idx + 5] = (ushort) d;

                    //var tempidx = new short[6] {a, d, b, b, d, c};
                    //Array.Copy(tempidx, 0, idxArray, 6 * idx, tempidx.Length);

                    l1[0] = a;
                    l1[1] = b;
                    l1[2] = c;
                    l1[3] = d;

                    //var e = new Vector3(x1, y1, 0);
                    //var f = new Vector3(x2, y1, 0);
                    //var g = new Vector3(x2, y2, 0);
                    //var h = new Vector3(x1, y2, 0);

                    l2[0] = new CCVertex3F(x1, y1, 0);
                    l2[1] = new CCVertex3F(x2, y1, 0);
                    l2[2] = new CCVertex3F(x2, y2, 0);
                    l2[3] = new CCVertex3F(x1, y2, 0);

                    tex1[0] = a;
                    tex1[1] = b;
                    tex1[2] = c;
                    tex1[3] = d;

                    tex2[0] = new CCPoint(x1, y1);
                    tex2[1] = new CCPoint(x2, y1);
                    tex2[2] = new CCPoint(x2, y2);
                    tex2[3] = new CCPoint(x1, y2);

                    for (int i = 0; i < 4; ++i)
                    {
                        vertArray[l1[i]].Vertices = l2[i];

                        vertArray[tex1[i]].TexCoords.U = tex2[i].X / width;

                        if (TextureFlipped)
                        {
                            vertArray[tex1[i]].TexCoords.V = tex2[i].Y / height;
                        }
                        else
                        {
                            vertArray[tex1[i]].TexCoords.V = (imageH - tex2[i].Y) / height;
                        }
                    }
                }
            }

            int n = (GridSize.X + 1) * (GridSize.Y + 1);
            for (int i = 0; i < n; i++)
            {
                OriginalVertices[i] = Vertices[i].Vertices;
            }

            indexBuffer.UpdateBuffer();

            dirty = true;
        }
Esempio n. 3
0
        public override void CalculateVertexPoints()
        {
            float width  = m_pTexture.PixelsWide;
            float height = m_pTexture.PixelsHigh;
            float imageH = m_pTexture.ContentSizeInPixels.Height;

            int numOfPoints = (m_sGridSize.X + 1) * (m_sGridSize.Y + 1);

            m_pVertexBuffer       = new CCVertexBuffer <CCV3F_T2F>(numOfPoints, BufferUsage.WriteOnly);
            m_pVertexBuffer.Count = numOfPoints;
            m_pIndexBuffer        = new CCIndexBuffer <ushort>(m_sGridSize.X * m_sGridSize.Y * 6, BufferUsage.WriteOnly);
            m_pIndexBuffer.Count  = m_sGridSize.X * m_sGridSize.Y * 6;

            m_pVertices = m_pVertexBuffer.Data.Elements;
            m_pIndices  = m_pIndexBuffer.Data.Elements;

            m_pOriginalVertices = new CCVertex3F[numOfPoints];

            CCV3F_T2F[] vertArray = m_pVertices;
            ushort[]    idxArray  = m_pIndices;

            var l1   = new int[4];
            var l2   = new CCVertex3F[4];
            var tex1 = new int[4];
            var tex2 = new CCPoint[4];

            //int idx = -1;
            for (int x = 0; x < m_sGridSize.X; ++x)
            {
                for (int y = 0; y < m_sGridSize.Y; ++y)
                {
                    float x1 = x * m_obStep.X;
                    float x2 = x1 + m_obStep.X;
                    float y1 = y * m_obStep.Y;
                    float y2 = y1 + m_obStep.Y;

                    var a = (short)(x * (m_sGridSize.Y + 1) + y);
                    var b = (short)((x + 1) * (m_sGridSize.Y + 1) + y);
                    var c = (short)((x + 1) * (m_sGridSize.Y + 1) + (y + 1));
                    var d = (short)(x * (m_sGridSize.Y + 1) + (y + 1));

                    int idx = ((y * m_sGridSize.X) + x) * 6;

                    idxArray[idx + 0] = (ushort)a;
                    idxArray[idx + 1] = (ushort)b;
                    idxArray[idx + 2] = (ushort)d;
                    idxArray[idx + 3] = (ushort)b;
                    idxArray[idx + 4] = (ushort)c;
                    idxArray[idx + 5] = (ushort)d;

                    //var tempidx = new short[6] {a, d, b, b, d, c};
                    //Array.Copy(tempidx, 0, idxArray, 6 * idx, tempidx.Length);

                    l1[0] = a;
                    l1[1] = b;
                    l1[2] = c;
                    l1[3] = d;

                    //var e = new Vector3(x1, y1, 0);
                    //var f = new Vector3(x2, y1, 0);
                    //var g = new Vector3(x2, y2, 0);
                    //var h = new Vector3(x1, y2, 0);

                    l2[0] = new CCVertex3F(x1, y1, 0);
                    l2[1] = new CCVertex3F(x2, y1, 0);
                    l2[2] = new CCVertex3F(x2, y2, 0);
                    l2[3] = new CCVertex3F(x1, y2, 0);

                    tex1[0] = a;
                    tex1[1] = b;
                    tex1[2] = c;
                    tex1[3] = d;

                    tex2[0] = new CCPoint(x1, y1);
                    tex2[1] = new CCPoint(x2, y1);
                    tex2[2] = new CCPoint(x2, y2);
                    tex2[3] = new CCPoint(x1, y2);

                    for (int i = 0; i < 4; ++i)
                    {
                        vertArray[l1[i]].vertices = l2[i];

                        vertArray[tex1[i]].texCoords.U = tex2[i].X / width;

                        if (m_bIsTextureFlipped)
                        {
                            vertArray[tex1[i]].texCoords.V = tex2[i].Y / height;
                        }
                        else
                        {
                            vertArray[tex1[i]].texCoords.V = (imageH - tex2[i].Y) / height;
                        }
                    }
                }
            }

            int n = (m_sGridSize.X + 1) * (m_sGridSize.Y + 1);

            for (int i = 0; i < n; i++)
            {
                m_pOriginalVertices[i] = m_pVertices[i].vertices;
            }

            m_pIndexBuffer.UpdateBuffer();

            m_bDirty = true;
        }
Esempio n. 4
0
        /*
        protected override void AddedToScene()
        {
            base.AddedToScene();

            visibleTileRangeDirty = true;
        }

        protected override void VisibleBoundsChanged()
        {
            base.VisibleBoundsChanged();

            visibleTileRangeDirty = true;
        }

        protected override void ParentUpdatedTransform()
        {
            base.ParentUpdatedTransform();

            visibleTileRangeDirty = true;
        }
        */

        protected override void Dispose(bool disposing)
        {
            if (disposing) 
            {
                quadsVertexBuffer.Dispose();
                indexBuffer.Dispose();
                quadsVertexBuffer = null;
                indexBuffer = null;
            }

            base.Dispose (disposing);
        }
Esempio n. 5
0
        void InitialiseIndexBuffer()
        {
            int numOfTiles = (int)NumberOfTiles;
            int numOfVertices = numOfTiles * NumOfVerticesPerQuad;

            indexBuffer = new CCIndexBuffer<short>(numOfVertices, BufferUsage.WriteOnly);

            var indices = indexBuffer.Data;

            for (int tileIndex = 0; tileIndex < numOfTiles; tileIndex++)
            {
                int quadVertIndex = tileIndex * NumOfCornersPerQuad;
                int indexBufferOffset = tileIndex * NumOfVerticesPerQuad;

                indices[indexBufferOffset + 0] = (short)(quadVertIndex + 0);
                indices[indexBufferOffset + 1] = (short)(quadVertIndex + 1);
                indices[indexBufferOffset + 2] = (short)(quadVertIndex + 2);
                indices[indexBufferOffset + 3] = (short)(quadVertIndex + 3);
                indices[indexBufferOffset + 4] = (short)(quadVertIndex + 2);
                indices[indexBufferOffset + 5] = (short)(quadVertIndex + 1);
            }

            indexBuffer.Count = numOfVertices;
            indexBuffer.UpdateBuffer(0, numOfVertices);
        }
Esempio n. 6
0
        public override void CalculateVertexPoints()
        {
            float width = Texture.PixelsWide;
            float height = Texture.PixelsHigh;
            float imageH = Texture.ContentSizeInPixels.Height;

            int numQuads = GridSize.X * GridSize.Y;

            vertexBuffer = new CCVertexBuffer<CCV3F_T2F>(numQuads * 4, CCBufferUsage.WriteOnly);
            vertexBuffer.Count = numQuads * 4;
            indexBuffer = new CCIndexBuffer<short>(numQuads * 6, BufferUsage.WriteOnly);
            indexBuffer.Count = numQuads * 6;

            Vertices = vertexBuffer.Data.Elements;
            Indices = indexBuffer.Data.Elements;

            OriginalVertices = new CCQuad3[numQuads];

            CCV3F_T2F[] vertArray = Vertices;
            short[] idxArray = Indices;


            int index = 0;

            for (int x = 0; x < GridSize.X; x++)
            {
                for (int y = 0; y < GridSize.Y; y++)
                {
                    float x1 = x * Step.X;
                    float x2 = x1 + Step.X;
                    float y1 = y * Step.Y;
                    float y2 = y1 + Step.Y;

                    vertArray[index + 0].Vertices = new CCVertex3F(x1, y1, 0);
                    vertArray[index + 1].Vertices = new CCVertex3F(x2, y1, 0);
                    vertArray[index + 2].Vertices = new CCVertex3F(x1, y2, 0);
                    vertArray[index + 3].Vertices = new CCVertex3F(x2, y2, 0);

                    float newY1 = y1;
                    float newY2 = y2;

                    if (!TextureFlipped)
                    {
                        newY1 = imageH - y1;
                        newY2 = imageH - y2;
                    }

                    vertArray[index + 0].TexCoords = new CCTex2F(x1 / width, newY1 / height);
                    vertArray[index + 1].TexCoords = new CCTex2F(x2 / width, newY1 / height);
                    vertArray[index + 2].TexCoords = new CCTex2F(x1 / width, newY2 / height);
                    vertArray[index + 3].TexCoords = new CCTex2F(x2 / width, newY2 / height);

                    index += 4;
                }
            }

            for (int x = 0; x < numQuads; x++)
            {
                int i6 = x * 6;
                int i4 = x * 4;
                idxArray[i6 + 0] = (short) (i4 + 0);
                idxArray[i6 + 1] = (short) (i4 + 2);
                idxArray[i6 + 2] = (short) (i4 + 1);

                idxArray[i6 + 3] = (short) (i4 + 1);
                idxArray[i6 + 4] = (short) (i4 + 2);
                idxArray[i6 + 5] = (short) (i4 + 3);
            }

            indexBuffer.UpdateBuffer();

            for (int i = 0; i < numQuads; i++)
            {
                int i4 = i * 4;
                OriginalVertices[i].BottomLeft = vertArray[i4 + 0].Vertices;
                OriginalVertices[i].BottomRight = vertArray[i4 + 1].Vertices;
                OriginalVertices[i].TopLeft = vertArray[i4 + 2].Vertices;
                OriginalVertices[i].TopRight = vertArray[i4 + 3].Vertices;
            }
        }
Esempio n. 7
0
        public override void CalculateVertexPoints()
        {
            float width  = m_pTexture.PixelsWide;
            float height = m_pTexture.PixelsHigh;
            float imageH = m_pTexture.ContentSizeInPixels.Height;

            int numQuads = m_sGridSize.X * m_sGridSize.Y;

            m_pVertexBuffer       = new CCVertexBuffer <CCV3F_T2F>(numQuads * 4, BufferUsage.WriteOnly);
            m_pVertexBuffer.Count = numQuads * 4;
            m_pIndexBuffer        = new CCIndexBuffer <short>(numQuads * 6, BufferUsage.WriteOnly);
            m_pIndexBuffer.Count  = numQuads * 6;

            m_pVertices = m_pVertexBuffer.Data.Elements;
            m_pIndices  = m_pIndexBuffer.Data.Elements;

            m_pOriginalVertices = new CCQuad3[numQuads];

            CCV3F_T2F[] vertArray = m_pVertices;
            short[]     idxArray  = m_pIndices;


            int index = 0;

            for (int x = 0; x < m_sGridSize.X; x++)
            {
                for (int y = 0; y < m_sGridSize.Y; y++)
                {
                    float x1 = x * m_obStep.X;
                    float x2 = x1 + m_obStep.X;
                    float y1 = y * m_obStep.Y;
                    float y2 = y1 + m_obStep.Y;

                    vertArray[index + 0].vertices = new CCVertex3F(x1, y1, 0);
                    vertArray[index + 1].vertices = new CCVertex3F(x2, y1, 0);
                    vertArray[index + 2].vertices = new CCVertex3F(x1, y2, 0);
                    vertArray[index + 3].vertices = new CCVertex3F(x2, y2, 0);

                    float newY1 = y1;
                    float newY2 = y2;

                    if (!m_bIsTextureFlipped)
                    {
                        newY1 = imageH - y1;
                        newY2 = imageH - y2;
                    }

                    vertArray[index + 0].texCoords = new CCTex2F(x1 / width, newY1 / height);
                    vertArray[index + 1].texCoords = new CCTex2F(x2 / width, newY1 / height);
                    vertArray[index + 2].texCoords = new CCTex2F(x1 / width, newY2 / height);
                    vertArray[index + 3].texCoords = new CCTex2F(x2 / width, newY2 / height);

                    index += 4;
                }
            }

            for (int x = 0; x < numQuads; x++)
            {
                int i6 = x * 6;
                int i4 = x * 4;
                idxArray[i6 + 0] = (short)(i4 + 0);
                idxArray[i6 + 1] = (short)(i4 + 2);
                idxArray[i6 + 2] = (short)(i4 + 1);

                idxArray[i6 + 3] = (short)(i4 + 1);
                idxArray[i6 + 4] = (short)(i4 + 2);
                idxArray[i6 + 5] = (short)(i4 + 3);
            }

            m_pIndexBuffer.UpdateBuffer();

            for (int i = 0; i < numQuads; i++)
            {
                int i4 = i * 4;
                m_pOriginalVertices[i].BottomLeft  = vertArray[i4 + 0].vertices;
                m_pOriginalVertices[i].BottomRight = vertArray[i4 + 1].vertices;
                m_pOriginalVertices[i].TopLeft     = vertArray[i4 + 2].vertices;
                m_pOriginalVertices[i].TopRight    = vertArray[i4 + 3].vertices;
            }
        }