Пример #1
0
        public static void BufferData(BufferTarget target, int size, ref object dataArray, BufferUsage usage)
        {
            GCHandle hData = GCHandle.Alloc(dataArray, GCHandleType.Pinned);

            try { Delegates.BufferDataARB_IP(target, size, hData.AddrOfPinnedObject(), usage); }
            finally { hData.Free(); }
        }
Пример #2
0
        /*
         * /// <summary>
         * /// Creates a buffer data storage and copies data into it
         * /// </summary>
         * /// <param name="target"></param>
         * /// <param name="size"></param>
         * /// <param name="ptr"></param>
         * /// <param name="usage"></param>
         * public static void BufferData(BufferTarget target, int size, IntPtr ptr, BufferUsage usage) {
         *      Delegates.BufferDataARB_IP(target, size, ptr, usage);
         * }
         *
         * public static void BufferSubData(BufferTarget target, int offset, int size, IntPtr ptr) {
         *      Delegates.BufferSubDataARB_IP(target, offset, size, ptr);
         * }
         */

        public static void BufferData <TArray>(BufferTarget target, int size, ref TArray[] data, BufferUsage usage) where TArray : struct
        {
            // TODO: if possible, find a way to do it without a garbage collector handle creation ...
            // commented code now generates error "Cannot implicitly convert type 'System.Array' to 'void*' (CS0029)"

            // unsafe { fixed (void *ptr = data) { Delegates.BufferDataARB(target, size, ptr, usage); } }

            GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned);

            try { Delegates.BufferDataARB_IP(target, size, hData.AddrOfPinnedObject(), usage); }
            finally { hData.Free(); }
        }
Пример #3
0
 /// <summary>
 /// Creates a buffer data storage without the actual data
 /// </summary>
 /// <param name="target"></param>
 /// <param name="size"></param>
 /// <param name="usage"></param>
 public static void BufferData(BufferTarget target, int size, BufferUsage usage)
 {
     Delegates.BufferDataARB_IP(target, size, IntPtr.Zero, usage);
 }