|
最近小弟在使用go的fyne库在嵌入式板子上画界面。要实现fyne库在嵌入式板子上运行,用buildroot编译了xorg和opengl等,最后能在lcd上显示界面。但是实时刷新摄像头数据的时候cpu占用率极高。
原因就是嵌入式板子没有gpu。fyne使用opengl作为后端,编译的opengl实际上是软光栅算法模拟的gpu所以会很慢。后来自己改了一个月fyne的底层库,把画图相关的opengl使用在framebuffer上直接
画图后,cpu从25%降到了5%左右。但是现在又出现一个问题就是透明度的混叠的问题。
要实现c1+c2*(1-a)的算法。c1是前置图像素rgb中的一个,c2是背景图中rgb中的对应的一个,a是前置图像素的alph透明度。
现在有一个dsp模块能实现f1(a,c1,c2) = c1*a+c2*(1-a),其中c1/c2是0-255的整数,a是0-1的浮点数。
我做了变换使用两个f1相加f1(a,c1,c2) + f1(a,0,c1) = c1*a+c2*(1-a) + 0*a+c1*(1-a) = c1 + c2*(1-a) 可以满足结果要求。
但是中间还使用加法运算,最后240x320的像素cpu要累加240*320*4次,cpu占用率又高了。
后来又发现dsp的f2函数可以实现如下
0: v0&v1; 1: v0&~v1; 2: ~v0&v1; 3: ~(v0|v1); 4: v0|v1; 5: v0|~v1;6: ~v0|v1; 7: ~(v0&v1); 8: v0^v1; 9: ^(v0^v1). Default is 0 (v0&v1).
的与或非等功能。
请问大侠们可以使用f1和f2等不使用加法运算实现c1+c2*(1-a)的算法吗?谢谢大家了 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|