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);
我正在尝试使用 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);