Как справиться с ограничениями памяти GPU для обработки изображений высокого разрешения на GPU?

Я делаю приложение для камеры, и это приложение будет предоставлять пользователям некоторые фильтры. В настоящее время мой код находится в NDK, и он работает нормально, однако я хочу сделать это немного быстрее. Кажется, что GPU и opengl Es 2.0 – это путь. Моя единственная проблема с графическим процессором заключается в том, что их ограничение памяти. Поскольку современные камеры занимают 5-10 мп изображений, а ограничение памяти GPU намного меньше. Мне было интересно, есть ли способ обойти это ограничение. Единственный логический вариант, как мне кажется, – это разделение части меньшего размера изображения, а затем обработка их на графическом процессоре и окончательное удаление их до конечного изображения. Мой вопрос в том, что если этот подход все равно будет полезен для производительности, а также есть ли другой способ обработки изображений с высоким разрешением на мобильных графических процессорах.

Изменить: мне нужно уточнить, что я хочу использовать графический процессор для обработки изображений, поэтому моя цель – не показывать результаты на экране. Я отрисую его на другую текстуру и сохраню на диске.

Идея вашей черепицы использовалась с системы развлечений Nintendo, которая имеет Ricoh 2A03 на частоте 1,79 МГц, поэтому это хороший подход. Google использует тайлинг для управления отображением карт, и даже такие игры, как Crysis, имеют тенденцию ограничивать размеры текстур большей части их текстур примерно на 1024×1024 (1 мегапиксель). И yep, 10 мегапикселей требует 30 мегабайт оперативной памяти, поэтому некоторые устройства могут иметь проблемы, тем более что если вы используете источник и текстуру dest, это означает, что требуется 60 мегабайт оперативной памяти.

Просто имейте в виду, что размеры текстур имеют тенденцию использовать мощность 2 (2, 4, 8, 16, 32, 64 и т. Д.). Иногда вы получите более качественное качество, если порежьте его и нарисуйте изображение.

Вам не нужно применять фильтры в реальном времени в 10-мегапиксельные изображения … потому что таких дисплеев нет (или, может быть, они популярны среди нас). 🙂

Поэтому вам нужно применять фильтры только для отображаемых пикселей (1900×1280?). Техника плитки, о которой вы говорили, будет использоваться с некоторыми сценариями. Отложенный рендеринг является таким примером. X-Box 360 применял обе методики (тайлинг с отсрочкой) на ежедневной основе. Без плитки это было бы невозможно из-за высоких требований к памяти для отложенной техники.