Clutter讨论(三):兼容性再次讨论——在moblin中使用Clutter

  在我们学习Clutter中,已经不断碰到Clutter的兼容性问题。这些兼容性问题的出现,一方面在clutter刚推出1.0版本,不太成熟,另一方是clutter本身机制造成的,他使用了很多底层的东西,那么他就需要适配不同的display硬件,虽然clutter一直说他的通用的。他不是创建在其他已经经过多年为兼容奋斗的软件或者技术上,因此在初期出现兼容性的问题是可以理解的。即便如此,clutter优秀的动态展现可以是我们暂时遗忘他的问题。

  moblin提供了基于clutter的UI界面,耳目一新。不是KDE,不是GNOME,而是clutter,这无论如何也是一个创新。他如何的好,如何的牛,在网上可以找到很多歌功颂德的文章,不必再提。但是我们很惊讶地发现,这么一个用clutter粉饰的OS,在进行clutter开发的时候却也存在一些问题,而这些问题在其他通用的linux中没有,包括moblin的GNOME版本中也不存在,因此我们推断在和系统整合有关。

  这些问题通过一些编程注意事项可以避免。下面记录这些问题,以及他的解决方案。需要强调的是所有的这些现象只出现只给予CLutter的moblin版本中,不出现在其他的OS,但是也可以作为其他OS上编写clutter的一些建议。

问题:在GTK+中嵌入clutter widget

  我们有一个很简单的GTK+中键入clutter widget的小例子,在moblin-Clutter上面运行,报告一下错误:

do_wait: drmWaitVBlank returned -1, IRQs don't seem to be working correctly.Try adjusting the vblank_mode configuration parameter

  根据这个错误提示,我重新设置了vblank_mode没有起作用,实验了所有有效的配置值0-3。因此这个错误并非由vblank_mode的配置引起。

  有时可以正常运行,有时会整个机器死机,而且死机率很高,一般玩几次就玩残了。问题一度很困绕,在基于Clutter UI的moblin系统上,可以正常运行GTK程序,可以正常运行Clutter程序,但是无法运行在GTK中嵌入Clutter。Clutter中有一个稳定运行的Example,我仔细进行了对比,对原来的小例子进行了一些修订,如下:

原例子:
……
clutter_actor_show(stage);
gtk_widget_show(GTK_WIDGET(window));
修订后:
……
gtk_widget_show(GTK_WIDGET(window));
clutter_actor_show(stage);

   我们只是将两个语序的顺序进行了更换。将显示clutter的舞台和现实显示GTK的窗口的顺序进行替换。实际在GTK或者Clutter的开发中,一般先显示actor,在显示stage。修订后实验结果如下:仍然报告错误:do_wait: drmWaitVBlank returned -1, IRQs don't seem to be working correctly.Try adjusting the vblank_mode configuration parameter. 但是似乎不在出现死机现象,我连续重复了十来次,均报告错误,均正常运行。

  我们进行了对照试验:即使在moblin-GNOME也不出现异常,只出现在moblin-clutter。而这两个语句根本不存在先后顺序的要求。修改后运行程序是出现系统报错,虽然暂时没有发现程序的影响,但是也显示某些不稳定或者不匹配的现象。目前clutter的通用性和稳定性仍需要提供,出现的问题,有些是clutter引起,有些是clutter UI的集成导致。

 

附:处理vblank_mode的方式

安装driconf的rpm包,配置.dirconf文件如下:
<driconf>
    <device screen="0" driver="i915">
        <application name="Default">
            <option name="force_s3tc_enable" value="false" />
            <option name="no_rast" value="false" />
            <option name="fthrottle_mode" value="2" />
            <option name="always_flush_cache" value="false" />
            <option name="always_flush_batch" value="false" />
            <option name="bo_reuse" value="1" />
            <option name="vblank_mode" value="0" />
            <option name="allow_large_textures" value="2" />
        </application>
    </device>
</driconf>
将vblank_mode分别设为0,1,2,3

我们也可以使用图形配置界面,或者在执行应用的时候加上参数VLANK_MODE=3来解决

 

相关链接:我的Clutter相关博客

 

 

你可能感兴趣的:(UI,OS,application,actor,gtk,textures)