0

使用 OpenGL 的 C++ 代码:

vector<RGB> LUT;  //creating a vector3 array
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 16, 16, 16, 0, GL_RGB,GL_FLOAT, &LUT[0]);

上面的 C++ 代码工作正常。&LUT[0]被接受,因为它是类型const GLvoid * data

使用 SharpGL 的 C# 代码:

Vector3[] vec3 = new Vector3[2]; //creating a vector3 array
gl.TexImage3D(GL_TEXTURE_3D, 0, GL_RGB, 16, 16, 16, 0, GL_RGB,GL_FLOAT, &LUT[0]);

我的问题是,在 SharpGL&LUT[0]中不接受,说明它只接受 IntPtr 类型的消息。无论如何我可以解决这个问题吗?

4

1 回答 1

0

你可以打包float[]成一个IntPtr.

float[] data = {
    ...
};
GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned);
IntPtr dataPtr = handle.AddrOfPinnedObject();
var size = Marshal.SizeOf(typeof(float)) * data.Length;

调用后记得释放它gl.TexImage3D()

handle.Free();
于 2017-04-10T13:58:38.340 回答