internal unsafe static void UpdateVertexBuffer(InstancingId id)
        {
            var info = id.Info;

            if (info.Capacity == 0)
            {
                return;
            }

            fixed(byte *ptr = info.Data)
            {
                if (Data[id.Index].VB == VertexBufferId.NULL)
                {
                    Data[id.Index].VB = MyHwBuffers.CreateVertexBuffer(info.Capacity, info.Stride, new IntPtr(ptr), info.DebugName);
                }
                else
                {
                    var vb = Data[id.Index].VB;
                    MyHwBuffers.ResizeVertexBuffer(vb, info.Capacity);

                    DataBox        srcBox    = new DataBox(new IntPtr(ptr));
                    ResourceRegion dstRegion = new ResourceRegion(0, 0, 0, info.Stride * info.Capacity, 1, 1);

                    MyRender11.ImmediateContext.UpdateSubresource(srcBox, vb.Buffer, 0, dstRegion);
                }
            }
        }
Пример #2
0
 static unsafe void CheckBufferSize(int requiredSize)
 {
     if (m_currentBufferSize < requiredSize)
     {
         m_currentBufferSize = (int)(requiredSize * 1.33f);
         MyHwBuffers.ResizeVertexBuffer(m_VB, m_currentBufferSize);
     }
 }
        internal unsafe void Update(MyRenderMessageDebugDrawMesh message)
        {
            edges = !message.Shaded;
            depth = message.DepthRead;

            if (message.VertexCount > vbuffer.Capacity)
            {
                MyHwBuffers.ResizeVertexBuffer(vbuffer, message.VertexCount);
            }

            var mapping = MyMapping.MapDiscard(MyPrimitivesRenderer.RC.DeviceContext, vbuffer.Buffer);

            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();
        }