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
User interface GUI输出如何从应用程序级工作到硬件级?_User Interface_Opengl_Graphics_Gtk_Xserver - Fatal编程技术网

User interface GUI输出如何从应用程序级工作到硬件级?

User interface GUI输出如何从应用程序级工作到硬件级?,user-interface,opengl,graphics,gtk,xserver,User Interface,Opengl,Graphics,Gtk,Xserver,我正在学习GUI编程并做了一些研究。我现在不是什么都清楚。 如果我使用GTK+作为工具包,它如何与图形卡通信 在Linux系统上,我想它应该是GTK-->X服务器--(OpenGL)-->图形卡。 是这样吗 我读到一些GUI直接绘制OpenGL(例如Blender3D),那么其他应用程序如何绘制GUI呢 如果图形卡的API(据我所知)只有Direct3D和OpenGL,那么软件渲染和硬件加速之间的区别是什么 进行“软件渲染”的软件能否直接写入图形卡的帧缓冲区,从而使OpenGL不受影响 PS:很

我正在学习GUI编程并做了一些研究。我现在不是什么都清楚。 如果我使用GTK+作为工具包,它如何与图形卡通信

在Linux系统上,我想它应该是GTK-->X服务器--(OpenGL)-->图形卡。 是这样吗

我读到一些GUI直接绘制OpenGL(例如Blender3D),那么其他应用程序如何绘制GUI呢

如果图形卡的API(据我所知)只有Direct3D和OpenGL,那么软件渲染和硬件加速之间的区别是什么

进行“软件渲染”的软件能否直接写入图形卡的帧缓冲区,从而使OpenGL不受影响

PS:很抱歉问了这么多问题,但我真的不明白这是怎么回事,谢谢你的回答:)

在Linux系统上,我想它应该是GTK-->X服务器--(OpenGL)-->图形卡。是这样吗

不,Linux上的GTK+运行正常

                                              /-[ if direct context ]---\
                     /--> OpenGL >-+---------/                           \
                    /              \-> GLX -+--------------\              \
                   /                         \              \              \
GTK+ -+-> cairo >-+---> XRender >--------+----+-> Xlib/xcb >-+-> X server >-+-> Kernel Module >-> GPU
       \           \–-> pixmap buffer >–/
        \                              /
         \―---------------------------/
我读到一些GUI直接绘制OpenGL(例如Blender3D),那么其他应用程序如何绘制GUI呢

它只是一个“搅拌器”(没有拖尾3D)。Blender的GUI工具包使用OpenGL作为其唯一的后端,是的。但是GUI不是直接使用OpenGL绘制的,这将是非常麻烦的(使用OpenGL调用绘制每个按钮。Blender有自己的工具箱。GTK+是另一个工具箱,但与Blender无关(事实上,我最喜欢的一个项目是提取Blender的GUI工具箱,以便可以在独立项目中使用)

像GTK+和Qt这样的工具包是为最大的可移植性而设计的。Blender有幸知道,将有OpenGL可用。为GTK+或Qt开发的应用程序可能能够在不支持3D的系统上运行,因此GTK+和Qt的设计允许在多个后端上运行。现在版本3中的GTK+使用Cairo图形引擎作为图形引擎Cairo也有它自己的后端,即一个软件光栅化器,将绘图绘制成像素图像,或将绘图命令代理到底层图形体系结构。在Linux上的Cairo中,这可能是OpenGL或X11(核心和XRender协议扩展)

如果图形卡的API(据我所知)只有Direct3D和OpenGL,那么软件渲染和硬件加速之间的区别是什么

OpenGL和Direct3D都不与图形卡对话。它们与图形卡的驱动程序对话。因此,您可以选择与自己的驱动程序对话,绕过OpenGL和Direct3D。但您为什么要这样做?这很无聊

此外,在Windows上,还有用于绘图的GDI和/或WPF(Windows演示文稿基础)以及Direct2D

在Linux上,您可以使用X11内核和XRender扩展协议来绘制漂亮的图片

另一个正在崛起的API是OpenVG,它旨在标准化所有的2D绘图API。至少在Linux中,OpenGL和OpenVG已被选为长期唯一可用的抽象绘图API,带有一些用于管理帧缓冲区和用户输入的窗口系统。Wayland正在开发中(我完全不喜欢哪个设计)和X11,我认为它有更好的设计(它是一个面向网络的系统,允许分布式执行,我认为在将来非常重要),但是需要对一些“X12”进行彻底的检修。–清除旧的积垢,使其在联系人颜色空间中运行,使连接可转换(这样您就可以在X服务器之间迁移客户端,从而通过将所有连接移动到某个shadow X服务器,而不是试图使用锁定屏幕保护程序阻止访问,从而实现更优雅的X会话锁定方式)

进行“软件渲染”的软件能否直接写入图形卡的帧缓冲区,从而使OpenGL不受影响

不是在现代操作系统上。但是,操作系统可能会通过一些帧缓冲区API(/dev/fb0,Linux上)让您抽象地访问图形卡。但是帧缓冲区是非托管的,因此,如果有X服务器或Wayland运行,则其中任何一个都将负责管理FB,这与您无关

进行“软件渲染”的软件能否直接写入图形卡的帧缓冲区,从而使OpenGL不受影响

不完全是,或者更准确地说:取决于驱动程序。显示系统(如XServer(或Windows和MacOS等效)不使用API,而是描述API。具体称为驱动程序模型(或在XServer情况下称为XAA、EXA、UXA和DRI等多个模型之一),显示驱动程序必须满足该模型

这些模型中未定义的所有操作都必须在“软件”中完成,并在CPU上进行计算。此外,一些由模型定义的操作也可能由驱动程序在CPU上进行计算


OpenGL曾经是与这些模型完全分离的标准。图形驱动程序根本不需要实现OpenGL就可以被操作系统使用。但是随着3D图形的持续集成和现代操作系统中更复杂的合成,驱动程序模型已经开始依赖与OpenGL和Direct3D相同的范例。例如WDDM(Windows显示驱动程序型号)完全需要Direct3D 9支持。

软件加速和硬件加速的区别是什么?我是GUI开发的初学者,你能给我介绍一本从上面到硬件的书吗?最后,据我所知,如果我使用C语言的库,那么库中的函数必须能够使用ultimately,分解到C中的最低级别。我的意思是,如果我在C中使用
scanf
。它最终将使用C中存在的任何其他函数,并且一步一步地,所有内容最终都归结为我们在C中可以得到的抽象层的最低级别。我想称为k的是,如果我使用us
cairo
库并使用它的函数。我可以用它来绘制gui吗使用任何额外的l