public static Mem <T> CreateBuffer(Context context, MemFlags flags, uint size) { ErrorCode error; var res = NativeMethods.clCreateBuffer(context.handle, flags, (IntPtr)size, IntPtr.Zero, out error); if (error != ErrorCode.Success) { throw new OpenClException(error); } return(new Mem <T>(res)); }
public static Mem <T> CreateBuffer(Context context, MemFlags flags, T[] data) { var res = IntPtr.Zero; var gch = GCHandle.Alloc(data, GCHandleType.Pinned); try { var size = (IntPtr)(Marshal.SizeOf <T> () * data.Length); ErrorCode error; res = NativeMethods.clCreateBuffer(context.handle, flags, size, gch.AddrOfPinnedObject(), out error); if (error != ErrorCode.Success) { throw new OpenClException(error); } } finally { gch.Free(); } return(new Mem <T> (res)); }