Я пытаюсь использовать применять эффекты в реальном времени для предварительного просмотра камеры и показать в нескольких представлениях, как я могу это сделать?
(так же, как camera2) (snapshot)Комбинация SurfaceView или TextureView
Я знаю 2 подхода, чтобы показать эффекты в реальном времени на предпросмотр камеры, если не ScrollView вовлеченного на левой стороне.
- Использование GLSurfaceView и setRenderer. Привяжите SurfaceTexture как внешнюю текстуру GLES и используйте GLSL (OpenGL Shading Language) для применения эффектов.
- Использование TextureView. Это сложнее, потому что нужно настроить EGLContext/EGLSurface и управлять потоками.
Однако, я не знаю, как сделать ScrollView с элементами эффекта в реальном времени наложением композиции GLES.
- Должен ли я выбрать GLSurfaceView (для исполнения) или TextureView (для flexble) осуществлять Scrollview? Какой из них является лучшим решением и почему?
- Можно ли разделить один контекст/поверхность EGL между несколькими видами? Если да, то какие-либо фрагменты кода для ссылки?
После прибегая к помощи и читать хороший Graphics architecture статьи и Grafika проект, я до сих пор понятия не имею ...
Может быть, я пропустил что-то важное, дозировать кто-то момент меня? Заранее спасибо.
Итак, если я уже использовал GlSurfaceView в спину, лучше выбрать TextureView сверху того, что?** Создайте второй контекст EGL для поверхности TextureView и поделитесь состоянием с контекстом GLSurfaceView? ** Затем вместо нескольких TextureViews просто выведите несколько квадов с GLES на один TextureView внутри ScrollView? ** Пожалуйста, исправьте меня, если я ошибаюсь , благодаря. – Justin
Еще одна мысль. Для лучшей производительности и большего контроля над процессом рендеринга можно ли использовать 2 SurfaceViews для этого? (Затем я могу использовать один контекст EGL для рендеринга 2 поверхности, как «show + capture camera»). – Justin
Если вы хотите использовать GLSurfaceView, а не обычный SurfaceView, вы застряли в состоянии совместного использования контекста EGL. Если вы используете обычный SurfaceView для обратной стороны, вы можете использовать один контекст EGL. TextureView + ScrollView кажется разумным, хотя я сам не пробовал. Использование двух SurfaceViews возможно, если вы установили Z-порядок в положение один напротив другого, но вы можете получить удар производительности, если количество поверхностей, скомпонованных SurfaceFlinger, превышает число наложенных плоскостей. (См. «Многоповерхностная» активность Grafika.) – fadden