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

时间:2014-04-17 17:40:45

标签: linux opengl linux-kernel

我想在没有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 个答案:

答案 0 :(得分:19)

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

在egl attribs中设置EGL_RENRERABLE_TYPEEGL_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

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