【问题标题】:Setting values to TexImage3D function in SharpGL C#在 SharpGL C# 中为 TexImage3D 函数设置值
【发布时间】:2017-04-10 13:43:48
【问题描述】:

使用 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++ 代码运行良好。 &amp;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 &amp;LUT[0] 中不接受,说明它只接受 IntPtr 类型的消息。无论如何我可以解决这个问题吗?

【问题讨论】:

    标签: c# opengl sharpgl


    【解决方案1】:

    您可以将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();
    

    【讨论】:

    • @conamx 你有时间测试它吗?成功了吗?
    • 首先,谢谢。是的,按照您的指示,我能够初始化 gl.TexImage3D() 函数。程序编译成功。但是,我在运行程序时收到错误 FatalExecutionEngineError。我确定这与 SharpGL 库有关,所以这次我正在尝试 openTK 库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2011-07-12
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多