1

我已经理解 API 是两个代码之间的粘合剂。它们以库函数的形式实现,最终在运行时在计算机上编译和需要。

那么这是否意味着它们的实现是特定于操作系统的?

我特别想知道 opengl 的实现是否特定于操作系统?我正在使用 Fedora 19 并安装了 Mesa 库。

4

2 回答 2

6

一般来说

一些 API 可能以特定于操作系统的方式实现,而另一些则不是。

这取决于是否需要低级特性来实现它们,或者 API 运行的环境是否提供或不提供实现它们所需的构建块。

例如,JDBC type-4 驱动程序以独立于操作系统的方式实现 JDBC API。

诸如 POSIX 之类的其他 API 可能必须以特定于操作系统的方式实现,而其中的某些部分可能可以以独立于操作系统的方式实现。

另一个例子是 APR,即 Apache Portable Runtime,它以特定于操作系统的方式实现。另一个 API,Serf 构建在 APR 之上,因此它的实现实际上是独立于操作系统的。

总之,作为一般规则,低级 API 倾向于以特定于操作系统的方式实现,而高级 API 将根据其他低级 API 来实现,因此更有可能以独立于操作系统的方式实现方式。

台面/OpenGL

该答案的第一部分是在问题是通用 API 问题时编写的。后来这个问题被改为专门关于 OpenGL 的问题。

我对 OpenGL 的 Mesa 实现不是很熟悉;我会假设出于可维护性的原因,它的很大一部分是以独立于操作系统的方式实现的,但是因为 A)需要与硬件接口——这往往在不同的操作系统上以不同的方式完成——和 B ) 实现良好性能的需要也将有大量特定于操作系统的代码。

要记住的另一件事是 POSIX API 有灰色区域(特别是在处理线程的部分),因此对于更高级别的 API(例如 Mesa),可能需要特定于操作系统的代码来解决不同的实现中的差异平台。

于 2013-10-17T13:03:50.523 回答
2

当然,OpenGL 实现是特定于操作系统的。它们与操作系统集成,通常与设备驱动程序集成。

但是,OpenGL 规范是独立于操作系统的,因此 OpenGL API 不是特定于操作系统的。

注意 OpenGL 初始化(窗口和渲染上下文)非常依赖于操作系统(WGL 或 GLX API 实现)。

于 2013-10-17T15:25:21.333 回答