【问题标题】:Who runs OpenGL shaders if there is no video card如果没有显卡,谁运行 OpenGL 着色器
【发布时间】:2018-03-12 09:55:01
【问题描述】:

我正在编写一个非常基本的 OpenGL C++ 程序(Linux 64 位)。

其实我有3个程序:

  • 一个主 C++ 程序
  • 一个顶点着色器
  • 片段着色器

这 2 个着色器是在运行时编译的。我想这些程序是由 GPU 在显卡上并行运行的。

我的问题是,如果我的计算机包含一个没有 GPU 的非常基本的视频卡会怎样?

我尝试在禁用“3d 加速”的情况下在 VirtualBox 上运行我的程序,并且该程序可以运行!

这是否意味着如果没有 GPU,opengl 会自动检测到显卡并在 CPU 上运行着色器?

【问题讨论】:

标签: c++ opengl gpu


【解决方案1】:

在任何现代个人计算机上都有一个GPU。如果您没有来自 NVidia 或 AMD 等供应商的专用 GPU 卡,您可能会拥有英特尔或其他计算机硬件制造商所谓的“板载”或integrated video chip。好消息是,即使是今天的板载 GPU 也相当不错,(英特尔终于开始做得很好了)而且 PC 上的这种硬件已经支持现代可编程 OpenGL 版本的可能性很高。好吧,也许不是最新的,但根据我个人的经验,英特尔 2-3 年前的大多数板载 GPU 应该支持最高 OpenGL 4.1/4.2 。所以只要你不是在真正的旧硬件上运行,你应该拥有对 gpu 加速 API 的完全访问权限。否则,您将拥有 Mesa library,它带有 OpenGL API 的软件(非 GPU 加速)实现。

【讨论】:

    【解决方案2】:

    OpenGL 只是一个标准,该标准有不同的实现。通常,您将依赖图形驱动程序提供的实现,这显然将使用 GPU。

    但是,大多数桌面 Linux 发行版还包括一个名为 Mesa 的 OpenGL 软件实现,如果您没有安装支持 OpenGL 的视频驱动程序,则可以使用该软件实现。 (现在很难找到任何不支持 OpenGL 着色器的视频硬件,甚至是 CPU 上的集成视频,但在 Linux 驱动程序上可能是一个问题,并且在您的情况下,VM 无法提供硬件加速。 )

    所以,简短的回答是肯定的,您的着色器可以在 CPU 上运行,但这可能会发生也可能不会发生,它可能是自动的,也可能不是自动的,这取决于您安装了哪些视频驱动程序(或其他 OpenGL 实现) .

    【讨论】:

    • 如何才能看到 GPU 内存(或计算资源)的限制?例如,如果运行需要大量顶点的程序的多个实例会发生什么?
    • 不幸的是,OpenGL 没有提供查询可用 GPU 内存的方法。当您遇到视频 RAM 的限制时,究竟会发生什么取决于您用于加载顶点的方法。如果视频 RAM 已满,GPU 可以自动从普通 RAM 中分页内容,但这是它自己的单独讨论。
    • 有查询各种实现参数的函数,例如,glGetIntegerv(GL_MAX_VERTEX_ATTRIBS,...) 将告诉您在您的实现中每个顶点允许有多少个属性。不幸的是,这些参数只是告诉您实现的能力,如果您保持在特定限制内或以特定方式构建事物,实现通常会大量更好地执行。在不同硬件上进行测试是了解 OpenGL 程序将如何执行的唯一可靠方法。
    猜你喜欢
    • 2018-03-12
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2011-08-13
    相关资源
    最近更新 更多