用于命令行 linux (ArchLinux) 的简单图形库 / API?[关闭]

Simple graphics library / API for command-line linux (ArchLinux)? [closed]

提问人:axolotlKing0722 提问时间:11/17/2023 更新时间:11/17/2023 访问量:36

问:


我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。

昨天关闭。

我想在ArchLinux上做一些图形化的东西。没什么大不了的,只是一些 2D 线、圆等等。我实际上喜欢低级编码,但我已经看到 linux 内核没有提供任何对绘制图形(如系统调用或其他)的支持。那么像 graphics.h 这样的库是如何工作的呢?

而且,我的下一个问题是,您将如何在 Arch linux 上安装该库?因为 gcc 告诉我在我的计算机上找不到 graphics.h。您可以安装它或从某个地方下载源代码吗?或者这是一项更复杂的任务,因为您无法在命令行模式下绘制图形?您是否需要一些额外的 GPU 驱动程序?

感谢您的回答!

C Linux 图形 ArchLinux 低级

评论

0赞 gulpr 11/17/2023
不存在这样的事情。阅读 aboy gtk、cairo、pango 等
0赞 Simon Goater 11/17/2023
我不久前这样做了,它允许您在 bmp 中绘制点。它没有依赖项,如果您将 MIT 许可证包含在您使用的任何内容中,则可以免费使用。github.com/FastAsChuff/Red-Julia-Set-Fractal-Generator。我还让它画直线,但还没有开始上传。如果你也想要,请告诉我......
0赞 tstanisl 11/17/2023
SDL + 基本 OpenGL 非常容易设置。

答:

1赞 Marcus Müller 11/17/2023 #1

Arch 只是一个 linux 发行版。没有“特定于 Arch”的库;您可以(并且必须使用)现有的 Linux 目标库之一。

那么像 graphics.h 这样的库是如何工作的呢?

不确定你指的是哪个。查看我的 /usr/include,其中有多个。但是单个标头永远无法调用 X 或 wayland,您确实需要为此进行动态链接。graphics.h

所以,他们没有,不管你怎么想

而且,我的下一个问题是,您将如何在 Arch linux 上安装该库?因为 gcc 告诉我在我的计算机上找不到 graphics.h。

您似乎在某处找到了有关某个名为 graphics.h 的文件的一些文本,并认为这是您所需要的。事实并非如此。

但我已经看到 linux 内核不提供任何对绘制图形的支持(如系统调用或其他)

为什么内核会关心这一点?它的工作是为硬件提供安全兼容的接口,而不是执行用户空间软件任务。

或者这是一项更复杂的任务,因为您无法在命令行模式下绘制图形?

这是 Linux,而不是 Windows 95 :)没有“命令行模式”这样的东西。你的意思是你想在虚拟终端上画画,但总的来说,这是一个文本的东西。你不能借鉴它。

帧缓冲控制台,但这也不是你想要的。

如果要绘制图形,请在图形环境(即 Wayland 或 X)中进行。而所有这些通常要做的就是,再次为您的软件提供一个 API 来实际将区域放在屏幕上(Wayland 实际上只是为您的软件提供了一个可以绘制的表面;X 也这样做,但也提供了非常糟糕的绘图功能,没有人再使用)。

因为没有一个底层标准来绘制事物,而且设置事物既繁琐又容易出错,而且 X 和 Wayland 之间也不同,所以你需要使用一个实际的库(不仅仅是一些叫做 graphics.h 的头文件,无论它来自哪里)来绘制一些东西。

这是最低层次的:你的图形系统给你一些可以借鉴的东西,你画。你需要依靠你的系统来为你做到这一点,因为你无法知道硬件、图形系统、颜色模式......你将面对。

关于实际图纸:

很多选择。我建议认真考虑是否要用 C 语言构建图形代码——这很快就会变得非常烦人和复杂,即使是大型且对性能非常关键的图形引擎也要远离它,这是有原因的。

如果你真的想要尽可能低的层次,而不必为不同的系统编写自己的抽象,这将比编写图形应用程序花费更多的时间:

听起来像是 SDL 的工作。SDL 附带了示例!或者,如果您更喜欢构建包含图纸的用户界面,请选择 dearImgui。dearImgui 源代码附带了许多示例,在 Linux 上您可能想要 OpenGL3 的,它最容易使用(恕我直言)。

关于:

而且,我的下一个问题是,您将如何在 Arch linux 上安装该库?

我真的很喜欢低级编码

嗯,我认为如果你喜欢 C 低级编码,你需要更好地了解什么是头文件,什么是,什么是链接和动态链接

评论

0赞 axolotlKing0722 11/18/2023
好的,谢谢,我对此很陌生,似乎我还理解每个概念。我知道这不是“命令行模式”,但我指的是将文本打印到屏幕上的方式。不久前我做了一些非常基本的操作系统开发教程,在那里,您可以使用BIOS中断将文本或图形绘制到屏幕上。但是这种中断在保护模式下不可用,所以我想知道 linux 内核是否提供了一些东西来管理这个问题。我的意思是,不知何故,X 或 Wayland 必须绘制图形,我想我想知道的是他们是如何做到的。
0赞 axolotlKing0722 11/18/2023
还有一个问题:我在 VM 中运行 Arch,那么 VM 窗口中显示的视频输出是由 Arch 还是内核或其他什么显示的?或者它只是我的 VM 呈现的串行文本输出?我猜它是由操作系统渲染的,因为你也可以选择在安装 arch(或更高版本)时更改字体。
0赞 gulpr 11/18/2023
@axolotlKing0722你正在运行 gnome 或其他东西。这就像仅适用于 Linux 的 Windows。了解 GTK 和开罗,您将能够在屏幕上绘图。
0赞 Marcus Müller 11/18/2023
@axolotlKing0722 BIOS 例程无法在控制显卡的操作系统上运行。正如我在回答中解释的那样,你读到的绝对不适用于 Linux 下的编程。
0赞 Marcus Müller 11/18/2023
@axolotlKing0722他们是如何做到的:一层又一层的抽象。最后,内核允许图形界面软件向显卡发送绘图命令,或者简单地填充 GPU 内存中的像素区域。但如何做到这一点完全取决于所涉及的硬件。这就是为什么你需要这些抽象层。每台计算机都是不同的,图形堆栈的工作是允许您将其与一个适用于所有人的 API 一起使用。因此,您需要像 SDL 这样的东西。