共同点 :
1. 其实三者都是同一个东西,AHardwareBuffer、ANativeWindowBuffer都是GraphicBuffer通过类型转换而来。
联系
1. GraphicBuffer 继承了ANativeWindowBuffer,所以可以直接通过static_cast<>类型转换成ANativeWindowBuffer,不过由于是多继承,所以转完有一个地址偏移(static_cast 自动完成),
偏移量为0x10(64位场景)大小,为GraphicBuffer父类对象RefBase大小(包括虚函数表指针8字节,成员变量 weakref_impl* const mRefs 8字节)

多继承、带虚函数的偏移,可以参考
https://joydig.com/cpp-base-pointer-offset-adjustment-for-multiple-inheritance/
2. AHardwareBuffer只是一个抽象的概念,没有具体类型,与GraphicBuffer 没有任何继承关系,所以只能通过reinterpret_cast 强制类型转换而来。
区别:
1. AHardwareBuffer 没有具体的类型,是个空结构体,类似于voi

本文详细探讨了AHardwareBuffer、GraphicBuffer和ANativeWindowBuffer之间的关系。它们实际上是同一个东西的不同表现形式,其中 GraphicBuffer 继承自 ANativeWindowBuffer。AHardwareBuffer 是一个抽象概念,需要通过reinterpret_cast转换,而转换到ANativeWindowBuffer则需要经过两次转换。文章还提供了具体的转换函数示例,揭示了多继承和虚函数在类型转换中涉及的地址偏移问题。

3万+

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



