跨平台GUI - 渲染过程

时间:2012-03-04 17:21:21

标签: opengl cross-platform wxwidgets fltk

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

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

这让我想到了这个主题的实际问题, 我认为屏幕的所有渲染都是使用opengl / direct(在封面下)。

有人可以向我解释或链接某些文章,这些文章可以让我对这些事情的实际运作方式有所了解吗?

感谢阅读!

2 个答案:

答案 0 :(得分:0)

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

这是因为它是一个OpenGL应用程序。这意味着它必须存储使OpenGL工作所需的所有机器。这意味着它需要一个大小的帧缓冲区:后台缓冲区,z缓冲区等。它需要很多样板才能运行。

真的,我不担心。这是每个应用程序都能做到的。

答案 1 :(得分:0)

这些多平台工具包通常支持相当多的后端来完成绘图。尽管有些工具包支持OpenGL作为后端,但默认情况下通常是“本机”后端。

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

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

然而,当使用OpenGL时,您拥有自己的缓冲区,代表应用程序窗口。更不用说OpenGL应用程序通常有几个帧缓冲区,比如z缓冲区,模板缓冲区,后台缓冲区,这对于2D绘图来说并不是必不可少的,但是它们需要一些空间(即使它可能是显卡内存中的空间)。最后,使用OpenGL时,可能尚未加载必要的库。