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

use*_*346 14 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).也许,有人知道教程或示例代码?

j-p*_*j-p 19

是的,你需要kms堆栈(例子).是linux下的一个简单示例,它使用OpenGL es,但让它对抗OpenGL api的步骤很简单.

在egl attribs设置EGL_RENRERABLE_TYPEEGL_OPENGL_BIT

并告诉egl哪个api绑定到:

eglBindAPI(EGL_OPENGL_API);
Run Code Online (Sandbox Code Playgroud)

一定要有最新的内核驱动程序和mesa-dev,libdrm-dev,libgbm-dev.这段代码在Android上是可移植的,只是不容易让默认的android图形堆栈沉默.

注意:我在使用32位版本时遇到了麻烦,但仍然不知道为什么.这些库是积极开发的,所以不确定它不是一个bug.

*note2:取决于您的GLSL版本,是否支持浮点精度.

precision mediump float;
Run Code Online (Sandbox Code Playgroud)

注3:如果你有permision失败/dev/dri/card0,请给予:

sudo chmod 666 /dev/dri/card0
Run Code Online (Sandbox Code Playgroud)

或将当前用户添加到video

sudo adduser $user video
Run Code Online (Sandbox Code Playgroud)

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