0

我一直在使用一些跨平台的 GUI 库(例如 FLTK、wxWidgets、GTK++),但是我觉得没有一个能满足我的需求,因为我想创建一个无论平台如何看起来都一样的东西(我知道会有人们反对在平台上构建没有原生外观的 GUI,但这不是这里的问题)。为了构建我的控件,我通常依赖于库提供的基本形状,并将所有东西绑定和编码在一起......

所以我决定试一试,为 2D GUI 编程做一些 opengl(因为它仍然是跨平台的。考虑到这一点,我不禁注意到我通常使用 wxWidgets 和 FLTK 编写的应用程序平均 RAM 消耗为 1/2MB,而具有简单背景的非常基本的 openGL 窗口的范围为 6 到 9 MB。

这让我想到了这个线程的实际问题,我认为屏幕的所有渲染都是使用 opengl/direct(在幕后)进行的。

有人可以向我解释或链接一些文章,让我了解这些事情的实际工作原理吗?

谢谢阅读!

4

2 回答 2

0

您的问题非常含糊,但您似乎在问为什么您的 GL 应用程序比基本的 GUI 窗口占用更多的内存。

这是因为它是一个 OpenGL 应用程序。这意味着它必须存储使 OpenGL 工作所需的所有机制。这意味着它需要一个大尺寸的帧缓冲区:后台缓冲区、z 缓冲区等。它需要大量的样板文件才能运行。

真的,我不会担心的。这是每个应用程序都会做的事情。

于 2012-03-04T17:47:08.797 回答
0

这些多平台工具包通常支持相当多的绘图后端。尽管某些工具包支持 OpenGL 作为其后端,但默认值通常是“本机”后端。

看看例如。在Qt。在 Windows 上,它使用 GDI 为其本机后端绘图。我认为在 linux 上它使用 XRender。在 Symbian 和 Mac 上也是如此。Qt 也有自己的软件光栅化器。当然还有一个 OpenGL 后端。

那么,为什么使用这些 GUI 工具包的应用程序可以比简单的 OpenGL 应用程序占用更少的内存呢?如果工具包使用“本机”后端,则所有内容都已加载到内存中,因为很可能所有可见的 GUI 都使用相同的绘图 API。本机 API 也可以仅使用一个缓冲区来表示所有应用程序都可以在其中绘制的整个屏幕。

但是,当使用 OpenGL 时,您有自己的缓冲区来表示应用程序窗口。更不用说一个 OpenGL 应用程序通常有几个帧缓冲区,如 z-buffer、stencil 缓冲区、后台缓冲区,它们对于 2D 绘图不是必需的,但它们占用一些空间(即使它可能是显卡内存中的空间)。最后,在使用 OpenGL 时,可能还没有加载必要的库。

于 2012-03-04T18:14:15.570 回答