我正在尝试使用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严重受损?
答案 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