繁体   English   中英

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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM