In OpenGL. Net Gl.BufferSubData
перегружен. Аргумент data должен иметь тип IntPtr
или тип object
.
. Метод делегируется в glBufferSubData
, где аргумент указывает указатель на последовательный байтовый массив, который содержит данные. .
Например, аргумент может быть либо массивом (любого типа, например: float
):
var data = new float[] { ... };
Gl.BufferSubData(BufferTarget.ArrayBuffer, new IntPtr(0), (uint)(4 * data.Length), data);
Или вам нужно создать некоторую неуправляемую память (Marshal.AllocHGlobal
) и скопировать некоторые данные (Marshal.Copy
) в память:
IntPtr unmanagedPointer = Marshal.AllocHGlobal(size);
Marshal.Copy(..., 0, unmanagedPointer, size);
Gl.BufferSubData(BufferTarget.ArrayBuffer, new IntPtr(0), size, unmanagedPointer);
Marshal.FreeHGlobal(unmanagedPointer);
В качестве альтернативы подумайте о Buffer Mapping ( glMapBuffer
).