我想在没有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)。也许,有人知道教程或示例代码吗?
答案 0 :(得分:19)
是的,您需要kms堆栈(example)。 Here是linux下的一个简单示例,它使用的是OpenGL,但是让它对抗OpenGL api的步骤很简单。
在egl attribs中设置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
您也可以将组设置为视频的可执行文件设置为setguid。 (也许是最好的选择)