示例#1
0
 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);
     }
 }
示例#2
0
 public void SetData(int offset, IntPtr data, int size, BufferSetDataMode mode)
 {
     if (dynamic)
     {
         SetDataDynamic(offset, data, size, mode);
     }
     else
     {
         SetDataStatic(offset, data, size);
     }
 }
示例#3
0
 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);
 }
示例#4
0
        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();
            }
        }
示例#5
0
 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);
     }
 }
示例#6
0
 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);
 }