gnash的gui已经支持了kde,gtk,fltk,sdl等,去年我将它移植到vs下时使用的是sdl, 今天花了点时间把它的前端输出弄到了windows的窗口上,后端渲染还是使用的agg,顺便理一下gnash的gui机制。
gnash的前端gui是通过重载Gui类来实现的,Gui类的功能大致分为:
1)创建前端窗口。
各种gui系统都提供了创建窗口的功能,只要根据影片的尺寸创建指定大小的窗口就可以了。
2)实例化和窗口相匹配的后端渲染(如:Cairo,AGG,OpenGL).
根据使用的不同后端渲染引擎实例化Renderer类的继承者。目前在这三种后端上,agg是支持最好的,但由于全有软件渲染,很好cpu的,opengl我在windows上测试有崩溃,可能是平台造成了;我没有测试cairo的性能怎样,但感觉在软件渲染下不会比agg更快。
另外,flash player的主要性能消耗就是这个后端渲染,在没有硬件加速的情况下目前很少有嵌入式平台能跑流畅的,现在一些硬件只支持画点,画线,填充等简单图形硬件加速,但这根本不能达到flash对绘制效果的要求,这也是为什么adobe到现在为止还没有实现pc上player的矢量绘制的硬件加速,只是对视频的解码引入了硬件加速。在嵌入上期望更多的硬件支持OpenVG.
3)获取事件并交由stage处理。
事件主要指鼠标和按键事件,按键事件首先由Gui::notify_key_event()进行快捷键处理然后交由stage处理。
4) 通过Gui::run()来驱动影片播放。
UI线程在Gui::run中实现循环,直到播放器推出,在这个循环中要在指定的间隔后调用Gui::advanceMovie()来驱动stage的时间轴,进行影片播放。
gnash的gui驱动机制.
最新推荐文章于 2024-10-22 19:13:18 发布