protected override void Dispose(bool disposing) { base.Dispose(disposing); if (disposing) { Indices = null; OriginalVertices = null; Vertices = null; indexBuffer = null; vertexBuffer = null; } }
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; }
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; }
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; } }
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; } }