OpenTK将深度缓冲区读取到数组



我正在尝试读取深度缓冲区,并使用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); 

最新更新