我开始学习OpenGL,因为这是我select的硕士学位课程的一部分。 在课堂上,加速的3Dgraphics在MS Windows上练习(也许DX3d实际上用来代替OpenGL,不确定)。 不过,我已经使用了很多年的Linux了,而且我确信这是一个正确的开发环境,当你可以自由select的时候。 但据我所知,加速的3D,特别是驱动和硬件支持,在Linux上是一团糟。 所以,请帮助我把以下一堆概念组织成一个合理的结构,因为这是我能看到和理解事物的唯一途径。
首先是司机。 NVIDIA和AMD专有的,加上“nouveau”和一些开放的Radeon驱动程序,以及一个实验性的AMD开放但仍然是官方的。 这似乎很清楚。
其次,有一种叫做“mesa”的东西。 那是什么? 它只是为免费的驱动程序定义的,它是免费的驱动程序项目的一部分,还是定义和要求,无论使用哪种驱动程序?
在开发2)中,“opengl”究竟是什么,它包含在哪里:mesa,司机还有其他的东西? 它可以是专有的吗?
内核模式驱动程序和IOCTL
是否有LdrLoadDll的内核模式callback?
我怎样才能检查一个进程是否仍然从c内核运行?
在USB设备Linux内核模块中调用USB批量发送消息时出现问题
设备驱动程序充当虚拟networking摄像头
最后,考虑到以上三点,在现代Linux系统上获取和安装OpenGL意味着什么?
dokan sshfs有多稳定?
如何访问我的英特尔芯片组的特定registry?
Linux设备驱动程序允许FPGA直接DMA到cpu RAM
如何确定打印机是否支持双向通讯
OpenGL是一个接口。 要使用它,你需要一个实现。 OpenGL有许多实现。 因为每个实现是不同的,即使你的程序是相同的,你的程序在不同的实现运行时也会有不同的表现。 具有硬件渲染器的典型OpenGL实现将包含一些在用户空间(动态库)中运行的代码,在内核中运行的代码(设备驱动程序),在X.org服务器(DDX驱动程序)中运行的代码, ,以及在显卡上运行的代码(固件)。 这是四个不同的代码段!
AMD和nVidia为Linux提供专有的OpenGL实现。 这些实现具有封闭内核的闭源驱动程序,这意味着如果出现问题,Linux开发人员将无法帮助您。 他们支持最新的OpenGL版本(例如4.5,如果您的硬件是有能力的)与完整的兼容性配置文件的支持。
Mesa为Linux提供了一个开放源码的OpenGL实现。 这个实现可以使用Noveau或者Radeon的开源驱动,它不会污染内核。 Mesa也有一个名为llvmpipe的软件实现,它只在cpu上运行,不需要驱动程序。 它的速度令人印象深刻,但比起过时的硬件实施要慢得多。 Mesa最近开始支持OpenGL 4.x系列,但是它需要一些时间才能通过发行版的发布周期进行过滤,所以你更有可能看到OpenGL 3.3–而且这仅仅是核心配置文件,你只能使用3.0与兼容性配置文件(类似于它如何在OS X上)。
由于Mesa开发人员有限制地访问有关显卡的文档以及有限的开发资源,所以AMD或nVidia卡上的Mesa实现通常比供应商的实现慢,并且通常支持更少的OpenGL扩展。 然而,Mesa的实现是非常稳固的,它不会污染你的内核,一些Mesa的实现甚至是Valgrind干净的。
安装OpenGL只是意味着在你的系统上安装一个OpenGL的实现(你知道,使用dnf或apt或其他)。 这通常意味着供应商实施和Mesa实施之间的选择…除了Intel集成图形,其中Mesa 是供应商实施。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。