Аппаратное ускорение Android Canvas

По ссылке

Аппаратное ускорение

Я обнаружил, что Canvas теперь поддерживает аппаратное ускорение (в основном).

Я загрузил исходный код AOSP 4.2.2 (уровень API 17) и проверил код во external / skia / src / core / sKCanvas.cpp.

Я добрался до sKCanvas.cpp, потому что он, наконец, будет вызываться через jni из класса Android Canvas.

Однако, скажем, 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

}


person Sam    schedule 13.08.2013    source источник


Ответы (1)


Вы смотрите на программную реализацию. Аппаратная реализация находится в frameworks/base/libs/hwui и frameworks/base/core/java/android/view/ (см. HardwareRenderer.java, HardwareCanvas.java, GLES20Canvas.java и т. Д.)

person Romain Guy    schedule 13.08.2013
comment
Спасибо. Я заметил, что GLES20Canvas расширяет HardwareCanvas. Вы знаете, к какому файлу GLEs20Canvas.java обращается на собственном уровне? - person Sam; 14.08.2013
comment
Спасибо. еще один вопрос, это чисто программная реализация SkCanvas? Если это так, то для Android имеет смысл создать GLES20Canvas.java. в противном случае, если SkCanvas также может использовать преимущества аппаратного ускорения, то в чем разница между Canvas.java и GLES20Canvas.java? - person Sam; 14.08.2013
comment
SkCanvas - это программная реализация. - person Romain Guy; 14.08.2013