相信很多年前的程序员并没有想到如今有如此方便的图形系统或者说图形函数库。学过《计算机图形学》的研发人员应该知道,对于计算机绘图,就是操作一大块数据(这块数据就表示一副画面),然后把这块数据送到硬件设备里面,显示到屏幕上。计算机的处理速度很快,在一秒钟之内,操作了许多块这样的数据,并送到硬件设备里面进行显示,这样在屏幕上出现连续画面,人眼根本感觉不到操作间隔,然而大家在看电视的时候会发现,用摄像机(老式的)捕捉到的电脑屏幕,会在“有画面”与“黑屏”之间切换,这里的原因,相信学习过采样定理就会明白了。
Linux下的FrameBuffer技术,提供图形设备(帧缓冲设备)接口和内存映射访问机制,能够让程序员直接操作前面提到的大块数据,在Linux终端下面进行绘图。这里先要区分这么一个概念,FrameBuffer更多应用于嵌入式领域,使用它来进行图形绘制更加高效,属于轻量级绘图技术。相比而言像依赖于xlib的图形函数库,更多应用于桌面系统和复杂系统,进行了多次封装和功能增加,显得庞大不易掌握。总而言之,它们的原理一样,例如使用了double buffering方法等,只是后者功能更强大,两者关系等同于C语言和C++语言。
这里,我利用Linux FrameBuffer来构造一个轻量级的图形库,运行于S3C6410的嵌入式系统上,实现基本的绘图功能,通过这样的实践,我觉得能够使研发人员掌握计算机绘图的基本原理,同时理解Linux下mmap机制的易用性,提升设计重构能力。后期在进行维护的时候,我还会引入多任务保护,分布式同步等内容,对于未来的嵌入式系统,多任务保护和分布式计算将是重要趋势,绘图与计算可以说是一脉相承的。
注:图形库的组织和接口划分,整个结构是一种管道过滤线框架
int draw_init(),FrameBuffer的初始化,主要是用于打开/dev/fb0设备和获取显示设备参数
int get_fb(),获取/dev/fb0设备的描述符,单一模式
char *draw_mmap(int fb),将图形的帧缓存进行内存映射,便于程序员操作,
Linux FrameBuffer构造图形库
最新推荐文章于 2025-06-30 10:16:53 发布