public unsafe MyDebugMesh(MyRenderMessageDebugDrawMesh message) { vbuffer = MyManagers.Buffers.CreateVertexBuffer( "MyDebugMesh", message.VertexCount, sizeof(MyVertexFormatPositionColor), usage: ResourceUsage.Dynamic); Update(message); }
private void DrawPersistentDebugNavmesh() { foreach (var coordPoly in m_newObbCoordsPolygons) { if (m_newObbCoordsPolygons[coordPoly.Key] == null) { m_obbCoordsPolygons.Remove(coordPoly.Key); } else { m_obbCoordsPolygons[coordPoly.Key] = coordPoly.Value; } } m_newObbCoordsPolygons.Clear(); if (m_obbCoordsPolygons.Count > 0) { MyRenderMessageDebugDrawMesh mesh = VRageRender.MyRenderProxy.PrepareDebugDrawMesh(); Vertex vec0 = new Vertex(), vec1 = new Vertex(), vec2 = new Vertex(); foreach (var vertexList in m_obbCoordsPolygons.Values) { for (int i = 0; i < vertexList.Count;) { vec0 = vertexList[i++]; vec1 = vertexList[i++]; vec2 = vertexList[i++]; mesh.AddTriangle(ref vec0.pos, vec0.color, ref vec1.pos, vec1.color, ref vec2.pos, vec2.color); } } if (m_drawNavmeshID == VRageRender.MyRenderProxy.RENDER_ID_UNASSIGNED) { m_drawNavmeshID = VRageRender.MyRenderProxy.DebugDrawMesh(mesh, MatrixD.Identity, Color.Green, true, true); } else { VRageRender.MyRenderProxy.DebugDrawUpdateMesh(m_drawNavmeshID, mesh, MatrixD.Identity, Color.Green, true, true); } } }
internal unsafe void Update(MyRenderMessageDebugDrawMesh message) { edges = !message.Shaded; depth = message.DepthRead; if (vbuffer.ElementCount < message.VertexCount) { MyManagers.Buffers.Resize(vbuffer, message.VertexCount); } var mapping = MyMapping.MapDiscard(MyPrimitivesRenderer.RC, vbuffer); for (int i = 0; i < message.VertexCount; i++) { MyVertexFormatPositionColor vert = new MyVertexFormatPositionColor(Vector3.Transform(message.Vertices[i].Position, message.WorldMatrix), message.Vertices[i].Color); mapping.WriteAndPosition(ref vert); } mapping.Unmap(); message.Vertices.Clear(); }
internal static void DebugMesh(MyRenderMessageDebugDrawMesh message) { if (!m_debugMeshes.ContainsKey(message.ID)) m_debugMeshes.Add(message.ID, new MyDebugMesh(message)); else m_debugMeshes[message.ID].Update(message); }
public static void DebugDrawUpdateMesh(uint ID, MyRenderMessageDebugDrawMesh message, MatrixD worldMatrix, Color color, bool depthRead, bool shaded) { message.ID = ID; message.WorldMatrix = worldMatrix; message.DepthRead = depthRead; message.Shaded = shaded; message.Color = color; EnqueueMessage(message); }
public static uint DebugDrawMesh(MyRenderMessageDebugDrawMesh message, MatrixD worldMatrix, Color color, bool depthRead, bool shaded) { message.ID = GetMessageId(); message.WorldMatrix = worldMatrix; message.DepthRead = depthRead; message.Shaded = shaded; message.Color = color; EnqueueMessage(message); return message.ID; }
public unsafe MyDebugMesh(MyRenderMessageDebugDrawMesh message) { vbuffer = MyHwBuffers.CreateVertexBuffer(message.VertexCount, sizeof(MyVertexFormatPositionColor), BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyDebugMesh"); Update(message); }