事实上,我并没有完全理解 OpenGL 是什么。
OpenGL 本身只是一个 API 规范:一组您可以调用的函数、特殊值和标记以及每个调用的效果。然后实现遵循这个规范来提供一个工作的 OpenGL。
OpenGL 是光栅化绘图 API,针对在 3D 空间中绘制图元进行了优化。即你提供一个 3D 坐标流和一个绘图模式,即绘制点、线或三角形,然后 OpenGL 会将 3D 数据转换为 2D 屏幕空间并在画布上绘制平面图元。更高版本的 OpenGL 不再是严格的 3D 到 2D,而是需要所谓的着色器,这是描述将任意维度几何图形转换为 2D 屏幕空间的小程序。
附加功能是在绘图时将图像数据(纹理)作为附加数据源进行采样和插值。
细节:我似乎一直在尝试使用 Mesa 3D,它甚至不是严格的官方 OpenGL 实现。
为什么?如果您使用的是 Windows,那么您应该使用 GPU 驱动程序提供的 OpenGL 实现,而不是一些随机库(尽管 Mesa3D 并非完全随机)。
OpenGL 实际上并不是你安装的某个库,它是 GPU 驱动程序提供的一组函数。对于 GPU 驱动程序不提供 OpenGL 的情况,您可以使用软件光栅化器实现。
Mesa 3D 甚至使用 GPU 吗?
依靠。在 Windows Mesa3D 上,它只是一个软件光栅器。但是对于 X.org(Linux、FreeBSD 等),Mesa3D 是 GPU 驱动程序的开源 OpenGL 前端,因此如果 X.org 配置为使用 Mesa3D 可以使用的驱动程序,您可以通过 mesa 获得 GPU 加速。
我不知道如何获得另一个实现库;我什至不知道还有什么其他人。(Mesa 3D 由我的 dev-cpp 编译器提供)
通常,您将 OpenGL 作为 GPU 驱动程序的一部分。在 Linux 上安装开源 GPU 驱动程序时,这会自动安装 Mesa3D。但也有闭源驱动程序,它们使用完全不同的代码库。
这一点非常重要:您不需要专门的 OpenGL 库来进行 OpenGL 开发。
通常您的编译器附带一个“opengl32.lib”(如果在 Windows 上 - 在其他平台上,您只需告诉链接器链接到系统 OpenGL)。然而,这只是链接器的目录,实际的 OpenGL 实现将提供什么。
在 Windows 上,系统 opengl32.dll 仅导出 OpenGL-1.1。对于高于此的任何功能,都有所谓的扩展机制来加载更高版本的功能。您通常通过像GLEW这样的库(在这种情况下实际上是一个库)来执行此操作