您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > DirectFb总结
DirectFB总结第一、DirectFB简介1、DirectFB是一个轻量级的提供硬件图形加速,输入设备处理和抽象的图形库,它集成了支持半透明的视窗系统以及在LinuxFramebuffer驱动之上的多层显示。它是一个用软件封装当前硬件无法支持的图形算法来完成硬件加速的层。DirectFB是为嵌入式系统而设计。它是以最小的资源开销来实现最高的硬件加速性能。2、DirectFB所处结构层次如图:DirectFB依赖于FrameBuffer层。在使用DirectFb之前,必须先对FB进行初始化。通常GenericGFXDriver模块主要是检查是否有能被DirectFb加速的硬件,如果有,就由GFXdrivers模块对硬件进行加速。如果没有,则直接软件操作。下图为DirectFB的组成模块:从这五个文件可以看出,DirectFb主要由这五部分组成:Gfxdrivers:上面有所介绍,主要是对硬件进行加速。Inputdrivers:主要是对输入设备的驱动,如(鼠标,键盘等输入设备)。Interfaces:主要包括图片解码接口,视频解码接口,字库接口等。Systems:系统接口,如(处理时钟,多线程处理等)。Wm:用于窗口管理等。第二、DirectFB中一些主要数据类型之间的关系层(Layers)表示一块儿独立的图像缓冲区。大多数的嵌入式设备都有多个层。他们由硬件使用合适的alpha值来blending,然后显示。表面(Surface)用来保存像素数据的保留内存区域。DirectFB的Drawing和blitting操作最终都是作用于表面(surfaces)上.表面的内存可以从显存(videomemory)(MMZ)得到,也可以从系统内存(systemmeomroy)得到,这由给定的限制决定。主层(PrimarySurface)表示特定层的framebuffer的特殊表面。如果主表面是单缓冲的,任何作用到这个主层的操作,都会直接在屏幕上见到。他们之间的关系主要是一些一对一或是一对多的关系:1IDirectFB(顶层)--N屏幕(Screens)1屏幕(Screen)--N层(Layers)1层(Layer)--1主表面(PrimarySurface)1层(Layer)--N窗口(Windows)1窗口(Window)--1窗口表面(WindowSurface)1表面(Surface)--N子表面(Subsurfaces)通常的状况是一个屏幕有一个显示层,但是DFB支持他们每个有多个实例层(Layers)和屏幕(Screens)每一个屏幕可以有一个或是多个层,通常,一个屏幕只有一个层,但是某些支持overlays的系统,由于硬件支持一层显示在另一层上面,可以有多层。屏幕(Screens)和(Windows)屏幕不能直接创建窗口(Window),但是你能请求得到一个屏幕(Screen)的主层(PrimaryLayer)的ID,然后请求IDirectFB接口(interface)给你那个层(Layer)的接口,然后通过这个接口来创建窗口。表面(Surfaces)和(Windows)每一个窗口有一个和它关联的表面,画在表面上的内容并不会马上显示在屏幕上,因为窗口管理器会负责将窗口的所有表面组合到主表面上---基于所要刷新的区域和堆栈顺序。当有变化的时候,表面的Flip()函数会通知窗口管理器。表面(Surfaces)和(Layers)一个层同样有一个和他关联的表面;这个表面是这个层的屏幕内存的直接表现,在独占(exclusive)模式下,你只能访问这个表面,否则,你只能创建一个窗口,然后用窗口管理器来绘制这个表面。第三、DirectFB虚拟机环境搭建1.首先下载一下两个包并解压。tar-zxvfDirectFB-xxxx.tar.gztar-zxvfDirectFB-examples-xxxx.tar.gz2.安装DirectFBcd/home/DirectFB-xxxx./configuremakemakeinstall3.安装DirectFB-examplea).vi/boot/grub/grub.conf在kernel后面加上vga=0x0317把frambuffer启动,如:#****************start*************#titleFedoraCore(2.6.9-1.667)root(hd0,0)kernel/vmlinuz-2.6.9-1.667roroot=LABEL=/rhgbquietvga=0x0317initrd/initrd-2.6.9-1.667.img#****************stop**************##更新数据库:b).updatedbc).locatedirectfb.pc找到directfb.pc的路径,例如我的是这样的:/usr/local/lib/pkgconfig/directfb.pc/home/DirectFB-1.0.0/directfb.pc/home/DirectFB-1.0.0/directfb.pc.ind).接着设置环境,将第3步得到的pkgconfig库目录加入环境之中:exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig(这样只能在当前终端可以运行,关机后还得自已运行些命令,才能运行dfb程序,如要永久性加入可这样:如你用的是root用户,可以vi/root/.bash_profile中加入:PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig)e)../configuremakef).makeinstallg).将指定directfb的库目录:vi/etc/ld.so.conf在最后一行加入:/usr/local/lib,保存退出。ldconfig然后reboot重启计算机...到此为止,DFB的配置就完成了,但是在应用的过程中可能出现一个问题,运行程序的时候在全屏的状态下运行,这样为调试就带来了麻烦。可以通过一下方法解决。如果想让dfb运行在窗口中,除了正常的安装外,请配置:在(~)目录下创建.directfbrc文件,加入以下内容wm=defaultmode=800x600depth=32system=sdl修改/etc/grub.conf,在倒数第二行kenerl最后面加上vga=791,重启虚拟机第四、DirectFB嵌入式环境搭建该部分有SDK组完成.主要根据海思的DirectFB开发指南.pdf文档.第五、DirectFB常用接口说明5.1﹑DirectFBInit*函数功能:对DirectFB进行初始化*参数说明:argc:指向main()'sargcargv[]:指向main()'sargv*函数原型:DFBResultDirectFBInit(int*argc,char*(*argv[]));5.2﹑DirectFBCreate*函数功能:创建DirectFB接口*参数说明:Interface:指向所创建的接口*函数原型:DFBResultDirectFBCreate(IDirectFB**interface);5.3﹑CreateImageProvider*函数功能:创建图片解码接口*参数说明:thiz:指向DirectFB接口filename:图片路径IDirectFBImageProvider:指向图片解码接口*函数原型:DFBResult(*CreateImageProvider)(IDirectFB*thiz,constchar*filename,IDirectFBImageProvider**ret_interface);5.4﹑SetCooperativeLevel*函数功能:创建图片解码接口*参数说明:thiz:指向DirectFB接口level:图层协作级别*函数原型:DFBResult(*SetCooperativeLevel)(IDirectFB*thiz,DFBCooperativeLevellevel);*涉及到的机构体:typedefenum{DFSCL_NORMAL=0x00000000,/*(共享级别)Normalsharedaccess,primarysurfacewillbethebufferofanimplicitlycreatedwindowattheresolutiongivenbySetVideoMode().*/DFSCL_FULLSCREEN,/*(独占式)Applicationgrabstheprimarylayer,SetVideoModeautomateslayercontrol.Primarysurfaceistheprimarylayersurface.*/DFSCL_EXCLUSIVE/*(独占式)Allbuttheprimarylayerwillbedisabled,theapplicationhasfullcontroloverlayersifdesired,otherapplicationshavenoinput/output/control.Primarysurfaceistheprimarylayersurface.*/}DFBCooperativeLevel;5.5﹑CreateFont*函数功能:创建字库接口,加载字库*参数说明:thiz:指向DirectFB接口filename:字库文件路径desc:字体属性设置ret_interface:指向字库接口*函数原型:DFBResult(*CreateFont)(IDirectFB*thiz,constchar*filename,constDFBFontDescription*desc,IDirectFBFont**ret_interface);*涉及到的机构体:typedefstruct{DFBFontDescriptionFlagsflags;//需要改变的字体属性,如字体大小,等DFBFontAttributesattributes;intheight;//字体高度intwidth;//字体宽度unsignedintindex;intfixed_advance;intfract_height;intfract_width;intoutline_width;intoutline_opacity;}DFBFontDescription;5.6﹑CreateSurface*函数功能:创建surface*参数说明:thiz:指向DirectFB接口desc:字库文件路径desc:字体属性设置interface:指向字库接口*函数原型:DFBResult(*CreateSurface)(IDirectFB*thiz,constDFBSurfaceDescription*desc,IDirectFBSurface**ret_interface);*涉及到的机构体:typedefstruct{DFBSurfaceDescriptionFlagsflags;//改变surface的一些属性,如大小,颜色格式等DFBSurfaceCapabilitiescaps;/*capabilities*/intwidth;//宽intheight;//高DFBSurfacePixelFormatpixelformat;//像素格式struct{void*data;//buffur指针intpitch;//每行所占的像素总数}preallocated[2];struct{constDFBColor*entries;//调色板索引unsignedintsize;//颜色位数}palette;//调色板设置unsignedlongresource_id;//资源标识DFBSurfaceHintFlagshints;//surface类型}DFBSurfaceDescriptio
本文标题:DirectFb总结
链接地址:https://www.777doc.com/doc-4263843 .html