/// <summary> /// Called just prior to rendering the component. /// </summary> protected override void OnRender() { if (m_vertexBuffer == null) { m_vertexBuffer = new VertexBuffer <VertexPNC>(24); m_surface.SetVertexBuffer(m_vertexBuffer, PrimitiveType.Lines); } if (m_dirty) { ReadOnlyCollection <Vector3> corners = m_mesh.Bounds.Corners; // clear any lines m_vertexBuffer.Clear(); // get the underlying buffer int offset; VertexPNC[] verts = m_vertexBuffer.WriteDirectly(24, out offset); // each consecutive pair of elements forms a line segment drawn to form the box wireframe verts[0] = new VertexPNC(corners[0], Vector3.Zero, Color4.White); verts[1] = new VertexPNC(corners[4], Vector3.Zero, Color4.White); verts[2] = new VertexPNC(corners[1], Vector3.Zero, Color4.White); verts[3] = new VertexPNC(corners[5], Vector3.Zero, Color4.White); verts[4] = new VertexPNC(corners[2], Vector3.Zero, Color4.White); verts[5] = new VertexPNC(corners[6], Vector3.Zero, Color4.White); verts[6] = new VertexPNC(corners[3], Vector3.Zero, Color4.White); verts[7] = new VertexPNC(corners[7], Vector3.Zero, Color4.White); verts[8] = new VertexPNC(corners[0], Vector3.Zero, Color4.White); verts[9] = new VertexPNC(corners[1], Vector3.Zero, Color4.White); verts[10] = new VertexPNC(corners[1], Vector3.Zero, Color4.White); verts[11] = new VertexPNC(corners[3], Vector3.Zero, Color4.White); verts[12] = new VertexPNC(corners[3], Vector3.Zero, Color4.White); verts[13] = new VertexPNC(corners[2], Vector3.Zero, Color4.White); verts[14] = new VertexPNC(corners[2], Vector3.Zero, Color4.White); verts[15] = new VertexPNC(corners[0], Vector3.Zero, Color4.White); verts[16] = new VertexPNC(corners[4], Vector3.Zero, Color4.White); verts[17] = new VertexPNC(corners[5], Vector3.Zero, Color4.White); verts[18] = new VertexPNC(corners[5], Vector3.Zero, Color4.White); verts[19] = new VertexPNC(corners[7], Vector3.Zero, Color4.White); verts[20] = new VertexPNC(corners[7], Vector3.Zero, Color4.White); verts[21] = new VertexPNC(corners[6], Vector3.Zero, Color4.White); verts[22] = new VertexPNC(corners[6], Vector3.Zero, Color4.White); verts[23] = new VertexPNC(corners[4], Vector3.Zero, Color4.White); // upload the lines to the GPU if changed m_vertexBuffer.BufferData(); } }