public void Render(double delta) { if (selections.Count == 0 || game.Graphics.LostContext) { return; } // TODO: Proper selection box sorting. But this is very difficult because // we can have boxes within boxes, intersecting boxes, etc. Probably not worth it. Vector3 camPos = game.CurrentCameraPos; for (int i = 0; i < selections.Count; i++) { comparer.Intersect(selections[i], camPos); } selections.Sort(comparer); if (vertices == null) // lazy init as most servers don't use this. { vertices = new VertexP3fC4b[256 * VerticesCount]; lineVertices = new VertexP3fC4b[256 * LineVerticesCount]; ContextRecreated(); } int index = 0, lineIndex = 0; for (int i = 0; i < selections.Count; i++) { SelectionBox box = selections[i]; box.Render(delta, vertices, lineVertices, ref index, ref lineIndex); } IGraphicsApi gfx = game.Graphics; gfx.SetBatchFormat(VertexFormat.P3fC4b); gfx.UpdateDynamicVb_Lines(lineVb, lineVertices, selections.Count * LineVerticesCount); gfx.DepthWrite = false; gfx.AlphaBlending = true; gfx.UpdateDynamicVb_IndexedTris(vb, vertices, selections.Count * VerticesCount); gfx.DepthWrite = true; gfx.AlphaBlending = false; }
public void Render(double delta) { if (selections.Count == 0) { return; } // TODO: Proper selection box sorting. But this is very difficult because // we can have boxes within boxes, intersecting boxes, etc. Probably not worth it. Vector3 camPos = game.CurrentCameraPos; for (int i = 0; i < selections.Count; i++) { comparer.Intersect(selections[i], camPos); } selections.Sort(comparer); if (vertices == null) { InitData(); // lazy init as most servers don't use this. } int index = 0, lineIndex = 0; for (int i = 0; i < selections.Count; i++) { SelectionBox box = selections[i]; box.Render(delta, vertices, lineVertices, ref index, ref lineIndex); } Graphics.SetBatchFormat(VertexFormat.Pos3fCol4b); Graphics.UpdateDynamicVb(DrawMode.Lines, lineVb, lineVertices, selections.Count * LineVerticesCount); Graphics.DepthWrite = false; Graphics.AlphaBlending = true; Graphics.UpdateDynamicIndexedVb(DrawMode.Triangles, vb, vertices, selections.Count * VerticesCount, selections.Count * IndicesCount); Graphics.DepthWrite = true; Graphics.AlphaBlending = false; }