OpenGL等库可以访问显卡并可以生成图形程序,这些库如何访问显卡,因为它们是用C实现的。根据我所听到的,C和C ++不提供内置的图形功能语言和生成图形需要库。那么这些库是如何用C语言编写的?同样的问题也适用于声音吗?
C / C ++语言的附加功能,如图形,声音,Internet访问是用低级语言编写的,然后使用库提供给C / C ++吗?
我会感谢任何纠正我的概念或网上或书籍上的任何建议读物的摘要。
答案 0 :(得分:22)
答案 1 :(得分:3)
如果我没有弄错,你的问题归结为如何使用C来访问硬件。答案,以一种非常通用和手工波浪形式,是外围硬件经常被映射到地址空间并被访问,好像它是正常的内存,但需要注意它可能会意外地改变。
C在访问内存方面表现非常出色,因此它非常适合直接用硬件进行读写。 volatile
关键字用于显式阻止编译器进行快捷方式并强制查询相关地址。这是因为内存映射的IO地址可能会意外更改,并且不像普通RAM那样。
在一个简单的系统上,这个对设置地址的低级内存访问将被抽象为一个更容易使用的库。在现代操作系统上,内核必须调解对共享资源(如图形卡)的访问。这意味着内核将实现内存映射IO,但也会实现一系列系统调用(通常使用瑞士军刀结构,如ioctl
),以便用户进程可以访问外设。这反过来将包含在一个像OpenGL这样的用户友好的库中。