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

Posted

技术标签:

【中文标题】是否可以仅使用 OpenGL 确定默认帧缓冲区的大小?【英文标题】:Is it possible to determine the size of the default framebuffer using OpenGL only? 【发布时间】:2015-12-06 14:07:25 【问题描述】:

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

在我的渲染系统中,我想提供将视口和剪刀/剪裁区域重置为当前绑定的渲染目标大小的功能(无论是 OpenGL 帧缓冲区、Direct3D RenderTarget 还是默认的后缓冲区)必须让程序员跟踪它,而不必依赖窗口子系统/另一个库或编写系统相关代码。

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

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

但是,没有给出明确的答案。关于获取视口/剪刀区域的宽度/高度的答案只有在窗口永远不会改变的情况下才有效,这很可能在我的应用程序中,而另一个答案将不起作用,因为“默认”帧缓冲区不是实际的帧缓冲区对象,因此不能这样查询(如果评论者是正确的)

那么,是否有任何方法可以单独使用 OpenGL 3.3 动态确定默认帧缓冲区/后备缓冲区的大小,还是我需要依赖另一个子系统/编写平台相关代码?

【问题讨论】:

【参考方案1】:

需要确定的答案吗?得出的结论性答案:否。

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

默认的帧缓冲区归窗口所有; OpenGL 默认帧缓冲区对象只是一种绘制方式。

【讨论】:

感谢您迅速而果断的回答!我也很害怕,所以在这种情况下,我可能会把它留给用户。另外我只想说,每当我需要 GL 标头时,我都会使用 glLoadGen,感谢您创建了如此出色的工具!

以上是关于是否可以仅使用 OpenGL 确定默认帧缓冲区的大小?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL学习脚印: 帧缓冲对象(Frame Buffer Object)

是否可以在 opengl 中从 2 个不同的线程渲染 2 个不同的帧缓冲区对象?

如何从 OpenGL 中的帧缓冲区纹理中采样像素?

计算机图形学(OPENGL):帧缓冲

使用 Android 上的 OpenGL ES 2.0,在帧缓冲区上渲染时是不是可以保留多重采样?

将负值混合到帧缓冲区 0 opengl