为什么 DirectFB 没有在 GNU/Linux 中得到更广泛的应用?是否存在 X11 中不存在的严重限制?

2024-03-13

据我了解,DirectFB为多种显卡提供硬件加速。此外,它比 X11 更小、更快,并且占用的内存更少。那么,为什么它没有比现在更主流呢?

我真正不确定的是:常见的 GTK+/Qt 程序是否需要移植到它?在 DirectFB 网站上,有一个将 Firefox 移植到其中的项目。如果 GTK+ 能够直接使用 DirectFB,为什么还需要这样做呢?我(可能是错误的)理解它的方式是,Firefox 应该输出到 GTK+,GTK+ 应该输出到 DirectFB,DirectFB 应该输出到硬件。如果我错了,请纠正我。


如果您强调 X 作为现代 Linux 系统上的开销来源,那么您可能没有找对地方。 X 是很久以前为计算机设计的,其功能远不如现代手机强大。

如果您查看“top”并看到 X 使用内存,则需要做很多工作才能计算出实际的 X 开销。有些内存映射不是“真实”内存,并且有些资源(例如大像素块)代表应用程序分配。最重要的是,顶部显示的 X 内存并不是人们想象的那样。

人们还听说 X 使用“网络”,并认为这将成为性能瓶颈。这里的“网络”指的是本地 UNIX 域套接字,它在现代 Linux 上的开销可以忽略不计。网络上会出现瓶颈的事情,有 X 扩展可以加快速度(共享内存像素图、DRI 等)。进程内线程不一定比 X 套接字更快,因为瓶颈更多地与协调访问同一硬件的多个线程或进程的固有问题有关,而不是与本地套接字的最小开销有关。

多进程设置有很多优点,例如更难崩溃。以 Google Chrome 为例,使用多个进程变得更加健壮 - 事实证明,也可以运行得更快。更少的流程并不一定意味着更现代。

使用 GTK 的应用程序无法透明地移植到 DirectFB 的原因有很多。对于 Firefox 来说,其一是有时它会直接使用 X。此外,一些独立于工具包的东西(例如浏览器插件接口)直接使用 X。例如,Flash 插件无法在 DirectFB 上运行。即使不直接使用 X 的应用程序通常也会假设存在正常的基于 X 的桌面环境(GNOME 等)。

替换 X 的另一个问题是驱动程序支持,两种更好的显卡(NVidia、ATI)都具有比免费驱动程序功能更强的专有驱动程序,并且这些专有驱动程序与 X 绑定。

当然还有迁移路径。如果您有数百个应用程序使用 X 并且 X 没有明显的最终用户缺点,那么没有人会切换到没有应用程序工作的东西。最有可能的是,这里的解决方案是在新窗口系统上运行无根 X 服务器,因此旧应用程序仍然可以运行。

老并不总是坏事。 X 是由聪明人精心设计的,这使得它能够不断发展和变化,并且在多年后仍然有效。

无论如何,总而言之,基本上从 X 切换过来需要付出大量的努力,它确实工作得很好,并且“工作得很好”从来没有适用于任何替代方案(至少如果你希望能够在上面运行大多数应用程序的话)大多数硬件)。

X 存在一些问题 - 例如无法进行原子屏幕更新,这是 Wayland 项目正在研究的问题 - 但大多数问题对于用户来说确实是装饰性的(例如非原子更新)或对于开发人员来说是装饰性的(旧的已弃用的扩展)等)。放弃 X 并神奇地拥有更小、更快的东西是不真实的。这主要是基于人们推测“旧”和“使用网络”一定是缓慢且臃肿的,但同样,X 是为非常糟糕的硬件设计的。我曾经在我的 386 上运行 X(和 Emacs!),大概有 8 兆 RAM 或类似的东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 DirectFB 没有在 GNU/Linux 中得到更广泛的应用?是否存在 X11 中不存在的严重限制? 的相关文章

  • 虚拟审判室设计

    作为我的硕士项目的一部分 我建议构建一个用于零售服装店的虚拟试用室应用程序 目前 它旨在直接在商店中使用 但也可能扩展到在线商店 该应用程序将通过在屏幕上的 3D 复制品上展示选定的服装 向客户展示所选服装的外观 它涉及3个步骤 评估客户
  • 使用 OCaml Graphics 实际更改文本大小

    我想知道如何在 OCaml 中设置文本大小 我试过Graphics set text size我想这应该可以达成交易 但无论我把set text size 200 or set text size 20并没有改变什么 Graphics se
  • 如何识别该图像中的矩形?

    我有一张带有水平线和垂直线的图像 事实上 这张图片是BBC网站转换成水平线和垂直线的 我的问题是我希望能够找到图像中的所有矩形 我想编写一个计算机程序来查找所有矩形 有谁知道如何做到这一点或提出有关如何开始的想法 作为一个人 这个任务对于我
  • 升级到 ubuntu 11.10 unity 后,monodevelop 中的 Gtk# 不再工作

    我有一些带有 GTK 用户界面的 monodevelop 程序 可以在 ubuntu 11 04 中顺利运行 无需统一 我已经统一升级到ubuntu 11 10 现在我收到以下错误 找不到类型或命名空间名称 Gtk 您是否缺少程序集引用 事
  • 如何使用 css 代码单独设置 gtk 小部件的样式

    在这之后GTK 将字体更改为旋转按钮 https stackoverflow com questions 47083294 gtk change font to spin button和这个为什么 CSS 样式没有应用于 GTK 代码 ht
  • 旋转相机与旋转场景点(仅该点,而不是整个场景)之间有什么不同?

    我认为旋转相机并拍摄场景照片与保持相机稳定并反向旋转场景会产生相同的结果 假设原始相机旋转矩阵为R1 旋转相机意味着我们应用另一个旋转矩阵 R12 因此 R2 R12 R1 是新的旋转矩阵 假设X是场景点的真实世界坐标 以反向方式旋转场景点
  • C#:绘制自己的条形图

    我正在尝试通过绘制一个简单的条形图C 但我从未尝试过 Graphics 和 Drawing 命名空间 我想生成一个 开始 和 结束 图形 然后以某种方式重复图像 以显示 长度 但我不知道如何做到这一点 如果您能指出正确的方向和 或您有示例代
  • mkbundle 和 GTK#

    我正在尝试使用 mkbundle 以便我可以分发 GTK 应用程序 而无需用户安装 NET Mono 或 GTK 我已经成功捆绑了一个使用 winforms 的应用程序 但由于某种原因 当我对 GTK 应用程序执行相同操作时 它无法工作 这
  • 在透明 JPanel 上绘画时留下痕迹

    我是一个相对较新的 Java 图形程序员 这是我正在尝试的一个简单程序 这是完整的代码 分为 3 个类 Class 1 import javax swing import java awt import java awt event pub
  • 获取任何给定字符的宽度(以像素为单位)

    我有一个非常棒的想法 但无法找出 NET Framework 中是否有任何类 任何版本 最好是 3 5 或 4 0 允许您传入字符 并获取该字符的宽度 以像素为单位 无论使用哪种字体 字体大小或字体装饰 有人可以指出我正确的方向吗 像这样的
  • LWJGL 窗口具有透明背景?

    我想创建一个没有 黑色背景 区域的窗口 但您可以看到任何其他打开的窗口等 也就是说 渲染场景并且仅渲染场景 不留框架 不留背景区域 我读过一种方法 该方法涉及渲染到隐藏的 OpenGL 窗口并将其缓冲在内存中 创建透明分层窗口以及从内存复制
  • 如何指定显示?

    当我通过 SSH 运行一些程序时 例如firefox 我收到一个错误 Error no display specified 我想打开许多显示器 仍然显示stdout每个程序的 最初的问题 如何指定显示以获得多显示节目 Pablo Santa
  • Java:如何在 ScrollPane 视口上绘制非滚动覆盖?

    我想使用 ScrollPane 在其视口中显示图像 并且在图像上覆盖网格 或框 或任何其他类型的注册 位置标记 我需要覆盖层在滚动时保持固定 这意味着图像似乎在覆盖层 下方 移动 我将以固定速率滚动视口中的视图以提供平滑的运动 而叠加层将提
  • 为什么这个简单的 C# 试用不起作用 [重复]

    这个问题在这里已经有答案了 这会产生条纹而不是点 为什么 我正在尝试绘制单个像素 还尝试了另一种方法 使用 fillrectangle 它也没有给出所需的结果 得到的是条形而不是点 protected override void OnPai
  • 有没有 Android Drawable 设计师?

    我想在我的 Android 应用程序中使用更多矢量图 提供图像并不像我希望的那样节省空间或可扩展 Android提供了一系列可绘制文件格式 http developer android com guide topics resources
  • 在 Mathematica 中使用图形进行渐变填充

    我如何使用以下内容创建Rectangle in Graphics Using Polygon 你可以 Graphics EdgeForm Black Polygon 0 0 3 0 3 1 0 1 VertexColors gt White
  • 在 C# 中使用鼠标单击在图片框上绘制线条

    我正在尝试制作一个程序 可以在图片框 http msdn microsoft com en us library system windows forms picturebox 28v vs 110 29 aspx使用鼠标单击要绘制线的起点
  • 使用 WinForms 绘制宽线时出现 OutOfMemoryException

    这个太疯狂了 我只画了几千条线OnPaint处理程序 没有问题 当pen Width lt 1 或者当屏幕上没有很多行时 好的 我画了一张比例尺地图 线宽随地图缩放 当我缩放一些地图时 我得到OutOfMemoryException WHY
  • 使用 xlib 将图像加载到窗口上

    我已经创建了窗口类 我想插入图像作为该窗口的背景 文件格式必须为 png 我使用magick 的XImage来加载图像 但不知道如何将其作为我的窗口的背景 知道怎么做吗 使用创建像素图 Pixmap XCreatePixmap displa
  • 用均匀的彩色表面替换颜色点

    这是我的数据和当前的绘图 require ggplot2 a rep c 2 5 10 15 20 30 40 50 75 100 each 7 b rep c 0 001 0 005 0 01 0 05 0 5 5 50 10 c c T

随机推荐

  • 何时抑制 PHP 中的错误

    我有一些可能已定义或未定义的变量 isLoggedIn布尔值 我正在尝试清除错误消息 我想知道是否有任何理由不应该使用错误抑制运算符 if isLoggedIn 或者我是否应该首先检查变量是否存在 if isset isLoggedIn a
  • javafx.scene.control.TableColumn 无法转换为 javafx.scene.control.TableColumn$CellDataFeatures

    我在填充 javafx tableview 时遇到问题 我目前正在开发一个基于 GUI 的事件管理工具 适用于大学 并且我一直在尝试填充 Tableview 列表 该列表应该位于边框窗格布局的中心 这是我的代码 它很长的想法 它的主窗口函数
  • C 中正弦函数的实现不起作用

    我尝试用 C 语言实现正弦函数 但得到了奇怪的结果 以下是我用来计算正弦的三个函数 define PI 3 14159265358979323846 define DEPTH 16 double sine long double long
  • 不支持混合类型

    请看一下下面的头文件 pragma once using namespace UsbLibrary ref class MissileLauncher public MissileLauncher void private Bytes us
  • 缩小名称和变量名称

    我知道缩小负责删除 空白字符 换行符 注释 有时还有块分隔符 不久前我读到它还负责缩短变量名称 但我一直认为这是混淆的一部分 我对吗 或者现在缩小库也包含这样的功能 好吧 由于缩小的目标是尽可能减少代码的大小 因此重命名变量是实现这一目标的
  • Angular CDK的OverlayModule,cdk-overlay-pane不会将位置设置为绝对?

    我正在使用 Angular 的 CDK 的 Overlay 模块 我只是找不到将position absolute添加到覆盖层的方法 该模块将收到一个top and a left与连接元素位置匹配的位置 但覆盖层不会接收到position
  • Pandas _metadata的DataFrame持久化错误

    我终于弄清楚如何使用 DataFrame 中的 metadata 一切正常 除了我无法将其持久化 例如 hdf5 或 json 我知道它有效 因为我复制框架 而 metadata 属性复制到 非 metadata 属性则不然 example
  • CakePHP-cakeDC搜索插件实现

    我目前正在尝试找出一种在我的应用程序中实现 cakeDC 搜索插件的方法 但我发现很难理解在我可以让它在我的应用程序中 很好地 工作之前需要完成的管道工作 需要考虑的事项 搜索必须是 实时搜索 检索到的记录需要分页 搜索将使用选定的条件 i
  • Fn 类型未实现 Size

    我想构建一个将列表分成两部分的函数 一个列表包含原始列表中满足特定谓词的元素 另一个列表包含所有不满足特定谓词的元素 以下是我的尝试 fn split filter
  • 除了 Hibernate Validator 的 @SafeHtml 之外,还有哪些替代方案来验证字符串?

    正如 JavaDocs 中所述 它将在未来版本中删除 是否有任何替代库可以通过注释类似地工作 让我们首先解释一下弃用的原因 由于这一限制 我们最近遇到了安全问题 CVE 这是由于我们实施中的一个错误 但它让我们意识到这是非常脆弱的 并且在安
  • Pandas:将列中的值与唯一值相加

    我有数据框 ID time coeff category 111 12 1 5 shop 111 15 1 5 shop 222 12 0 8 shop 222 18 0 8 shop 我需要得到 category unique users
  • Web 应用程序 - 显示月份中日期的滑块功能

    对于学校项目 我们必须构建一个网络应用程序 我将创建一些东西 让人们可以跟踪他们的课程 家庭作业和空闲时间 计划表 日历 我在这里听起来真的很蹩脚 但是嘿 我累了 英语不是我的母语 我将在 CodeIgniter 中处理 PHP 逻辑 并结
  • ssh2节点js sftp协议错误握手失败

    你好 我有一个小问题 我开发了一个带有节点js的脚本sftp客户端 它连接到sftp服务器并抓取一些文件 我用本地服务器测试了它的工作 但是当我尝试将它与生产服务器一起使用时 我收到了这个错误 错误 握手失败 没有匹配的密钥交换算法 我已经
  • 无法联系到会员

    这是我用于显示角色成员的代码 但是 当我为有很多成员的角色调用此命令时 它只返回我的名字 我该如何修复它 V12 let role if message mentions roles first message guild roles ca
  • 使用升压条件变量

    我正在设计一个异步记录器类 如下所示 但是 不确定我是否以正确的方式使用升压条件变量 有人可以对此发表评论吗 这里的processLogEntry方法是一个线程函数 我在这里使用boost void LogWriter stopThread
  • 当我更新我的 sqlite 核心数据存储时,如何避免出现“SQL 执行期间错误:约束失败”?

    我们的应用程序允许用户从 API 提供的列表中选择位置 该列表很少更新 并且仅通过添加项目来更新 因此应用程序不会每次都访问 API 而是在 Core Data sqlite 存储中提供快照 我们希望它定期更新列表 执行此操作的代码如下所示
  • gcc 不匹配标签选项给出“无法识别的命令行选项”

    我试图激活该选项 Wmismatched tags在 gcc 上 检测不一致的类 结构声明 这可能在使用前向声明时发生 但在 Ubuntu 上我得到 c error unrecognized command line option Wmis
  • “替换”功能示例

    我没有找到该项目的帮助页面replace函数从base包很helpful 最糟糕的是 它没有可以帮助理解其工作原理的示例 您能解释一下如何使用它吗 举一两个例子就太好了 如果您查看该函数 通过在控制台中输入其名称 您会发现它只是一个简单的函
  • 我想仅为特定资源运行 terraform

    运行 terraform 并等待需要很长时间 所以我想运行它来排除执行时间最长的rds 或者我只想运行 ec2 资源 有没有办法在地形中做这样的事情 您可以使用 target resource https www terraform io
  • 为什么 DirectFB 没有在 GNU/Linux 中得到更广泛的应用?是否存在 X11 中不存在的严重限制?

    据我了解 DirectFB为多种显卡提供硬件加速 此外 它比 X11 更小 更快 并且占用的内存更少 那么 为什么它没有比现在更主流呢 我真正不确定的是 常见的 GTK Qt 程序是否需要移植到它 在 DirectFB 网站上 有一个将 F