Использование 2 лага SurfaceView

Я хочу отображать трехмерные объекты с помощью jPCT, поэтому я использую custum GLSurfaceView.Renderer для отображения того, что я хочу. И ниже, мне нужно отобразить предварительный просмотр камеры.

Это нормально работает, но моя проблема в том, что когда я отображаю 2 SurfaceView (1 для объекта и 1 для предварительного просмотра камеры), у меня было отставание в моем программном обеспечении. Я проверяю это, и это потому, что я использую 2 SurfaceView одновременно.

Как я могу решить это? Я пытаюсь отобразить мой 3D-объект на моем предварительном просмотре камеры, который расширяет GLSurfaceView:

public class CameraView extends GLSurfaceView implements SurfaceHolder.Callback

Но объекты никогда не отображаются и некоторые функции не работают (например, поиск 3D-объекта в 2D-виде...)

У кого-нибудь есть идея?

1 ответ

Решение

Есть несколько возможностей. Один из них заключается в том, что между потоками рендерера существует некоторое взаимодействие, которое вызывает задержку. Другая причина заключается в том, что добавление дополнительного слоя привело к тому, что система выполнила дополнительную композицию GLES, и это замедляет работу. (См. Этот документ для справки.)

Заявление "объекты никогда не отображаются" заставляет меня немного сомневаться в том, что является реальной проблемой.

В любом случае, один из способов исправить это состоит в том, чтобы исключить камеру SurfaceView. Вы можете отправить предварительный просмотр камеры в SurfaceTexture (API 11+), а затем визуализировать содержимое основного GLSurfaceView в виде текстурированного квадрата. Пример этого можно найти в упражнении "Текстура с камеры" в Grafika.

Другие вопросы по тегам