在 SharpGL C# 中为 TexImage3D 函数设置值
Setting values to TexImage3D function in SharpGL C#
使用 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 类型的消息。无论如何我可以解决这个问题吗?
您可以将 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();
使用 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 类型的消息。无论如何我可以解决这个问题吗?
您可以将 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();