Как потреблять Android Поверхность в иерархии представления - PullRequest
0 голосов
/ 15 апреля 2020

Я хочу сделать рендеринг в представлении android с использованием C ++ (Skia). Я знаю, что Android имеет специальное назначение SurfaceView и TextureView для достижения этой цели. Эти представления внутренне используют двойную буферизацию SurfaceTexture и, следовательно, требуют блокировки вызова eglSwapBuffers. У нас есть несколько представлений в нашем приложении, которые необходимо обновить, поэтому эти блокирующие вызовы проблематичны c, и мы ищем некоторую поддержку для отдельных буферизованных поверхностей, чтобы композитор Android мог обрабатывать наложение этих буферов на экране в Оптимальный способ.

Из Android API 26 мы можем создавать поверхность, используя одиночную буферизованную SurfaceTexture, а с 28 года у нас также есть поддержка SurfaceControl. Я могу создать поверхность с помощью SurfaceControl (и SurfaceTexture) и визуализировать в это, но я не уверен, как подключить эту визуализированную поверхность в иерархию представления.

Возможно, SurfaceControlViewHost можно использовать для добавления иерархии представления, но его поддержка доступна в Android R. Есть ли что-то еще, что можно сделать, чтобы достичь этого с уровнем API 28?

В принципе, моя цель - реализовать нечто подобное CAlayer https://developer.apple.com/documentation/quartzcore/calayer, на котором рендеринг может выполняться с использованием c ++. SurfaceControl кажется наиболее близким для достижения этой цели, но, похоже, не хватает API для подключения к иерархии представлений.

...