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