glCopyPixels() 不返回选定的缓冲区像素
glCopyPixels() is not returning the selected buffer pixels
我正在尝试将前台缓冲区复制到后台缓冲区,我还需要将后台缓冲区复制到 aux0 或 aux1 缓冲区,但我无法让它工作。我得到的只是一份空白副本,而不是像素。我在交换缓冲区后立即执行此操作:SwapBuffers(glDeviceContext);
这是将像素放入另一个缓冲区的代码:
GLint m_viewport[4];
glGetIntegerv(GL_VIEWPORT, m_viewport);
glReadBuffer(GL_FRONT);
glDrawBuffer(GL_BACK);
glCopyPixels(0, 0, m_viewport[2], m_viewport[3], GL_COLOR);
而且我检查过:
glGetError()) != GL_NO_ERROR
到目前为止没有错误。但结果是空白。如果我在 SwapBuffers(glDeviceContext) 之后再次绘制到后台缓冲区,我会得到想要的结果,但这意味着我必须绘制两次。我也希望能够将整个缓冲区复制到系统菜单的AUX缓冲区中,这样我就有了整个事情的背景。
这是一个简短的测试代码:
GLint m_viewport[4];
glGetIntegerv(GL_VIEWPORT, m_viewport);
glReadBuffer(GL_BACK);
glDrawBuffer(GL_AUX2);
glCopyPixels(0, 0, m_viewport[2], m_viewport[3], GL_COLOR);
SwapBuffers(glDeviceContext);
glReadBuffer(GL_AUX2);
glDrawBuffer(GL_BACK);
glCopyPixels(0, 0, m_viewport[2], m_viewport[3], GL_COLOR);
SwapBuffers(glDeviceContext);
我建议不要使用 glCopyPixels
,而是使用帧缓冲区对象并使用 glBlitFrameBuffer
或将带纹理的四边形绘制到后台缓冲区,而不是将前台缓冲区复制到后台缓冲区。通常,您应该将前缓冲区和后缓冲区都视为不可靠的,因为内容可能随时被破坏。本质上,如果 window 中的像素没有通过像素所有权测试,那么该位置的前缓冲区和后缓冲区都会被丢弃。
我正在尝试将前台缓冲区复制到后台缓冲区,我还需要将后台缓冲区复制到 aux0 或 aux1 缓冲区,但我无法让它工作。我得到的只是一份空白副本,而不是像素。我在交换缓冲区后立即执行此操作:SwapBuffers(glDeviceContext);
这是将像素放入另一个缓冲区的代码:
GLint m_viewport[4];
glGetIntegerv(GL_VIEWPORT, m_viewport);
glReadBuffer(GL_FRONT);
glDrawBuffer(GL_BACK);
glCopyPixels(0, 0, m_viewport[2], m_viewport[3], GL_COLOR);
而且我检查过:
glGetError()) != GL_NO_ERROR
到目前为止没有错误。但结果是空白。如果我在 SwapBuffers(glDeviceContext) 之后再次绘制到后台缓冲区,我会得到想要的结果,但这意味着我必须绘制两次。我也希望能够将整个缓冲区复制到系统菜单的AUX缓冲区中,这样我就有了整个事情的背景。
这是一个简短的测试代码:
GLint m_viewport[4];
glGetIntegerv(GL_VIEWPORT, m_viewport);
glReadBuffer(GL_BACK);
glDrawBuffer(GL_AUX2);
glCopyPixels(0, 0, m_viewport[2], m_viewport[3], GL_COLOR);
SwapBuffers(glDeviceContext);
glReadBuffer(GL_AUX2);
glDrawBuffer(GL_BACK);
glCopyPixels(0, 0, m_viewport[2], m_viewport[3], GL_COLOR);
SwapBuffers(glDeviceContext);
我建议不要使用 glCopyPixels
,而是使用帧缓冲区对象并使用 glBlitFrameBuffer
或将带纹理的四边形绘制到后台缓冲区,而不是将前台缓冲区复制到后台缓冲区。通常,您应该将前缓冲区和后缓冲区都视为不可靠的,因为内容可能随时被破坏。本质上,如果 window 中的像素没有通过像素所有权测试,那么该位置的前缓冲区和后缓冲区都会被丢弃。