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

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

【问题讨论】:

  • 通常是窗口的大小。

标签: opengl opengl-es-2.0 framebuffer


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多