在看DFB有关图形 renderto的部分。
之前一直以为, DFB是没法对图形进行scale的,但后来在DFB讨论群上,一个网友指点了下,才发现DFB对图形这块有很多好玩和有用的东西,只是我不知道罢了。 下面主要说图形的scale。
DFB绘图的过程,一般是根据图形的ImageProvider,获取图新的DFBSurfaceDescription信息,并根据 DFBSurfaceDescription信息来CreateSurface DFB的 IDirectFBSurface,之后把图片给renderto到这个surface上,当需要显示到OSD时候, 通过blit把图形临时的surface数据给blit到primary surface,并把primary surface给flip出来, 这就是一整个DFB绘图的过程。
绘图过程中,CreateSurface的大小,像素等都是有DFBSurfaceDescription来 决定的,因此修改 DFBSurfaceDescription的相关信息,可以实现对图形的一些操作。 简单那的scale就是限制 DFBSurfaceDescription的width&height,并设置flags为width&height有效,这样,创建 的surface 就是按照这个width&height来定义的surface,并且render时候,默认会把图片renderto到整块surface上,因 此这一步就实现了pic的scale功能; 而之后的blit和flip,则只是简单的把surface的图形数据通过blit到primary surface上而显示出来。
当然,如果不定义DFBSurfaceDescription的 width&height,则此时的surface是按照图形的原始尺寸来创建的,也就没有scale功能。 当blit时候 ,可能是把pic surface的局部给blit到primary surface上,因此此时看到的就是部分图形了 !
DFB中,有关位置和坐标的参数,renderto flip等都给的NULL[0值]。具体的坐标位置,是在 struct IDirectFBSurface_data 的 area成员中。
struct {
DFBRectangle wanted; /* passed to GetSubSurface */
DFBRectangle granted; /* clipped by parent on creation */
DFBRectangle current; /* currently available area */
DFBInsets insets; /* actually set by the window manager */
} area;
它标注的四个参数,我还没弄明白,还需进一步追查!
[DFB] dfb 对图形的renderto
最新推荐文章于 2020-03-29 10:50:15 发布