public static void SetData <T>( this IPlatformBuffer buffer, int offset, ref T data, BufferSetDataMode mode) where T : unmanaged { fixed(T *p = &data) { buffer.SetData(offset, new IntPtr(p), sizeof(T), mode); } }
public void SetData(int offset, IntPtr data, int size, BufferSetDataMode mode) { if (dynamic) { SetDataDynamic(offset, data, size, mode); } else { SetDataStatic(offset, data, size); } }
public void SetData(int offset, IntPtr data, int size, BufferSetDataMode mode) { GL.BindBuffer(GLTarget, GLBuffer); GLHelper.CheckGLErrors(); if (mode == BufferSetDataMode.Discard) { GL.BufferData(GLTarget, Size, IntPtr.Zero, GLUsage); GLHelper.CheckGLErrors(); } GL.BufferSubData(GLTarget, new IntPtr(offset), size, data); GLHelper.CheckGLErrors(); Context.InvalidateBufferBinding(BufferType); }
private void SetDataDynamic(int offset, IntPtr data, int size, BufferSetDataMode mode) { if (mode == BufferSetDataMode.Discard) { backingBuffer.DiscardSlice(WriteFenceValue); WriteFenceValue = 0; } else { if (context.NextFenceValue <= WriteFenceValue) { context.Flush(); } context.WaitForFence(WriteFenceValue); } var dstData = backingBuffer.MapSlice() + offset; try { GraphicsUtility.CopyMemory(dstData, data, size); } finally { backingBuffer.UnmapSlice(); } }
public static void SetData <T>( this IPlatformBuffer buffer, int offset, T[] data, int startIndex, int count, BufferSetDataMode mode) where T : unmanaged { fixed(T *p = &data[startIndex]) { buffer.SetData(offset, new IntPtr(p), count * sizeof(T), mode); } }
public static void SetData <T>( this IPlatformBuffer buffer, int offset, T[] data, BufferSetDataMode mode) where T : unmanaged { SetData(buffer, offset, data, 0, data.Length, mode); }