首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OpenGL、GLX、DRI和Mesa3D之间的关系是什么?

OpenGL、GLX、DRI和Mesa3D之间的关系是什么?
EN

Software Engineering用户
提问于 2012-09-15 19:22:50
回答 4查看 15.3K关注 0票数 17

我开始在Linux中做一些低级的3D编程。我有很多使用高级图形API OpenInventor的经验。

我知道完全没有必要知道这些事情是如何结合在一起的,但我只是好奇而已。我知道OpenGL只是图形应用程序的一个标准。Mesa3D似乎是该标准的开源实现。

那么GLX和DRI适合哪里呢?在维基百科和所有这些网站上翻查,我还没有找到一个解释这一切是如何一起进行的。硬件加速在哪里发生?专有驱动程序与此有什么关系?

EN

回答 4

Software Engineering用户

发布于 2012-09-16 19:37:30

除了OpenGL,我从来没有使用过那些库,但我会尝试通过阅读维基百科页面来猜测,就像你一样。

关于梅萨你看上去是对的。以下是我们获得的其他信息:

“X窗口系统是一种计算机软件系统和网络协议,它为联网计算机提供了基础GUI它创建了一个硬件抽象层。“

GLX使希望使用OpenGL的程序能够在X窗口系统提供的窗口中这样做。

GLX由三部分组成:

-提供OpenGL函数的API。

-X协议的扩展,它允许客户端发送3D呈现命令--X服务器的扩展,该服务器接收来自客户端的呈现命令并将它们传递给已安装的OpenGL库

如果客户端和服务器在同一台计算机上运行,并且可以使用加速的3D图形卡,则DRI可以绕过前两个组件.然后允许客户端程序直接访问图形硬件。“

直接渲染基础设施是一个在X窗口系统中使用的接口,它允许用户应用程序访问视频硬件,而不需要数据通过X服务器.“

OpenGL是一个C++ 3D图形API,旨在为OpenGL提供更高层次的编程

为了使事情更简单,让我们想象一下在每个API的入口和出口都会出现一个简化的数据流(和命令流)。在一开始,我们有您的应用程序(编译的代码),您从您的计算机运行。在最后,我们有图像显示在您的屏幕上。

有几个例子,我会限制这些问题的答案:

-does您的计算机有图形卡(GPU),还是只有一个CPU,来处理图形功能?

-is你的应用程序嵌入了x窗口系统的窗口?

-if您使用x窗口系统,"x服务器“是在您的计算机上运行,还是在网络上的其他计算机上运行?

如果您有GPU的驱动程序,我将假设您有驱动程序,如果您有GPU的驱动程序,则假设您有用于软件渲染的Mesa )。

第一个场景:您运行一个用OpenInventor编写的图形应用程序,而不使用X窗口系统,并且没有图形卡。程序流将非常类似于:

代码语言:javascript
代码运行次数:0
运行
复制
Your application
  ↓ (uses functions of)
OpenInventor
  ↓ (calls functions declared by)
OpenGL
  ↓ (redirects function calls to implementation defined by)
Mesa
  ↓ (implemented OpenGL functions to be run on the CPU)
[Probably] Operating System rendering API
  ↓
3D Images on your screen

这里发生的事情叫做“软件渲染”:图形命令不是由任何图形硬件处理的,而是由通常运行软件的处理器CPU处理的。

第二个场景:现在想象一下,在与上面相同的条件下,您有一个图形卡。流程看起来会更像这样:

代码语言:javascript
代码运行次数:0
运行
复制
Your application
  ↓ (uses functions of)
OpenInventor
  ↓ (calls functions declared by)
OpenGL
  ↓ (redirects function calls to implementation defined by)
Proprietary Drivers
  ↓ (converts OpenGL commands to GPU commands)
Graphic Card
  ↓
3D Images on your screen

现在发生的事情被称为“硬件加速”,通常比第一种情况要快。

第三个场景:现在让我们介绍X窗口系统流程,或者至少我认为它是怎样的,基于我读到的几行Wikipedia。

让我们暂时忘掉图形硬件和API。流程应该如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
Your application (X Window System sees it as an "X Client")
  ↓ (sends requests defined by the X Window System Core Protocol)
X Server
  ↓ (convert your request to graphic commands)
[Probably] Operating System rendering API
  ↓
Windows or 2D images on your screen

注意,当使用X窗口系统时,您的屏幕和运行应用程序的计算机可能不是“直接”连接的,而是可以通过网络连接的。

第四个场景:假设您想从前面的示例中向您的X客户端应用程序添加花哨的3D图形渲染。在我看来,X系统最初无法做到这一点,或者至少它需要大量复杂的代码来执行相当于OpenGL API函数的操作。

幸运的是,您可以使用GLX向系统添加对OpenGL命令的支持。你们现在有:

代码语言:javascript
代码运行次数:0
运行
复制
Your application
  ↓ (sends graphic requests defined by the "GLX extension to the X Protocol")
X Server with the GLX extension
  ↓ (convert your request to OpenGL commands)
OpenGL
  ↓ (redirects function calls to implementation defined by)
 ...

现在,您可以在第一个场景中将最后一个箭头重新连接到"OpenGL“之后的那个箭头:您可以在屏幕上获得3D图像!

最后,关于我认为对DRI的理解:

它似乎允许Mesa访问GPU,因此可以将第一个场景的流程修改为:

代码语言:javascript
代码运行次数:0
运行
复制
...
  ↓
Mesa
  ↓ (forwards OpenGL commands)
DRI
  ↓ (converts OpenGL commands to GPU commands)
Graphic Card
  ↓
3D Images on your screen

而且在使用GLX时,它似乎也短路了,条件是它的服务器和客户端在同一台计算机上,而且您有一个GPU。在这种情况下,我们的第四个场景的图将简单地变成:

代码语言:javascript
代码运行次数:0
运行
复制
Your application
  ↓ (sends graphic requests defined by the "GLX extension to the X Protocol")
DRI
  ↓ ("catches" OpenGL commands and converts them to GPU commands)
Graphic Card
  ↓
3D Images on your screen

就这样!

现在请记住,我不是Unix环境方面的专家,所以我最好的建议是研究每个API的文档,以准确地了解它们能做什么。

将先前的图表组合成一个单一的图表,可能会使事情更容易理解。我让这作为对你的锻炼!

票数 15
EN

Software Engineering用户

发布于 2012-09-17 14:56:53

OpenGL与平台无关;这意味着OpenGL API与平台无关。

OpenGL状态和缓冲区由抽象对象(通常称为上下文)收集。

宿主平台负责提供一些API来为底层平台创建OpenGL上下文。在Windows上有wgl*例程(Windows ),在Unix上有glX*例程(GlX)。

实际上,GLX只是一个允许应用程序创建OpenGL上下文以便使用OpenGL API的API。

常见的WGL/GLX操作是创建窗口,创建屏幕外缓冲区,使OpenGL上下文当前在线程上,交换绘制缓冲区.

相反,DRI是一个内核层,它允许通过传递XServer与图形卡直接通信,从而确实加快了使用OpenGL例程的应用程序。

票数 8
EN

Software Engineering用户

发布于 2014-03-09 08:30:40

http://www.bitwiz.org.uk/s/how-dri-and-drm-work.html

直接渲染基础设施,也称为DRI,是一个框架,允许直接访问X窗口系统下的图形硬件以一种安全和有效的方式。它包括对X服务器、多个客户端库和内核(DRM、直接呈现管理器)的更改。DRI最重要的用途是创建快速的OpenGL实现,为Mesa提供硬件加速。一些3D加速驱动程序已经写入了DRI规范,包括3 3DFX、AMD (原ATI)、Intel和Matrox生产的芯片组的驱动程序。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/164997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档