如何通过 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-dev
、libdrm-dev
、libgbm-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 上下文的主要内容,如果未能解决你的问题,请参考以下文章
Android 图形系统(3)---- DRM 显示框架初步