我正在尝试使用来自GenFramebuffers的OpenTK函数。在本机OpenGL中,此函数需要生成许多帧缓冲区名称,并需要一个指向将存储名称的int的指针。但是OpenTK变量需要一些名称来生成和一个 out 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真的坏了?
发布于 2012-06-29 22:40:45
我认为这是内部功能。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 5https://stackoverflow.com/questions/11269504
复制相似问题