在SharpGL C#中将值设置为TexImage3D函数

时间:2017-04-10 13:43:49

标签: c# opengl sharpgl

使用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类型的消息。无论如何我能解决这个问题吗?

1 个答案:

答案 0 :(得分: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();