OpenTK 读取深度缓冲区到数组

OpenTK read depth buffer to array

我正在尝试使用 C# 中的 openTK 读取深度缓冲区并将其存储到数组中。

到目前为止,这是我的代码:

    //Get depth buffer
    int[] depthBufferID = new int[1];
    GL.GenBuffers(1, depthBufferID);
    GL.BindBuffer(BufferTarget.PixelPackBuffer, depthBufferID[0]);
    GL.BufferData(BufferTarget.PixelPackBuffer, glControlGLRender.Width * 
        glControlGLRender.Height * sizeof(Single), IntPtr.Zero, BufferUsageHint.StreamRead);
    IntPtr depthBufferPTR = GL.MapBuffer(BufferTarget.PixelPackBuffer, 
        BufferAccess.ReadOnly);
    GL.ReadPixels(0, 0, glControlGLRender.Width, glControlGLRender.Height, 
        PixelFormat.DepthComponent, PixelType.Float, depthBufferPTR);


    float[] myPixels = new float[glControlGLRender.Width * glControlGLRender.Height];
    Marshal.Copy(depthBufferPTR, myPixels, 0, glControlGLRender.Width * 
        glControlGLRender.Height);

    this.glControlGLRender.SwapBuffers();

它不会产生任何错误,但它也不起作用。输出是一个数组 (myPixels),其中所有值为 0。

那么如何使用PixelPackBuffer读取openTK中的深度缓冲区呢?

谢谢

我同时解决了。我非常接近我的代码。 正确的代码是这样的:

//Get depth buffer
int[] depthBufferID = new int[1];
GL.GenBuffers(1, depthBufferID);
GL.BindBuffer(BufferTarget.PixelPackBuffer, depthBufferID[0]);
GL.BufferData(BufferTarget.PixelPackBuffer, glControlGLRender.Width * glControlGLRender.Height * sizeof(float), IntPtr.Zero, BufferUsageHint.StreamRead);
GL.ReadPixels(0, 0, glControlGLRender.Width, glControlGLRender.Height, PixelFormat.DepthComponent, PixelType.Float, IntPtr.Zero);
IntPtr depthBufferPTR = GL.MapBuffer(BufferTarget.PixelPackBuffer, BufferAccess.ReadOnly);

float[] myPixels = new float[glControlGLRender.Width * glControlGLRender.Height];
Marshal.Copy(depthBufferPTR, myPixels, 0, glControlGLRender.Width * glControlGLRender.Height);