我正在搜索一个系统调用,它可以在屏幕上的给定坐标上绘制类似的像素。但我在这个网站上找不到任何这样的系统调用。
我了解到操作系统使用图形驱动程序与显示器进行交互。但这些驱动程序在不同的机器上可能不同。那么,linux是否提供了一个通用的本地API来处理这些问题?
就像打开、关闭、读取和写入文件的系统调用一样。尽管底层文件系统可能有所不同,但这些系统调用为用户程序提供了一个抽象的API来简化事情。我在搜索类似的东西以便在屏幕上画画。
通常,用户正在运行一个显示服务器和窗口系统,该系统将屏幕组织到窗口中,应用程序使用该系统提供的API单独绘制这些窗口。细节将取决于该系统的体系结构。
Linux上的传统窗口系统是X窗口系统,更现代的Wayland显示服务器/协议也在常用。例如,X具有指示X服务器在屏幕上绘制基元的命令。
如果没有使用这样的系统,则可以通过帧缓冲设备或使用DRM API直接绘制到显示器。两者都不是通过特殊系统调用来访问的,而是通过在/dev
中的特殊设备文件上使用普通文件系统调用(如open
、read
、write
等(以及ioctl
来访问,例如,用于DRM的/dev/dri/card0
到第一图形卡或用于第一帧缓冲设备的/dev/fb0
。DRM还用于当在如上所述的显示服务器或窗口系统下时直接呈现到屏幕或缓冲器的应用。
在任何情况下,DRM通常不直接用于在屏幕上绘制例如像素。它仍然是图形卡特有的。通常,像Mesa3D这样的库用于将特定细节转换为通用的API,如OpenGL或Vulkan,供应用程序使用。