2016-02-05 2 views
1

Я выполняю видеоэффект, требующий двухпроходного рендеринга (текстуру нужно передавать через несколько программ шейдеров). Прикрепление SurfaceTexture к GL_TEXTURE_EXTERNAL_OES, которое передается в конструкторе, похоже, не является решением, так как отображаемый результат отображается только один раз.Android: Прикрепить SurfaceTexture к FrameBuffer

Одно из решений, о котором я знаю, - это то, что первый рендеринг можно сделать с помощью FrameBuffer, а затем полученную текстуру можно отобразить там, где она фактически отображается.

Однако кажется, что SurfaceTexture необходимо прикрепить к тексту GL_TEXTURE_EXTERNAL_OES, а не к FrameBuffer. Я не уверен, есть ли обход вокруг этого, или если есть другой подход, который я должен принять.

спасибо.

ответ

1

SurfaceTexture получает буфер графических данных и по существу обертывает его как «внешнюю» текстуру. Если это помогает увидеть исходный код, начинайте с updateTexImage(). Обратите внимание, что название класса («GLConsumer») является более точным описанием функции, чем «SurfaceTexture»: она расходует кадры графических данных и делает их доступными для GLES.

SurfaceTexture, как ожидается, будет работать с форматами, с которыми OpenGL ES не работает «естественно», особенно YUV, поэтому он всегда использует внешние текстуры.

+0

Рамка для фотоаппарата переходите в плоскость поверхности, но какой именно формат рамки изображения? Когда я рисую изображение на поверхность MediaCodec, почему кодировщик может кодировать кадр без проблемы с форматом? – dragonfly

+0

Системный интегратор должен обеспечить взаимодействие графических и видеокомпонентов. Android не указывает один формат, просто чтобы реализация GLES и видеокодек должны были иметь возможность обмениваться буферами. (Следовательно, 'COLOR_FormatSurface', a/k/a' OMX_COLOR_FormatAndroidOpaque' ... это «непрозрачно» в смысле структуры данных, а не в смысле альфа-прозрачности.) Это не всегда автоматически, например. Для выхода GLES в MediaCodec требуется флаг 'EGL_RECORDABLE_ANDROID'. – fadden

+0

Вы имеете в виду, что системный интегратор должен реализовать внешнее расширение oes opengl? – dragonfly

Смежные вопросы