【问题标题】:How can third-party libraries do things that the standard library can't do?第三方库怎么能做标准库做不到的事情呢?
【发布时间】:2021-03-09 23:55:31
【问题描述】:

我阅读了多个 StackOverflow 的答案,即 C 和 C++ 没有图形库作为其标准库的一部分,那么第三方库如何实现图形用户界面?

假设我是一名开发人员,想要创建一个可以在屏幕上绘制形状的库,我什至如何在不使用任何其他第三方库的情况下制作这样的库?一旦你有了一个基本的像素绘制函数,你就可以在它之上构建许多其他函数,比如用基本逻辑绘制正方形、圆形等的函数,但是你如何创建 C 和 C++ 不理解的初始像素绘制函数?

【问题讨论】:

  • 第三方库用于特定目的,例如图形/运动/科学计算/安全算法等......并且不胜枚举......
  • 这个“初始”像素绘制功能通常由您的操作系统提供。例如,请参阅this answer
  • C 和 C++ 是节俭的语言,它们对环境做出最小的假设。这就是让它们能够在各种主机上运行的原因,从嵌入式控制器到大型机,以及介于两者之间的一切。其中许多平台甚至可能没有显示器,更不用说具有图形功能的平台了。而那些确实具有截然不同的功能和低级控制。因此,将图形支持留给专用的、目标更窄的库更有意义。

标签: c++ c graphics


【解决方案1】:

第三方库如何做标准库做不到的事情?

在最低级别,它们使用操作系统提供的 API。

在大多数情况下,通常会有一堆抽象级别不断增加的库。在操作系统 API 之上,通常有一个系统库(如 glibc、libDRM)。在系统库之上,通常有一个可移植的跨平台抽象(如 libuv、Mesa3D)。除此之外,还有更复杂的库和框架组合了多个接口(例如 Web 服务器框架、SDL)。

假设我是一名开发人员,想要创建一个可以在屏幕上绘制形状的库,我什至如何在不使用任何其他第三方库的情况下制作这样的库?

由于使用操作系统 API 是特定于操作系统的,我们以 Linux 为例。

您可以在多个图形 API 之间进行选择。也许最常用的是帧缓冲设备和直接渲染管理器。

但是,如果您希望您的程序与其他图形程序窗口化,那么程序之间必须有协调。这是显示服务器(通常是 Xorg)的工作。大多数图形 Linux 程序不直接与图形 API 交互,而是通过此类服务器。如果您不想使用服务器提供的客户端库,则必须重新实现其客户端协议。

【讨论】:

  • 值得补充的是,OpenGL 和 Vulcan 通过与 GPU 协调支持图形硬件加速,并且直接渲染管理器 (libDRM) 用于在用户和内核空间之间移动帧缓冲区。
猜你喜欢
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
相关资源
最近更新 更多