Android Canvas 硬件加速

Posted

技术标签:

【中文标题】Android Canvas 硬件加速【英文标题】:Android Canvas hardware acceleration 【发布时间】:2013-08-13 21:25:20 【问题描述】:

在链接上

Hardware accleration

我发现 Canvas 现在(大部分)支持硬件加速。

我下载了 4.2.2 AOSP(API Level 17) 源码并检查了 external/skia/src/core/sKCanvas.cpp 中的代码

我访问了 sKCanvas.cpp,因为它最终会通过 android Canvas 类中的 jni 调用。

但是,比如说drawPosText(),这个函数应该使用硬件加速(open gl)

在代码中。但是当我在 sKCanvas.cpp 中检查这个函数时,我没有看到任何与 open gl 相关的代码。

我是不是误会了什么?这让我很困惑。

谢谢。

void SkCanvas::drawPosText(const void* text, size_t byteLength,
                       const SkPoint pos[], const SkPaint& paint) 
LOOPER_BEGIN(paint, SkDrawFilter::kText_Type)

while (iter.next()) 
    SkDeviceFilteredPaint dfp(iter.fDevice, looper.paint());
    iter.fDevice->drawPosText(iter, text, byteLength, &pos->fX, 0, 2,
                              dfp.paint());


LOOPER_END

【问题讨论】:

【参考方案1】:

您正在查看软件实施。硬件实现在frameworks/base/libs/hwuiframeworks/base/core/java/android/view/(见HardwareRenderer.javaHardwareCanvas.javaGLES20Canvas.java等)

【讨论】:

谢谢。我注意到 GLES20Canvas 扩展了 HardwareCanvas。你知道GLEs20Canvas.java在native层访问的是哪个文件吗? 谢谢。还有一个问题,SkCanvas 是纯软件实现吗?如果是这样,那么 Android 创建 GLES20Canvas.java 是有意义的。否则,如果 SkCanvas 也可以利用硬件加速,那么 Canvas.java 和 GLES20Canvas.java 有什么区别? SkCanvas 是软件实现。

以上是关于Android Canvas 硬件加速的主要内容,如果未能解决你的问题,请参考以下文章

Android硬件加速介绍与实现

Android硬件加速

Android硬件加速

4.1.Android的硬件加速官方文档

Android ffmpeg 和硬件加速

如何在 Android 上使用硬件加速视频解码?