GNU / Linux中“绘图”抽象的绝对最低级别是什么?

时间:2013-08-28 14:31:59

标签: c++ c linux graphics drawing

动机 - 用C(和装配,如果需要)编写程序,为屏幕中的红色矩形区域着色。

STRICT要求 - GNU / Linux使用 text / console 模式中的最小实用程序和接口运行。所以没有X(或类似Wayland / Mir),没有非默认(内核提供的POSIX,LSB等)库或接口,除了监视器的设备驱动程序之外没有其他假设。

实际上,我正在寻找的是有关如何编写程序的信息,该程序最终将通过VGA端口发送信号并通过电缆连接到显示器,为屏幕的特定部分着色。

道歉,如果这听起来很粗鲁,但没有“你为什么要这样做?”或者“你为什么不使用ABC库?”回答。我试图了解如何编写X服务器的实现或内核帧缓冲(/ dev / fb0)库。可以提供指向C库源的链接。

3 个答案:

答案 0 :(得分:1)

曾几何时,我们有svgalib(或称为vgalib?),它完全符合您的要求。我建议你查看它的源代码。我不知道是否仍然可以在任何地方找到它,或者它是否真的可以与现代内核一起使用。无论你做什么,都要准备好经常重启。

答案 1 :(得分:1)

  

除了监视器的设备驱动程序之外没有其他假设。

这意味着您可以使用X或Wayland,因为这些是Linux上的图形驱动程序基础结构。

Linux(内核)本身不包含任何图形基元。它提供了一些与GPU通信的接口,在其上分配内存并配置屏幕上的帧缓冲。但除了原始帧缓冲内存访问外,Linux内核无法执行绘图操作。为此,您需要在用户空间中使用一些基础架构。

Wayland构建于DRI2之上,后者又与DRM Kernel-API对话。然后你需要GPU依赖状态跟踪器。 Mesa有许多GPU的状态跟踪器,并提供OpenGL和OpenVG前端。

NVidia和ATI propiatary,闭源图形驱动程序仅适用于X.因此,使用GPU的人必须使用X.就是这样。

除此之外,你可以通过/dev/fbdev操纵屏幕上的帧缓冲存储器,但这只是像素推动,没有任何GPU加速。

答案 2 :(得分:0)

无论价值多少,对于任何未来的观众,我都在http://betteros.org/tut/graphics1.php找到了不错的教程。它以“可能的最低级别”(基本上是ioctl和文件读/写)通过Framebuffer,DRI / DRM和X Windows。

我已经获得了Framebuffer和DRI / DRM示例,它们都可以在QEMU Debian(在MacOS主机上)和Raspberry Pi上工作,并对后者进行了一些修改。