是否可以仅使用 OpenGL 确定默认帧缓冲区的大小?

Is it possible to determine the size of the default framebuffer using OpenGL only?

我目前正在为我打算开发的游戏开发游戏 engine/framework。我正在将系统设计为通过抽象 类 和依赖注入尽可能地解耦。理想情况下,我的目标是让每个子系统不依赖于引擎的其他部分。

在我的渲染系统中,我想提供将视口和 scissor/clipping 区域重置为当前渲染绑定目标大小的功能(无论是 OpenGL FrameBuffer、Direct3D RenderTarget 还是默认后备缓冲区),而无需让程序员跟踪它,也不必依赖 windowing sub-system/another 库或编写系统相关代码。

目前我正在编写渲染子系统的 OpenGL 实现,我想检查是否可以单独使用 OpenGL 3.3 函数调用来获取 backbuffer/default 帧缓冲区的大小。我以前使用 GLX/WGL 编写代码来执行此操作,但我想避免这种情况。

我遇到了之前提出的这个问题: How to get/set the width and height of the default framebuffer?

然而,并没有给出确凿的答复。关于获得 viewport/scissor 区域的 width/height 的答案只有在 window 永远不会改变的情况下才有效,这在我的应用程序中很可能是这样,而另一个答案将不起作用,因为'default' framebuffer 不是实际的 framebuffer 对象,因此不能这样查询(如果评论者是正确的)

那么,是否有任何方法可以单独使用 OpenGL 3.3 即时确定默认 framebuffer/backbuffer 的大小,或者我是否需要依赖另一个 sub-system/write 平台相关代码?

需要结论性答案吗?结论性答复:否

OpenGL 4.5 及其以下的所有版本不提供查询默认帧缓冲区范围的方法。它也不提供控制其大小的方法。

默认的帧缓冲区属于window; OpenGL 默认的帧缓冲区对象只是一种绘制方法。