首页 文章

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

提问于
浏览
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类型的消息 . 无论如何我可以解决这个问题吗?

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();
    

相关问题