OpenTK GenFrameBuffers错误

6ljaweal  于 2022-10-18  发布在  其他
关注(0)|答案(1)|浏览(147)

我正在尝试使用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,并且实际上它写入了我作为输出参数传递的Int32,以及它后面恰好在内存中的一个Int32。
这不是OpenTK中唯一受影响的函数,所有的genXXX函数都是这样的。
我是疯了,还是OpenTK真的坏了?

velaa5lx

velaa5lx1#

我认为这是内部功能。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

相关问题