找回密码
 注册
搜索
查看: 2963|回复: 21

[讨论] 有没有大侠知道MTK的multi-layer实现原理

[复制链接]
发表于 2010-1-14 15:16:42 | 显示全部楼层 |阅读模式
以6225为例,大致看了下,貌似硬件上多设了几个寄存器,保留每个层的参数,但是刷新时的怎么将多个层混合起来?
有没有大侠了解这方面的原理?
多谢![em06]
发表于 2010-1-14 16:28:53 | 显示全部楼层
层合并啊 每层都有透明背景色
上面层覆盖下面层,遇到背景色不赋值到layer 0,非背景色 赋值到layer0
等所有层合并完再将layer0的buffer往屏上刷不就完了
点评回复

使用道具 举报

发表于 2010-1-14 17:05:16 | 显示全部楼层
我也很想知道具体的过程,顶一下……
点评回复

使用道具 举报

发表于 2010-1-14 21:01:26 | 显示全部楼层
nanfansky 经验丰富啊,我一直不明白为什么每一层的背景色为什么合起来时不显示,原来如此。 谢谢~~[em01]
点评回复

使用道具 举报

 楼主| 发表于 2010-1-14 23:51:31 | 显示全部楼层
以下是引用nanfansky在2010-1-14 16:28:53的发言:
层合并啊 每层都有透明背景色
上面层覆盖下面层,遇到背景色不赋值到layer 0,非背景色 赋值到layer0
等所有层合并完再将layer0的buffer往屏上刷不就完了

层合并的原理是没有错,但是单纯靠软件去实现应该非常耗时并且低效率。
看了代码,MTK似乎也不是这么实现的。
点评回复

使用道具 举报

发表于 2010-1-15 06:28:17 | 显示全部楼层
倒, 模拟器上确实上做了层的复合操作, 但是在真机上, 并没有所谓的"合并", 只不过是依次将各层的图象送到 framebuffer去秀, 这个结果跟先复合再秀是一样的.
就像乘法的分配律一样:
MODIS: (a+b+c+d)*r
TARGET: a*r + b*r + c*r + d*r
这里的 r 为LCD的 register
a, b, c, d为各层的图象数据
点评回复

使用道具 举报

 楼主| 发表于 2010-1-15 09:59:12 | 显示全部楼层
--------------------------------------------------------------------------------------------------------------
本文来自:我爱研发网(52RD.com) 详细出处:http://www.52rd.com/bbs/post.asp?action=edit&BoardID=5&replyID=368211&ID=177879&star=1
倒, 模拟器上确实上做了层的复合操作, 但是在真机上, 并没有所谓的"合并", 只不过是依次将各层的图象送到 framebuffer去秀, 这个结果跟先复合再秀是一样的.
就像乘法的分配律一样:
MODIS: (a+b+c+d)*r
TARGET: a*r + b*r + c*r + d*r
这里的 r 为LCD的 register
a, b, c, d为各层的图象数据
--------------------------------------------------------------------------------------------------------------
这样刷屏的速度能跟得上吗?比如把a送到framebuffer之后,当我再送b的时候,会不会这个时候LCD上已经显示了a的内容?
另外,直接送framebuffer,透明色怎么处理?
[此贴子已经被作者于2010-1-15 14:21:30编辑过]
点评回复

使用道具 举报

 楼主| 发表于 2010-1-15 14:44:58 | 显示全部楼层
Up一下,没有大侠能指点一下吗?
点评回复

使用道具 举报

发表于 2010-1-15 19:10:53 | 显示全部楼层
  
以下是引用wangzhengh在2010-1-159:59:12的发言:

  这样刷屏的速度能跟得上吗?比如把a送到framebuffer之后,当我再送b的时候,会不会这个时候LCD上已经显示了a的内容?

  另外,直接送framebuffer,透明色怎么处理?

  


  这个要看你怎么刷了;理想的是多次送,一次刷。

  数据送到framebuffer后并不会主动显示,需要刷新才行。
[此贴子已经被作者于2010-1-16 15:04:55编辑过]
点评回复

使用道具 举报

 楼主| 发表于 2010-1-16 01:31:09 | 显示全部楼层
这个要看你怎么刷了;理想的是多次送,一次刷。
数据送到framebuffer后并不会主动显示,需要刷新才行。
----------------------------------------------------------------------------
是不是可以这样理解,叠加时,layer buffer依次送到frame buffer中,叠加完成之后送LCD显示?
如果是这样,有两个疑问
1.layer buffer中的透明色,是通过软件方式筛选后送到frame buffer中的吗?MTK最多支持6层layer,以QVGA大小为例,叠加6层layer,满打满算需要执行240*320*6=
460800次循环,刷一次屏就要循环46万次,这中间还要对透明色进行判断,MTK怎么保证效率的?
2.frame buffer应该相当于一块LCD buffer的大小,这块内存是存在于什么地方的?
点评回复

使用道具 举报

 楼主| 发表于 2010-1-18 22:40:56 | 显示全部楼层
没有兄弟对这块有深入研究吗?
点评回复

使用道具 举报

发表于 2010-1-19 16:52:43 | 显示全部楼层
layer的叠加是由硬件完成的
其实原理可以参考模拟器上layer的叠加处理
道理应该是一样的
点评回复

使用道具 举报

发表于 2010-1-19 17:08:31 | 显示全部楼层
楼上所言极是,真是英雄所见略同呀!
点评回复

使用道具 举报

 楼主| 发表于 2010-1-20 11:54:12 | 显示全部楼层
以下是引用BrayL在2010-1-19 16:52:43的发言:
layer的叠加是由硬件完成的
其实原理可以参考模拟器上layer的叠加处理
道理应该是一样的

硬件上怎么样实现layer叠加的?DMA送数据时如何过滤透明色的?这位朋友能否说得详细一点?
点评回复

使用道具 举报

发表于 2010-1-21 09:58:48 | 显示全部楼层
多开几块buffer,然后将每个buffer中的数据依次进行硬件叠加,叠加完成后LCD控制器再去刷屏。
点评回复

使用道具 举报

发表于 2010-3-29 10:39:52 | 显示全部楼层
路过路过挣钱呢!!!!!
点评回复

使用道具 举报

发表于 2010-3-29 11:22:04 | 显示全部楼层
路过,学习[em01]
点评回复

使用道具 举报

发表于 2010-3-31 15:41:12 | 显示全部楼层
顶一下,学习了
点评回复

使用道具 举报

发表于 2011-1-25 10:59:20 | 显示全部楼层
支持一把
点评回复

使用道具 举报

 楼主| 发表于 2011-1-25 22:40:15 | 显示全部楼层
一年前的玩意还有人顶,都沉了吧。
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-26 22:46 , Processed in 0.066353 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表