Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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
Linux X11 GUI性能_Linux_X11_Xlib - Fatal编程技术网

Linux X11 GUI性能

Linux X11 GUI性能,linux,x11,xlib,Linux,X11,Xlib,我正在为Linux和Windows开发一个可移植的GUI工具包,遇到了一些性能问题。在一些系统上(比如我的基于臭名昭著的Intel GMA 3650的上网本),安装的驱动程序对我的影响很大 但矛盾的是,当安装了回退VESA驱动程序时,我的代码的性能比专用专用专用驱动程序的性能要高得多 另一方面,使用专用驱动程序,正如预期的那样计算机的性能非常好。硬件加速工作正常,高清视频播放没有问题,只有我的代码会以这种奇怪的反向方式受到影响 我的代码使用诸如Xlib、Xft、pthreads等公共库 Wind

我正在为Linux和Windows开发一个可移植的GUI工具包,遇到了一些性能问题。在一些系统上(比如我的基于臭名昭著的Intel GMA 3650的上网本),安装的驱动程序对我的影响很大

但矛盾的是,当安装了回退VESA驱动程序时,我的代码的性能比专用专用专用驱动程序的性能要高得多

另一方面,使用专用驱动程序,正如预期的那样计算机的性能非常好。硬件加速工作正常,高清视频播放没有问题,只有我的代码会以这种奇怪的反向方式受到影响

我的代码使用诸如Xlib、Xft、pthreads等公共库

Windows端口(使用WinApi)运行速度很快,没有任何问题。即使是在酒里。另一个悖论是,为Windows编译并在WINE中运行的同一个程序比Linux编译的程序要快得多

造成这种影响的原因是什么?在哪里挖掘以修复它

源代码存储库是

一个测试示例位于
trunk/freshlib/TestFreshLib.fpr
(对于普通FASM编译
freshlib/test\u code0/TestLib.asm

这是一个可移植的示例,也可以为Windows和Linux编译

更新1:经过一些思考和代码探索,我有一个假设。我使用两种不同的方法在窗口上绘制图形:

  • 使用XLib绘图函数绘制直线和矩形
  • 使用Xft库绘制文本 我正在测试的控件使用双缓冲,其中图像缓冲区是服务器端的pixmap

    但是IIRC、Xft在客户端绘制,然后将图像作为位图图像发送到X服务器,而XLib直接在服务器端绘制


    这两种方法(以及与硬件加速的某种连接)之间是否可能存在冲突,从而导致性能下降?

    尽管可以自动降低性能(苹果设计的Opencl使用XQuartz API实现此目的),但X库并不是为使用硬件加速而设计的。众所周知,OpenGL和directX在3D环境中都能做到这一点,而这通常可以在游戏中找到

    但也可以将其用于2D。Direct3D旨在使用多边形Direct2D用于平板图形。在一开始,OpenGl的设计是为了保持通用性:因此您有许多功能可以用于硬件加速图形

    主要的X11实现包括GLX和镓。
    我从来没有写过使用这些API的东西,但我只知道某些程序确实通过这种方式加速了它们的绘图

    使用回退VESA观察到的性能优势可能有以下解释:
    专有驱动程序执行额外的检查(例如,查看是否要求它使用硬件加速;然后因为它是常规Xlib,所以大部分时间不会加速),而后备驱动程序不能使用硬件加速,只能使用CPU而不是GPU。

    这听起来非常不可思议。你能将问题隔离到SSCCE中吗?什么是SSCCE?注意,我不是C/C++甚至Linux/X11编程方面的专家。:)啊,我得到了“简短、独立、正确、举例”。但不幸的是,没有。我当然可以向您指出存储库——它是一个开放源代码,但是有一大堆文件,我不知道在哪里搜索这个问题。(它是用汇编语言编写的:))一个repo链接应该可以,我会试着测试它。@n.m.-我在问题本身上放了一个指向存储库的链接。如果您在编译方面有问题,请询问。