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