如何通过 drm (Linux) 创建 opengl 上下文

Posted

技术标签:

【中文标题】如何通过 drm (Linux) 创建 opengl 上下文【英文标题】:How to create opengl context via drm (Linux) 【发布时间】:2014-04-17 17:40:44 【问题描述】:

我想在没有 X 的情况下使用 OpenGL 渲染,我用谷歌找到了它:http://dvdhrm.wordpress.com/2012/08/11/kmscon-linux-kmsdrm-based-virtual-console/ 那里说这是可能的。我应该使用 DRM 和 EGL。 EGL 可以创建 opengl 上下文,但需要 NativeWindow。 DRM 可能会为我提供 NativeWindow,不是吗?我应该使用 KMS 吗?我知道我必须有开源视频驱动程序。我想要 OpenGL 上下文,而不是 OpenGL ES (Linux)。也许,有人知道教程或示例代码?

【问题讨论】:

【参考方案1】:

是的,您需要 kms 堆栈 (example)。 Here 是 linux 下的一个简单示例,它使用 OpenGL es,但是让它与 OpenGL api 一起工作的步骤很简单。

在 egl 属性中将EGL_RENRERABLE_TYPE 设置为EGL_OPENGL_BIT

并告诉 egl 绑定到哪个 api:

eglBindAPI(EGL_OPENGL_API);

确保拥有最新的内核驱动程序和mesa-devlibdrm-devlibgbm-dev。这段代码在 android 上是可移植的,只是让默认的 android 图形堆栈静音并不容易。

注意:我在使用 32 位版本时遇到了问题,但仍然不知道为什么。这些库正在积极开发中,所以不确定这不是错误。

*note2:根据您的 GLSL 版本,是否支持浮点精度。

precision mediump float;

注意3:如果您对/dev/dri/card0 的权限失败,请使用:

sudo chmod 666 /dev/dri/card0

或将当前用户添加到video

sudo adduser $user video

您还可以为您的可执行文件设置guid,组设置为视频。 (也许是最好的选择)

【讨论】:

嗨,j-p!我正在寻找类似的示例,但适用于 android 设备。据我了解,android 中没有 DRM 堆栈。我猜低级图形 api 必须通过 fb0 和 /dev/ion 设备工作,但我没有例子。如果您有任何注释,请参考我的问题***.com/questions/33742552/… 我有安卓的libdrm,(libdrm1.so),但我不记得是我自己编译的还是原生的 如何跨多个进程执行此操作? IE。合成器是如何工作的?如何使用它们自己的 EGL 上下文进行多个处理并从主进程中组合它们? khronos.org/registry/egl/sdk/docs/man/html/eglMakeCurrent.xhtml

以上是关于如何通过 drm (Linux) 创建 opengl 上下文的主要内容,如果未能解决你的问题,请参考以下文章

【转】DRM(三)libdrm库

Android 图形系统(3)---- DRM 显示框架初步

Linux内核4.14版本——drm框架分析——drm简介

Linux DRM ( DRI ) 无法像以前一样使用 FBDEV 筛选 /dev/fb0

Linux DRM Developer‘s Guide

Linux DRM Developer‘s Guide