private void ResetGrid() { if (vertexBuffer != null) { vertexBuffer.Dispose(); } vertexBuffer = new ExpandableVertexBuffer <ColorVertex>(device, PrimitiveType.LineList, Usage.None, VertexFormat.None, Pool.Managed); int iX = viewport.X % columnSpan; int iY = viewport.Y % rowSpan; int fX = viewport.Width; int fY = viewport.Height; int numOfColumns = viewport.Width / columnSpan; int numOfRows = viewport.Height / rowSpan; var colVertices = new List <ColorVertex>(numOfColumns * 2); var rowVertices = new List <ColorVertex>(numOfRows * 2); int opacity = 255 - Transparency; for (int i = iX; i < fX; i += columnSpan) { var v0 = new ColorVertex(); var v1 = new ColorVertex(); v0.Position = new Vector4(i, 0, RenderingZOffset, 1.0f); v0.Color = Color.FromArgb(opacity, color).ToArgb(); v1.Position = new Vector4(i, viewport.Height, RenderingZOffset, 1.0f); v1.Color = Color.FromArgb(opacity, color).ToArgb(); colVertices.Add(v0); colVertices.Add(v1); } for (int i = iY; i < fY; i += rowSpan) { var v0 = new ColorVertex(); var v1 = new ColorVertex(); v0.Position = new Vector4(0, i, RenderingZOffset, 1.0f); v0.Color = Color.FromArgb(opacity, color).ToArgb(); v1.Position = new Vector4(viewport.Width, i, RenderingZOffset, 1.0f); v1.Color = Color.FromArgb(opacity, color).ToArgb(); rowVertices.Add(v0); rowVertices.Add(v1); } vertexBuffer.AddVertices(colVertices); vertexBuffer.AddVertices(rowVertices); }
public static T[] ColorVertex <T>(Vector3[] positions) where T : struct { Vector4[] colors = GetColorsForBook(); //Vector2[] textureCoord = GetTextureCoord(); ColorVertex[] vertices = new ColorVertex[positions.Length]; //from this array, make coresponding structure for (int i = 0; i < positions.Length; i++) { ColorVertex a = new ColorVertex(); a.Position = positions[i]; a.Color = colors[i]; vertices[i] = a; } var y = (T[])Convert.ChangeType(vertices, typeof(T[])); return(y); }
public void Render() { if (IPoint == FPoint) { return; } // 1. Construct the four vertices of the selection box. //// int x = IPoint.X; int y = IPoint.Y; int width = FPoint.X - IPoint.X; int height = FPoint.Y - IPoint.Y; var tLeft = new ColorVertex(new Vector4(x, y, RenderingZOffset, 1.0f), color); var bLeft = new ColorVertex(new Vector4(x, y + height, RenderingZOffset, 1.0f), color); var tRight = new ColorVertex(new Vector4(x + width, y, RenderingZOffset, 1.0f), color); var bRight = new ColorVertex(new Vector4(FPoint.X, FPoint.Y, RenderingZOffset, 1.0f), color); var points = new[] { tLeft, bLeft, tRight, bRight }; // 2. Fill buffer. //// DataStream vstream = vertexBuffer.Lock(0, 0, LockFlags.Discard); vstream.WriteRange(points); vertexBuffer.Unlock(); // 3. Set states and draw! //// device.SetTexture(0, null); device.VertexDeclaration = vertexDecl; device.Indices = indexBuffer; device.SetStreamSource(0, vertexBuffer, 0, 20); device.DrawIndexedPrimitives(PrimitiveType.LineList, 0, 0, NumOfVertices, 0, 4); }