Пример #1
0
        public unsafe MyDebugMesh(MyRenderMessageDebugDrawMesh message)
        {
            vbuffer = MyManagers.Buffers.CreateVertexBuffer(
                "MyDebugMesh", message.VertexCount, sizeof(MyVertexFormatPositionColor),
                usage: ResourceUsage.Dynamic);

            Update(message);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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();
        }
Пример #4
0
 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);
 }
Пример #5
0
        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);
        }
Пример #6
0
        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;
        }
Пример #7
0
        public unsafe MyDebugMesh(MyRenderMessageDebugDrawMesh message)
        {
            vbuffer = MyHwBuffers.CreateVertexBuffer(message.VertexCount, sizeof(MyVertexFormatPositionColor), BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyDebugMesh");

            Update(message);
        }