Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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