如何获取/设置默认帧缓冲区的宽度和高度?

Posted

技术标签:

【中文标题】如何获取/设置默认帧缓冲区的宽度和高度?【英文标题】:How to get/set the width and height of the default framebuffer? 【发布时间】:2015-04-21 06:51:26 【问题描述】:

我想知道我的默认帧缓冲区的尺寸。 我将视口设置为特定值不会影响/设置帧缓冲区的尺寸。 对此有任何 GL 要求吗?

【问题讨论】:

通常是窗口的大小。 【参考方案1】:

您无法使用 OpenGL 调用设置默认帧缓冲区的大小。它是窗口的大小,由窗口系统接口控制(例如 android 上的 EGL)。如果你想控制它,这必须作为初始窗口/表面/上下文设置的一部分发生,其中细节取决于平台。

我不知道专门获取默认帧缓冲区大小的调用。但是你可以很容易地间接获得它。视口和剪刀矩形的默认值都对应于窗口的大小。因此,如果您在修改它们之前获得任何这些,它将为您提供窗口的大小。

来自规范中的第 2.12.1 节“控制视口”:

在初始状态下,w 和 h 分别设置为 GL 要在其中进行渲染的窗口的宽度和高度。

来自规范中的第 4.1.2 节“剪刀测试”:

在初始状态left = bottom = 0;宽度和高度由 GL 窗口的大小决定。

因此,您可以使用以下任一方法获取默认帧缓冲区大小:

GLint dims[4] = 0;
glGetIntegerv(GL_VIEWPORT, dims);
GLint fbWidth = dims[2];
GLint fbHeight = dims[3];

或:

GLint dims[4] = 0;
glGetIntegerv(GL_SCISSOR_BOX, dims);
GLint fbWidth = dims[2];
GLint fbHeight = dims[3];

【讨论】:

我从glGetIntegerv 得到四个零,这是为什么呢?我的窗口实际上是640*480

以上是关于如何获取/设置默认帧缓冲区的宽度和高度?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Linux 帧缓冲区获取 RGB 像素值?

webGL - 如何在帧缓冲区旁边设置模板缓冲区并使用它?

无法将简单的帧缓冲区渲染到四边形并显示

帧缓冲区大小和视口关系

如何在 iPhone OpenGL ES 2.0 中在渲染和呈现帧缓冲区之间切换?

如何使用 TouchGFX 帧缓冲区仅镜像 x 轴