Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GTK+;OpenGL库在单个X服务器上协作吗?_Opengl_User Interface_Gtk - Fatal编程技术网

GTK+;OpenGL库在单个X服务器上协作吗?

GTK+;OpenGL库在单个X服务器上协作吗?,opengl,user-interface,gtk,Opengl,User Interface,Gtk,图形用户界面将神秘的力学隐藏在其幕后。它在一个屏幕上混合了2D和3D环境,并允许无缝地组合这两个截然不同的世界。但它们实际上是以何种方式和在何种层次上交错的呢 实践表明,OpenGL上下文可以嵌入到2D小部件库中,因此整个2D界面都可以用OpenGL支持。此外,一些应用程序可能会探索硬件加速,而其他应用程序则不会(在同一屏幕上渲染时)。图形卡是否“知道”屏幕上的2D和3D区域,并且窗口管理器是否创建了一个有凝聚力的前端。。。当滚动网页或在屏幕上移动视频播放器时,可以注意到加速窗口(3D、视频)“

图形用户界面将神秘的力学隐藏在其幕后。它在一个屏幕上混合了2D和3D环境,并允许无缝地组合这两个截然不同的世界。但它们实际上是以何种方式和在何种层次上交错的呢

实践表明,OpenGL上下文可以嵌入到2D小部件库中,因此整个2D界面都可以用OpenGL支持。此外,一些应用程序可能会探索硬件加速,而其他应用程序则不会(在同一屏幕上渲染时)。图形卡是否“知道”屏幕上的2D和3D区域,并且窗口管理器是否创建了一个有凝聚力的前端。。。当滚动网页或在屏幕上移动视频播放器时,可以注意到加速窗口(3D、视频)“跳跃”以适应2D界面

这个问题似乎很琐碎,但我还没有遇到任何人能给我一个全面的答案。这是一个答案,它可以让我将OpenGL上下文嵌入GTK+应用程序中,并理解其工作原理。我尝试过GtkGlExt和GLUT,但我想深入理解这个主题,并作为学术项目的一部分编写自己的解决方案。我想知道X、GLX、GTK、OpenGL和windowmanager之间的关系,以及如何探索这个库网络来有意识地编程


我不希望有人会在这里写论文,但如果有任何关于这个主题的指示、建议或文章链接,我将不胜感激。

你想得太多太复杂了。GTK+或Qt之类的工具包在某些东西上添加了相当多的抽象层,这实际上相当简单:系统的图形设备由一个处理器和一些可以操作的内存组成。在最简单的情况下,处理器是常规系统CPU,内存是普通系统内存。不过,现代计算机的特点是有一个专用图形处理器(GPU),它有自己的高带宽内存

内存保存帧缓冲区。从逻辑上讲,帧缓冲区是一个2D值数组。GPU可以通过编程以某种方式处理帧缓冲区中的值。可用于绘制帧缓冲区的。显示图片的监视器连接到一个特殊的电路,该电路连续地将内存中某个帧缓冲区的数据馈送到屏幕(通常称为RAMDAC或CRTC)。所以在GPU的内存中有一个直接进入屏幕的帧缓冲区。如果你在那里画画,东西就会出现在屏幕上

像X11服务器这样的程序可以加载驱动程序,这些驱动程序“知道”如何对GPU编程以绘制图形原语。X11本身定义了某些图形原语,扩展模块可以添加更多的图形原语。X11本身允许将GPU内存上的帧缓冲区分隔为称为可绘制的逻辑区域。屏幕帧缓冲区上的可绘制内容称为窗口。由于逻辑窗口可以重叠,X服务器还管理Z堆栈,它使用Z堆栈对窗口进行排序以进行重画。每当客户机想要绘制到某个X11服务器将告诉GPU的窗口时,绘制操作将只修改帧缓冲区中的那些像素,其中绘制到的窗口是可见的(这称为“像素所有权测试”)。X11服务器还将创建不属于屏幕帧缓冲区内存区域的可绘制内容(即帧缓冲区)。在X11术语中,这些被称为PBuffers或Pixmaps(也有一个特殊的扩展,可以将窗口移出屏幕)

然而,所有这些可拖动的都只是记忆。从技术上讲,这些都是可以用来画东西的画布。这就是所谓的“图形原语”。X11本身提供了一个特定的集合,名为X core。还有一个事实上的标准扩展名为XRender,它提供了X核心中没有的原语。但是,X11 core和XRender都不提供可以生成3D图形印象的图形原语。还有另一个扩展名为GLX,它向X11服务器传授另一组图形原语,即OpenGL形式

然而,X core、XRender和GLX/OpenGL都是不同的笔、画笔和铅笔,它们都在同一种画布上运行,即X11管理的简单帧缓冲区


那么像Qt或GTK+这样的工具包又是什么呢?嗯,他们使用X11和它提供的图形原语来实际绘制控件,比如按钮、菜单和类似的东西,而X11不知道这些东西。

你想得太多太复杂了。GTK+或Qt之类的工具包在某些东西上添加了相当多的抽象层,这实际上相当简单:系统的图形设备由一个处理器和一些可以操作的内存组成。在最简单的情况下,处理器是常规系统CPU,内存是普通系统内存。不过,现代计算机的特点是有一个专用图形处理器(GPU),它有自己的高带宽内存

内存保存帧缓冲区。从逻辑上讲,帧缓冲区是一个2D值数组。GPU可以通过编程以某种方式处理帧缓冲区中的值。可用于绘制帧缓冲区的。显示图片的监视器连接到一个特殊的电路,该电路连续地将内存中某个帧缓冲区的数据馈送到屏幕(通常称为RAMDAC或CRTC)。所以在GPU的内存中有一个直接进入屏幕的帧缓冲区。如果你在那里画画,东西就会出现在屏幕上

像X11服务器这样的程序可以加载驱动程序,这些驱动程序“知道”如何对GPU编程以绘制图形原语。X11本身定义了某些图形原语,扩展模块可以添加更多的图形原语。X11本身允许将GPU内存上的帧缓冲区分隔为称为可绘制的逻辑区域。屏幕帧缓冲区上的可绘制内容称为窗口。因为逻辑窗口可以重叠