【问题标题】:How to create opengl context via drm (Linux)如何通过 drm (Linux) 创建 opengl 上下文
【发布时间】:2014-06-02 02:57:06
【问题描述】:

我想在没有 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)。也许,有人知道教程或示例代码?

【问题讨论】:

    标签: linux opengl linux-kernel


    【解决方案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 设备工作,但我没有例子。如果您有任何注释,请参考我的问题stackoverflow.com/questions/33742552/…
    • 我有安卓的libdrm,(libdrm1.so),但我不记得是我自己编译的还是原生的
    • 如何跨多个进程执行此操作? IE。合成器是如何工作的?如何使用它们自己的 EGL 上下文进行多个处理并从主进程中组合它们?
    猜你喜欢
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多