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

abh*_*ale 4 opengl framebuffer opengl-es-2.0

我想知道我的默认帧缓冲区的维度.我将设置视图端口读取到特定值不会影响/设置帧缓冲区的尺寸.是否有GL呼叫?

Ret*_*adi 6

您无法使用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];
Run Code Online (Sandbox Code Playgroud)

要么:

GLint dims[4] = {0};
glGetIntegerv(GL_SCISSOR_BOX, dims);
GLint fbWidth = dims[2];
GLint fbHeight = dims[3];
Run Code Online (Sandbox Code Playgroud)