shadow buffer
从字面上理解影子缓冲?e文不好理解不能。。
仔细看代码,HardwareBuffer在构造的时候有这么一句
当要对buffer进行读写操作的时候,如果使用shadow buffer, 将对内存中的shadow buffer进行读写, 硬件部分的buffer将声明为 write only。修改完后写入硬件的buffer。(注意一下这里有个限制就是只有当buffer为动态的才这么做)
也就是说shadow buffer 只不过是当前hardware buffer的一个内存中的镜像。
在最终unlock的时候 会将shadowbuffer的内容更新到hardwarebuffer上
有一点疑问就是:
虽然两者在逻辑操作上没有什么不同,不过明明是内存上的buffer却要写成
HardwareBuffer* mpShadowBuffer;
其实是偷懒吧!XD
┌─ HardwareBuffer
Buffer─┤
└─ MemoryBuffer
MemoryBuffer* mpShadowBuffer;
这种结构从理解上感觉要好一点,不过MemoryBuffer明显要和别的地方的理解产生冲突。因为在内存里是不存在lock unlock操作的。
所以最终结论是:
HardwareBuffer* mpShadowBuffer;
这样写也能接受T_T。。。。。(这么快就屈服了。。
HardwareBuffer在使用shadow buffer时,会在内存中创建一个镜像,用于动态或静态读写的场景。当需要读写时,操作的是内存中的shadow buffer,而非硬件buffer本身。在最后的unlock阶段,会将shadow buffer的内容同步到硬件buffer。尽管内存中已经有了buffer,但依然使用`HardwareBuffer* mpShadowBuffer;`来表示,可能是为了逻辑一致性,尽管这可能导致理解上的混淆。
3万+

被折叠的 条评论
为什么被折叠?



