Kivy OpenGL 部署要求可行吗?
我现在正在为我的新项目寻找一个不错的图形用户界面(GUI)框架,Kivy看起来还不错。
这里有很多关于Kivy需要OpenGL版本大于2.0的问题(比如这个),而且因为这个要求引发了一些问题。根据我的理解,这主要是因为图形驱动程序需要提供一个合适的OpenGL版本。
我担心的是,如果我的应用程序要部署给那些配置特定的用户,他们可能不愿意或无法在自己的电脑上安装OpenGL大于2.0的版本,会遇到什么问题。
首先,在Windows上部署OpenGL应该没什么问题,支持得很好。
但是我特别担心的是像我这样使用Ubuntu(14.4 LTS)并且安装了最新的Nvidia二进制驱动程序的用户。这个驱动程序目前是最好的,性能也最好(在我看来,远远超过nouveau驱动)。
而且似乎(或者我错了?那就太好了)这个驱动程序只提供OpenGL 1.4。
name of display: :0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions: [...]
所以我的问题有两个方面:
- 我是不是错了,Nvidia的二进制驱动程序只支持OpenGL 1.4?
- 如果是这样的话,这是不是意味着很多使用Nvidia显卡的Ubuntu用户都无法使用我的Kivy应用程序?有没有办法解决这个问题?
我知道OpenGL 1.4是很老的东西,但这个驱动程序和硬件(GTX 770,性能很强)都是最新的。
已安装的驱动程序:
root@host:/home/user# apt-cache policy nvidia-331-updates
nvidia-331-updates:
Installed: 331.38-0ubuntu7
Candidate: 331.38-0ubuntu7
Version table:
Nvidia信息:
Version: 331.38
Release Date: 2014.1.13
我真的希望我错了……
编辑:有人说1.4是GLX版本,而不是OpenGL版本……我现在明白了,但我以为是1.4,因为当我尝试执行一个示例时,出现了这个错误:
vagrant@ubuntu-14:/usr/local/share/kivy-examples/guide/firstwidget$ python 1_skeleton.py
[WARNING] [Config ] Older configuration version detected (0 instead of 10)
[WARNING] [Config ] Upgrading configuration in progress.
[INFO ] [Logger ] Record log in /home/vagrant/.kivy/logs/kivy_14-06-28_0.txt
[INFO ] Kivy v1.8.1-dev
[INFO ] [Python ] v2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2]
[INFO ] [Factory ] 169 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_pygame, img_gif (img_pil ignored)
[INFO ] [Window ] Provider: pygame(['window_egl_rpi'] ignored)
libGL error: failed to load driver: swrast
[INFO ] [GL ] OpenGL version <1.4 (2.1.2 NVIDIA 331.38)>
[INFO ] [GL ] OpenGL vendor <NVIDIA Corporation>
[INFO ] [GL ] OpenGL renderer <GeForce GTX 770/PCIe/SSE2>
[INFO ] [GL ] OpenGL parsed version: 1, 4
[CRITICAL] [GL ] Minimum required OpenGL version (2.0) NOT found!
OpenGL version detected: 1.4
Version: 1.4 (2.1.2 NVIDIA 331.38)
Vendor: NVIDIA Corporation
Renderer: GeForce GTX 770/PCIe/SSE2
Try upgrading your graphics drivers and/or your graphics hardware in case of problems.
所以实际上它把我的OpenGL版本解析为1.4……
编辑2:我今天(6月28日)从github上运行Kivy(主分支),所以应该是相当新的;-)
2 个回答
我之前回答过一个非常相似的问题,在这里。下面是我的回答,供参考:
Kivy这个框架,似乎是必须要用OpenGL 2.0。
严格来说,Kivy的最低要求是OpenGL ES 2.0。这和OpenGL 2.0是不一样的。
其实问题很简单。我家里有三台电脑,其中两台比较旧,配的是集成显卡,不支持OpenGL 2.0。
这种情况现在比较少见。就连手机设备,几乎都支持这个功能很多年了(这里的“它”指的是Kivy依赖的OpenGL ES 2的特性)。
通常你会发现不支持的情况出现在一些老旧的机器上,像你那样的集成显卡。不过我没有统计这些机器有多普遍。任何配有“合适”显卡的机器,或者是最近几年内的集成显卡(比如英特尔的Sandy Bridge系列等),几乎都能正常运行。
我在一些新机器上偶尔看到问题,比如某些特别不支持的上网本,但这些情况真的很少见。
补充一下:根据谷歌的说法,似乎有99.9%的设备支持OpenGL ES 2(写这段话时的数据)。
总的来说,你(或者任何使用你应用的人)遇到与此相关的问题的可能性极小。
这不是 OpenGL 的版本!这是 GLX 的版本。根据我所知道的,GLX 1.4 是最新的版本。你可以使用 glxinfo
命令来查看所有的版本号。在我的电脑上显示的是:
$glxinfo | grep 'GLX version'
GLX version: 1.4
$glxinfo | grep OpenGL
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Ironlake Mobile
OpenGL version string: 2.1 Mesa 10.1.3
OpenGL shading language version string: 1.20
OpenGL extensions:
另外,你可以查看 如何检查我的 OpenGL 版本? 获取更多信息。
总结一下:你不需要担心 OpenGL 2.0 的兼容性。现在几乎所有的设备都支持 OpenGL 2.0。比如,只有 0.1% 的 Android 设备 只支持 OpenGL 1.1 版本。