在帧缓冲区上绘画后重置 glViewport

Reset glViewport after painting on framebuffer

我正在大型 opengl 上作画 canvas。有时我需要在一些小的帧缓冲区(瓷砖)上绘制,然后返回到我的 canvas 上绘制。问题是,当我绘制帧缓冲区时,我显然更改了上下文的视口,所以当我返回 canvas 上绘制时,显然需要修改视口。我正在寻找的是一种保存和恢复 glViewport 设置的方法。像这样的伪代码:

saveViewport();
drawFramebuffers(); // this change the viewport
restoreViewport();

这样的事情可能吗?

对于具有 GL_VIEWPORT_BIT 的兼容性上下文 glPushAttrib()/glPopAttrib() 将 save/restore 深度范围和视口状态。

除了@genpfault 的回答外,以下内容也有效:

// save viewport
GLint aiViewport[4];
glGetIntegerv(GL_VIEWPORT, aiViewport);

// do your stuff and then restore viewport
glViewport(aiViewport[0], aiViewport[1], (GLsizei)aiViewport[2], (GLsizei)aiViewport[3]);

这取自here