OpenGL的Gl.BufferSubData()方法中的数据参数为何.NET和IntPtr



我正在用OpenGL在c#中制作一个游戏引擎。NET。现在我正在处理一个批处理渲染器。批处理渲染器的一个主要方法是glBufferSubData((。但我提供的实际数据是QuadVertex[]的形式,而该方法要求IntPtr!!IntPtr应该是什么??在C++中,我们可以在那里提供一个void*,在Java(LWJGL3(中,我们还可以提供一个FloatBuffer。有没有办法将我的QuadVertex[]转换为IntPtr?这是QuadVertex类:

internal sealed class QuadVertex
{
public vec3 Position;
public vec4 Colour;
public vec2 TexCoord;
public static uint GetSize()
{
return (3 + 4 + 2) * 4;
}
}

在OpenGL中。NetGl.BufferSubData过载。数据参数的类型必须是IntPtrobject
该方法委托给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);

或者考虑缓冲区映射(glMapBuffer(。

最新更新