public unsafe bool Init(long size, VertexBufferLayout layout) { using (var layoutNative = new VertexBufferLayout_NativeInterop(ref layout)) { return(Orbital_Video_D3D12_VertexBuffer_Init(handle, null, (ulong)size, sizeof(byte), &layoutNative) != 0); } }
public unsafe bool Init <T>(T[] vertices, VertexBufferLayout layout) where T : unmanaged { using (var layoutNative = new VertexBufferLayout_NativeInterop(ref layout)) { vertexCount = vertices.Length; vertexSize = Marshal.SizeOf <T>(); fixed(T *verticesPtr = vertices) { return(Orbital_Video_D3D12_VertexBuffer_Init(handle, verticesPtr, (ulong)vertices.LongLength, (uint)vertexSize, &layoutNative) != 0); } } }
public unsafe bool Init <T>(T[] vertices, VertexBufferLayout layout) where T : struct { var layoutNative = new VertexBufferLayout_NativeInterop(ref layout); vertexCount = vertices.Length; vertexSize = Marshal.SizeOf <T>(); byte[] verticesDataCopy = new byte[vertexSize * vertices.Length]; var gcHandle = GCHandle.Alloc(vertices, GCHandleType.Pinned); Marshal.Copy(gcHandle.AddrOfPinnedObject(), verticesDataCopy, 0, verticesDataCopy.Length); gcHandle.Free(); fixed(byte *verticesPtr = verticesDataCopy) { return(Orbital_Video_D3D12_VertexBuffer_Init(handle, verticesPtr, (ulong)vertices.LongLength, (uint)vertexSize, &layoutNative) != 0); } }