【问题标题】:How to setup a OpenGL developement environment without Mesa如何在没有 Mesa 的情况下设置 OpenGL 开发环境
【发布时间】:2012-02-16 03:00:40
【问题描述】:

根据我在这里阅读的内容:http://www.linuxquestions.org/questions/linux-software-2/opengl-vs-mesa-whats-the-diff-351037/

Mesa是软件渲染,而驱动OpenGL是硬件渲染。

我遇到的每个教程都只展示了如何安装 Mesa。如何设置真正的(硬件加速)openGL?安装驱动程序是否安装标题?如果是这样,哪个标题?如果我有一个用 mesa 编译的程序,我是否必须重新编译它才能利用硬件加速?如果安装驱动安装需要的库和头文件,台面会发生什么?

来自指向站点的最后一篇文章:“这是否意味着如果我安装了 NVidia 驱动程序,我应该删除 mesa 包?”

另外,openGL 现在是第 4 版和第 5 版,但我找不到任何教程来说明如何为这些版本创建上下文,只有最高版本 3...

如您所见,我不太确定这是如何工作的。

最后一件事,这本书:http://glprogramming.com/red/ 适用于哪个版本的 openGL?指南版本是 1.1,但没有说明是为哪个版本编写的。

【问题讨论】:

标签: c opengl ubuntu-11.04


【解决方案1】:

Mesa是软件渲染,而驱动OpenGL是硬件渲染。

没有。 Mesa 是 OpenGL API 的开源实现,还提供了软件光栅化器后备。但 Mesa 也是 intelradeonradeonhdnoveau 的开源 GPU 驱动程序的基础。

我遇到的每个教程都只展示了如何安装 Mesa。如何设置真正的(硬件加速)openGL?

OpenGL 只是一个 API。这意味着您使用哪种 OpenGL 实现进行开发并不重要。您可以使用 Mesa 进行开发,但您的程序也可以使用专有驱动程序运行良好。

安装驱动会安装header吗?

有时。但大多数 Linux 发行版都阻止了这一点,并假定 Mesa 头文件是规范的开发资源。

如果我有一个用 mesa 编译的程序,我是否必须重新编译它才能利用硬件加速的优势?

没有。如果您做的一切正确,即将您的可执行文件与 libGL 动态链接,那么您的程序将适用于任何 OpenGL 实现。

如果安装驱动安装所需的库和头文件,台面会发生什么?

取决于分布。一些发行版有供应商驱动程序替换 libGL.so,但没有 Mesa 开发文件。一些发行版替换了 libGL.so 和头文件。一些发行版将 OpenGL 实现放在 /usr/lib/opengl 中,并提供了设置符号链接的工具(Gentoo)。在实践中,这并不重要。

来自指向站点的最后一篇文章:“这是否意味着如果我安装了 NVidia 驱动程序,我应该删除 mesa 包?”

如果需要,您的分发包管理器会发出警告。但就像我说的:它不应该打扰你,除了 Mesa 实现只支持 OpenGL-2.1。但这并不意味着您不能用它编译 OpenGL-3 及更高版本的程序。他们将无法创建 OpenGL-3 上下文并中止并显示错误消息或退回到 OpenGL-2

【讨论】:

  • Mesa 实现仅支持 OpenGL-2.1。但这并不意味着您不能用它编译 OpenGL-3 及更高版本的程序。他们将无法创建 OpenGL-3 上下文并因错误消息而中止或退回到 OpenGL-2 ......你能解释一下吗?我不确定我是否理解,我如何在没有 opengl 3 上下文的情况下使用 opengl-3?
  • @user1115057:OpenGL-3 是通过所谓的“扩展”机制访问的。如果支持,扩展允许程序从 OpenGL 实现中动态加载附加功能。扩展 API 自 OpenGL-1.1 起已修复,此后未更改。因此,您可以使用 Mesa 编译程序,利用扩展。如果 Mesa 是 OpenGL 运行时实现,它只会报告 OpenGL-3 功能不可用,并且您的程序必须退回到 OpenGL-2。如果在运行时存在支持 OpenGL-3 的实现,那么您可以访问它。
  • 如果 Mesa 是 OpenGL 运行时实现,它只会报告 OpenGL-3 函数不可用,并且您的程序必须回退到 OpenGL-2...您的意思是 Mesa = no opengl-3,或者你的意思是台面+没有扩展=没有opengl-3?我在哪里可以得到这些扩展?
  • @user1115057:暂时忘记 Mesa。扩展不是某种额外的软件。扩展机制允许 OpenGL 实现(=驱动程序)扩展 API,而无需重新编译程序或安装新库。 Mesa 只是一些 OpenGL 驱动程序,而Mesa 目前只支持OpenGL-2。但是,无论您使用的是 Mesa 还是其他驱动程序,您链接的库 (libGL.so) 在您的程序中看起来都是一样的。安装 GPU 最新驱动程序时自动获得的扩展,但前提是 GPU 确实支持它们。
  • @user1115057:请注意,只要您只是编译和链接程序(=构建时间),您只需要一些 libGL.so 和头文件,以便编译器和链接器知道, symbols 以在可执行文件中引用 - 从技术上讲,它可能只是一些伪造的库,只是导出符号表,但不包含单个代码指令。但是在运行时,安装的驱动程序和库很重要。您询问了编译和构建,然后这对您来说并不重要,因为 OpenGL-1.1 之外的所有内容都不是通过 libGL.so 的符号而是通过扩展来暴露的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 2014-02-01
  • 2017-04-06
相关资源
最近更新 更多