OpenTK GenFramebuffers错误

时间:2012-06-29 22:00:58

标签: c# opengl opentk

我正在尝试使用OpenTK的GenFramebuffers函数。在本机OpenGL中,此函数需要生成许多帧缓冲区名称,并指向将存储名称的int指针。但OpenTK变体需要多个名称来生成单个输出Int32参数。

以下是OpenTK中函数的源代码:

    public static void GenFramebuffers(Int32 n, out Int32 framebuffers)
    {
        unsafe
        {
            fixed (Int32* framebuffers_ptr = &framebuffers)
            {
                Delegates.glGenFramebuffers((Int32)n, (UInt32*)framebuffers_ptr);
                framebuffers = *framebuffers_ptr;
            }
        }
    }

据我所知,如果将除1之外的任何内容指定为n,它将覆盖内存。为了确保,我实际上尝试使用n = 2,实际上它写了我作为out参数传递的Int32加上一个恰好在内存之后的Int32。

这不是OpenTK中唯一受影响的功能,所有genXXX功能都是这样。

我在这里疯了还是OpenTK严重受损?

1 个答案:

答案 0 :(得分:1)

我认为这是内部功能。 OpenTK在GL类中具有此功能以生成单帧缓冲:

    public static int GenFramebuffer()
    {
        int id;
        GenFramebuffers(1, out id);
        return id;
    }

对于数组类型参数,OpenTK具有以下功能:

void GenFramebuffers(Int32 n, [OutAttribute] Int32[] framebuffers)
unsafe void GenFramebuffers(Int32 n, [OutAttribute] Int32* framebuffers)

但我相信你也可以使用你提到的功能:

int[] arr = new int[15];
GenFramebuffers(10, out arr[5]); // will fill 10 starting with index 5