[ZLG-ARM] directfb是Linux平台上开发机顶盒使用的一个图形系统

[复制链接]
8739|1
 楼主| lpczcy 发表于 2009-6-22 13:59 | 显示全部楼层 |阅读模式
Lifview-D&nbsp;双模机顶盒整体架构<br />硬件部分:&nbsp;<br /><br />单芯片&nbsp;IP/DVB&nbsp;解决方案&nbsp;<br />丰富的外围借口:支持以太网(&nbsp;RJ45,10/100Mbs&nbsp;)、&nbsp;MiniPci&nbsp;(支持无线网卡)、双路&nbsp;DVB&nbsp;输入(支持&nbsp;DVB-C/T/S&nbsp;);具备&nbsp;2&nbsp;个串口,&nbsp;4&nbsp;个&nbsp;USB&nbsp;接口,&nbsp;2&nbsp;个&nbsp;SmartCard&nbsp;接口(&nbsp;CA&nbsp;),红外输入接口;&nbsp;SATA&nbsp;接口(&nbsp;PVR&nbsp;);丰富的音视频输出接口&nbsp;CVBS&nbsp;,&nbsp;S-Video&nbsp;,&nbsp;YPbPr&nbsp;,&nbsp;L/R&nbsp;Radio&nbsp;,&nbsp;SPDIF<br />软件部分:&nbsp;<br />嵌入式&nbsp;Linux&nbsp;操作系统&nbsp;网络协议:&nbsp;TCP/IP&nbsp;,&nbsp;DHCP&nbsp;,&nbsp;RTP/RTSP&nbsp;,&nbsp;HTTP&nbsp;图形系统:&nbsp;DirectFB&nbsp;,可实现输入&nbsp;/&nbsp;输出管理,图形显示、硬件加速、窗口管理以及字体库等功能&nbsp;<br />C/C++&nbsp;(&nbsp;GNU&nbsp;Tools&nbsp;)<br />Lifview-D&nbsp;双模机顶盒功能及技术指标&nbsp;<br />1&nbsp;)&nbsp;DVB&nbsp;Streaming&nbsp;<br /><br />MPEG-2&nbsp;<br />Digital&nbsp;Front-End&nbsp;(Tuner&nbsp;and&nbsp;Demodulator)&nbsp;<br />Descrambling&nbsp;(DVB-CA)&nbsp;<br />Transport&nbsp;Stream&nbsp;Demultiplexing&nbsp;:&nbsp;From&nbsp;Front-End&nbsp;(C/T/S)&&nbsp;Middleware&nbsp;(for&nbsp;IP-STB&nbsp;&&nbsp;PVR&nbsp;playback)&nbsp;<br />Single-Program&nbsp;Transport&nbsp;Stream&nbsp;Extraction&nbsp;:&nbsp;For&nbsp;PVR&nbsp;record&&nbsp;network&nbsp;distribution&nbsp;<br />PVR&nbsp;<br />2&nbsp;)&nbsp;IP&nbsp;Streaming&nbsp;<br /><br />IP&nbsp;Protocol:&nbsp;IPv4/IPv6&nbsp;<br />TCP/IP,HTTP,DHCP,DNS,FTP,SSL,PPPoE,SNMP&nbsp;<br />Streaming&nbsp;Protocol:&nbsp;<br />Multicast&nbsp;IPTV(IGMP&nbsp;Control)&nbsp;<br />Video&nbsp;On&nbsp;Demand(RTSP/RSVP&nbsp;control)&nbsp;<br />Transport&nbsp;Protocol:&nbsp;ISMA&nbsp;&&nbsp;TS,&nbsp;RTP/RTCP&nbsp;<br />3&nbsp;)信源音视频解码器&nbsp;<br /><br />视频支持的解码标准:&nbsp;AVS&nbsp;标清(&nbsp;720x576,720x480)&nbsp;,&nbsp;MPEG2&nbsp;标准、高清(&nbsp;1080i&nbsp;),&nbsp;MPEG4&nbsp;标清&nbsp;ASP@L3&nbsp;,&nbsp;WMV9&nbsp;标清&nbsp;MP@L3&nbsp;<br />音频支持的解码标准:&nbsp;MPEG(Layer1,2)&nbsp;、&nbsp;MP3&nbsp;、&nbsp;AAC&nbsp;、&nbsp;WMA&nbsp;<br />4&nbsp;)&nbsp;OSD&nbsp;显示&nbsp;<br /><br />Color:&nbsp;32-bit&nbsp;RGB&nbsp;for&nbsp;Video&nbsp;<br />Alpha&nbsp;Blending:256&nbsp;level&nbsp;<br />OSD&nbsp;Ficker&nbsp;Filter&nbsp;<br />Picture-in-Picture&nbsp;<br />5&nbsp;)&nbsp;DirectFB&nbsp;中间件接口<br /><br />Playback&nbsp;of&nbsp;compressed&nbsp;Video&nbsp;and&nbsp;Audio:&nbsp;<br />Video&nbsp;Provider&nbsp;Interface&nbsp;<br />Example:AVI&nbsp;、&nbsp;MP4&nbsp;、&nbsp;WMV&nbsp;、&nbsp;MP3&nbsp;<br />Decode&nbsp;(and&nbsp;display)&nbsp;of&nbsp;compressed&nbsp;Images&nbsp;<br />Image&nbsp;Provider&nbsp;Interface&nbsp;<br />Example:&nbsp;JPEG&nbsp;file&nbsp;<br />Graphics&nbsp;Drawing&nbsp;Operations:&nbsp;Lines&nbsp;/&nbsp;Boxes&nbsp;、&nbsp;Text&nbsp;/&nbsp;Fonts&nbsp;、&nbsp;Region&nbsp;copying&nbsp;、&nbsp;Hardware&nbsp;accelerated&nbsp;<br /><br />&nbsp;<br /> &nbsp;&nbsp;<br />如何选择合适的图形系统呢?<br /><br />大家知道嵌入式领域是一个很丰富的领域,包括诸多的嵌入式操作系统和嵌入式图形支撑系统,所以除了MiniGUI之外,还有一些其他的嵌入式GUI,比如QT/E,micwindows,&nbsp;DirectFB&nbsp;+GTK,fltk,openGUI,TILCON等等,我们这里重点讨论一下DirectFB,directfb是跟window下的directx类似的一套库<br />&nbsp;<br /> &nbsp;&nbsp;<br />directfb简介<br /><br />什么是directfb呢<br /><br />一个新的Linux图形标准<br /><br />面对嵌入式设备的特殊需求环境,我们为图形加速和图形增强支持开发了一个小巧、强大和易于使用的技术:directfb。<br /><br />directfb是一个瘦函数库,为开发者提供硬件加速,输入设备处理,并在Linux&nbsp;FB设备之上抽象、集成了支持半透明窗口和多层显示的窗口系统。它是一个完全的硬件抽象层,在每个图形操作上都具有软件后备机制,用于那些不被底层硬件支持的功能。DFB让嵌入式系统图形功能更强大,并在Linux上建立了一个新的标准。<br /><br />硬件图形加速&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />DirectFB&nbsp;提供以下图形操作:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />Rectangle&nbsp;filling/drawing&nbsp;矩形填充/绘制<br />Triangle&nbsp;filling/drawing&nbsp;&nbsp;&nbsp;&nbsp;三角形~~/~~<br />Line&nbsp;drawing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;画线<br />Flat&nbsp;shaded&nbsp;triangles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三线质素平面阴影&nbsp;(平面阴影更平滑)<br />Simple&nbsp;blitting&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单位块传输<br />Stretched&nbsp;blitting&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拉伸~~~~~~~<br />Textured&nbsp;triangles&nbsp;(perspective&nbsp;correct)&nbsp;三角纹理&nbsp;(透视校正)<br />Blending&nbsp;with&nbsp;an&nbsp;alphachannel&nbsp;(per&nbsp;pixel&nbsp;alpha)&nbsp;&nbsp;Alpha融合&nbsp;单像素<br />Blending&nbsp;with&nbsp;an&nbsp;alpha&nbsp;factor&nbsp;(alpha&nbsp;modulation)&nbsp;~~~~~~~~&nbsp;&nbsp;全局<br />Nine&nbsp;source&nbsp;and&nbsp;destination&nbsp;blend&nbsp;functions<br />Porter/Duff&nbsp;rules&nbsp;are&nbsp;supported&nbsp;&nbsp;&nbsp;&nbsp;算法规则,也是涉及透明的图形混合算法<br />Premultiplied&nbsp;alpha&nbsp;supported<br />Colorized&nbsp;blitting&nbsp;(color&nbsp;modulation)<br />Source&nbsp;color&nbsp;keying<br />Destination&nbsp;color&nbsp;keying<br /><br />管理<br />directfb对显存实现了自我资源管理。诸如显示层,输入设备等资源在排斥存取时能通过加锁锁定,例如全屏游戏。directfb针对不同的图形对象提供抽象,如显示层,窗口和通用表层。在从窗口切换到全屏和复原的编程设计尝试上被最小化到设置预期的协作等级。<br /><br />directfb的模块<br />#&nbsp;Graphics&nbsp;acceleration&nbsp;<br />#&nbsp;Input&nbsp;devices&nbsp;<br />#&nbsp;Image&nbsp;Provider&nbsp;<br />#&nbsp;Video&nbsp;Provider&nbsp;<br />#&nbsp;Font&nbsp;Provider<br />&nbsp;<br /> &nbsp;&nbsp;<br />DirectFB入门的一些感悟<br />下面是我对Directfb刚入门时的一些感悟,应该对刚入门的朋友有好处:<br />在我们到www.directfb.org的官方网站上看到的API函数,刚入门的朋友可能会觉得这些函数的调用还真是麻烦,其实他一点不麻烦,比如我们需要调用一个Flip函数,像<br /><br />primary-&gtFlip&nbsp;(primary,&nbsp;NULL,&nbsp;DSFLIP_WAITFORSYNC);<br /><br />我们在API中可以看到在进入IDirectFBSurface的这个接口就可以看到它的子页面有Flip这个函数了。所以我们得先定义一个IDirectFBSurface *primary&nbsp;=&nbsp;NULL;然后再由这个primary surface指向它的下级:primary-&gtFlip&nbsp;(primary,&nbsp;NULL,&nbsp;DSFLIP_WAITFORSYNC)。这样这个函数调用就出来了。<br /><br />另外,在API函数的首页面有三个部分:Interfaces,Types和Definitions。我们知道Interfaces在我们调用函数的时候用到,那Type和Definitions会在哪用到呢?下面我们还是看看这个Flip函数原型:<br /><br />Flip&nbsp;(&nbsp;<br />&nbsp;&nbsp;IDirectFBSurface&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;thiz,&nbsp;&nbsp;<br />&nbsp;&nbsp;const&nbsp;DFBRegion&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;region,&nbsp;&nbsp;<br />&nbsp;&nbsp;DFBSurfaceFlipFlags&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flags&nbsp;&nbsp;<br />);&nbsp;<br /><br />看第一个参数IDirectFBSurface型的,这个是在Interfaces中定义的,而第二、三个参数DFBRegion,DFBSurfaceFlipFlags都是在Type中出现的,他们就是指这些接口函数的变量类型,所以要调用函数就在Interfaces中调用,要查看函数参数的类型就可以到Type中查看了。这样在DirectFB官方网站www.directfb.org上有些例子,我们就可以试试了:http://www.directfb.org/docs/DirectFB_Tutorials/<br />交叉编译directfb<br /><br />开始动手交叉编译directfb到我的arm&nbsp;linux平台,步骤如下:<br /><br />1.&nbsp;下载&nbsp;DirectFB-1.2.1.tar.gz<br /><br />2.&nbsp;解压缩&nbsp;tar&nbsp;xvzf&nbsp;&nbsp;&nbsp;DirectFB-1.2.1.tar.gz<br /><br />3.&nbsp;配置交叉编译方式&nbsp;:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;./configure&nbsp;--prefix=/home/xinlian/rootfs/home/directfb&nbsp;--target=arm-linux&nbsp;--host=arm-linux&nbsp;LD=arm-linux-ld&nbsp;--enable-png=no&nbsp;--enable-freetype=no<br /><br />注:其中禁止了png和freetype因为我都没有用到。<br /><br />4.编译&nbsp;:make<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;编译时会遇到编译gfxdrivers目录的部分驱动时通不过,比如tiomap等,由于这些驱动对于我来说是用不到的,我就直接把该目录下的makefile里相应的项屏蔽掉了。<br /><br />5.安装<br /><br />make&nbsp;install<br />一个使用DirectFB包的简单编程示例<br /><br />主要实现了3个内容:<br /><br />1。surface的绘图函数<br />2。如何在surface中获取类似framebuffer的绘制内存地址(去掉代码中的注释)<br />3。eventbuffer的使用,按escape退出,移动鼠标绘点<br /><br /><br />代码:<br />#include&nbsp;“directfb.h”&nbsp;#include&nbsp;'stdio.h'static&nbsp;IDirectFB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*dfb&nbsp;&nbsp;&nbsp;=&nbsp;NULL;static&nbsp;IDirectFBDisplayLayer&nbsp;*layer&nbsp;=&nbsp;NULL;static&nbsp;IDirectFBSurface&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*surface&nbsp;=&nbsp;NULL;static&nbsp;IDirectFBEventBuffer&nbsp;*events&nbsp;=&nbsp;NULL;int&nbsp;main(&nbsp;int&nbsp;argc,&nbsp;char&nbsp;*argv[]){&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;*point&nbsp;=&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;pitch;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,j;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;quit=0;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;x=0;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;y=0;&nbsp;&nbsp;&nbsp;&nbsp;DirectFBInit(&argc,&argv);&nbsp;&nbsp;&nbsp;&nbsp;DirectFBCreate(&dfb);&nbsp;&nbsp;&nbsp;&nbsp;dfb-&gtGetDisplayLayer(dfb,&nbsp;DLID_PRIMARY,&nbsp;&layer);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfb-&gtCreateInputEventBuffer(dfb,DICAPS_ALL,DFB_TRUE,&events);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layer-&gtSetCooperativeLevel(layer,DLSCL_EXCLUSIVE);&nbsp;&nbsp;&nbsp;&nbsp;layer-&gtGetSurface(layer,&surface);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;surface-&gtSetColor(surface,80,80,0,0xff);&nbsp;&nbsp;&nbsp;&nbsp;surface-&gtFillRectangle(surface,100,0,100,100);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!quit){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DFBEvent&nbsp;evt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;events-&gtWaitForEvent(events);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!quit&nbsp;&&&nbsp;events-&gtGetEvent(events,&evt)&nbsp;==&nbsp;DFB_OK)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(evt.clazz){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;DFEC_INPUT:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(evt.input.type)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;DIET_KEYPRESS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(evt.input.key_symbol&nbsp;==&nbsp;DIKS_ESCAPE)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;quit&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;DIET_AXISMOTION:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(evt.input.flags&DIEF_AXISREL)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(evt.input.axis)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;DIAI_X:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x+=evt.input.axisrel;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;DIAI_Y:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y+=evt.input.axisrel;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(x&lt0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(y&lt0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;surface-&gtSetColor(surface,0,0xff,0,0xff);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;surface-&gtDrawLine(surface,x,y,x,y);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//printf('&lt&nbsp;%&nbsp;d,%d&gt\n',x,y);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;surface-&gtRelease(surface);&nbsp;&nbsp;&nbsp;&nbsp;layer-&gtRelease(layer);&nbsp;&nbsp;&nbsp;&nbsp;dfb-&gtRelease(dfb);&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;&nbsp;}<br />
arminfo 发表于 2009-6-22 14:03 | 显示全部楼层

不错,谢啦

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

77

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部