我有一个使用着色器的 OpenGL 应用程序。在我有显卡并安装了驱动程序的桌面上,它工作正常,但是当 GPU 被禁用时,我的应用程序无法运行并在创建窗口后崩溃。我有以下理解和疑惑:
GLSL 编译器由 GPU 供应商提供,因此在没有找到 GPU 驱动程序时应用程序会崩溃。
这是否意味着在没有 GPU 的系统上,使用着色器的 OpenGL 应用程序将无法运行?我的理解是 GPU 只会增强 fps,应用程序也应该在没有 GPU 的情况下运行。
如前所述,有人需要在您的目标平台/系统上提供 OpenGL 实现。通常,这是由图形驱动程序完成的,但也有可用的软件实现(如台面)。
此外,为了让您的应用程序运行,它需要检查某些 OpenGL 功能的可用性,因为某些东西(如着色器)可能不适用于每个驱动程序/实现/硬件。换句话说:OpenGL 实现(通常是共享库)的可用性并不表示着色器的可用性。
据我所知,如果没有可用的 GPU,大多数实现都不会提供“软件回退”。Mesa 可以,但它“仅”提供 OpenGL 3.1,我不确定着色器对软件渲染的支持有多好。我认为它正在进行中。
为了运行 OpenGL 应用程序,您必须有一个能够理解 OpenGL 调用的驱动程序,如果您安装软件模拟驱动程序,您可以在没有 GPU 的情况下运行您的应用程序。一个是 Mesa AFAIK,还有一个 Windows 版本的 Mesa,另一个是来自 transgaming 的 Swiftshader,但后者是商业软件。
- GLSL 编译器由 GPU 供应商提供,因此在没有找到 GPU 驱动程序时应用程序会崩溃。
好吧,从技术上讲,GLSL 编译器是足够高版本的符合 OpenGL 实现的一部分。但这只是你所说的本质上的大话。所以:是的。
- 这是否意味着在没有 GPU 的系统上,使用着色器的 OpenGL 应用程序将无法运行?
您需要一个能够满足您的程序所需功能的 OpenGL 实现。大多数 OpenGL 实现都是以 GPU 和(薄)驱动层的组合形式完成的,这使得通过 OpenGL 与 GPU 对话成为可能。
- 我的理解是 GPU 只会增强 fps,应用程序也应该在没有 GPU 的情况下运行。
嗯,这个想法是错误的。GPU 不仅仅是“性能增强器”。GPU 是一个功能齐全的处理平台,所有 OpenGL 版本都设计为使用这种处理器来实现,GPU 就是这样。有软件仿真,但速度很慢,而且功能通常不完整。
事实上,OpenGL 总是应该使用某种 GPU 来实现。OpenGL 的第一个版本实际上是 SGI 硬件图形光栅化器的寄存器和命令的 1:1 用户空间 API;哎呀,甚至一些早期的 OpenGL 令牌也将数值放入 SGI 硬件的控制寄存器中。