public VertexBufferStreamLayout_NativeInterop(ref VertexBufferStreamLayout layout) { // init defaults descCount = 0; descs = null; elementCount = 0; elements = null; // init descriptions if (layout.descs != null) { descCount = layout.descs.Length; descs = (VertexBufferStreamDesc_NativeInterop *)Marshal.AllocHGlobal(Marshal.SizeOf <VertexBufferStreamDesc_NativeInterop>() * descCount); for (int i = 0; i != descCount; ++i) { descs[i] = new VertexBufferStreamDesc_NativeInterop(ref layout.descs[i]); } } // init elements if (layout.elements != null) { elementCount = layout.elements.Length; elements = (VertexBufferStreamElement_NativeInterop *)Marshal.AllocHGlobal(Marshal.SizeOf <VertexBufferStreamElement_NativeInterop>() * elementCount); for (int i = 0; i != elementCount; ++i) { elements[i] = new VertexBufferStreamElement_NativeInterop(ref layout.elements[i]); } } }
public void Dispose() { if (elements != null) { Marshal.FreeHGlobal((IntPtr)elements); elements = null; } }