Единый контекст. Несколько GLSurfaceView и одна текстура

Можно ли создать только одну трехмерную текстуру в виде поверхности и использовать один и тот же идентификатор для разных видов поверхности. Здесь я создаю одну и ту же текстуру в трех видах поверхности и занимаю место в памяти трижды. Возможно ли создать текстуру, общую для всех этих видов, и использовать ее для этих целей?

1 ответ

Да. Есть пара подходов.

Самый простой способ - использовать один и тот же контекст EGL для всех трех SurfaceView. использование eglMakeCurrent() изменить EGLSurface, когда вы хотите рисовать на другом SurfaceView.

Немного более неудобный способ - использовать общие контексты EGL, которые вы настраиваете при первоначальном создании второго и последующих контекстов EGL. Каждый SurfaceView имеет отдельный контекст, но все они могут видеть одинаковые текстуры (и несколько других вещей; подробности см. В спецификации EGL).

То, что вы должны использовать, зависит от того, что вам нужно. Вы можете увидеть примеры обоих подходов в Grafika, хотя вместо нескольких видов SurfaceView обычно используется один вид и одна входная поверхность MediaCodec.

Это гораздо проще сделать с простым SurfaceView, чем с GLSurfaceView, потому что GLSurfaceView обрабатывает большую часть ведения контекста EGL за вас. Действие "Показать + захват камеры" в Grafika использует общие контексты с GLSurfaceView, но для того, чтобы попасть туда, нужно прыгнуть через несколько обручей.

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