Текст и шрифты с Canvas в Android с использованием OpenGL - PullRequest
1 голос
/ 24 июня 2011

Я использую код, указанный в следующем посте:

Рисование текста в OpenGL ES

Я думал, что смогу использовать эту технику для динамического отображения текста (скажем, счетчик FPS). Я понял, что обращение к ресурсам для получения отрисовки значительно замедляет этот процесс, и мне не нужен растровый фон, поэтому я удалил его.

Техника работает, но через некоторое время (~ 2000 кадров) весь телефон зависает. Я подозреваю, что есть некоторая память, которая не освобождается в этом коде, но я не знаю, где. Я попытался разгрузить создания объектов Canvas, Paint и Bitmap, которые сработали (поэтому они не создаются каждый кадр), но та же проблема все еще возникает.

Поэтому я подозреваю, что сгенерированная текстура GL виновата, но я не уверен, как ее удалить, или, если это вообще так.

Любая помощь будет оценена.

РЕДАКТИРОВАТЬ: В качестве альтернативы, может кто-нибудь указать простой способ динамического отображения текста на экране (например, должен иметь возможность отображать количество кадров с момента его запуска, например, непрерывного обновления и увеличения). Все способы, которые я могу придумать, являются либо чрезвычайно утомительными (создание отдельных квадратов для каждой цифры, сохранение текстур для 0-9 в памяти, анализ числа и рендеринг каждой цифры на каждый квад), но не могут быть своевременно обновлены (наложения просмотров ) или не может получить требуемое позиционирование в glSurfaceView.

Ответы [ 3 ]

3 голосов
/ 24 июня 2011

CBFG - http://www.codehead.co.uk/cbfg

Это действительно то, чего я давно хотел.Вы создаете файл растрового изображения из файла шрифтов, используя CBFG, который затем может быть загружен и отображен с помощью всего нескольких строк кода (после импорта его пакетов).Это буквально так же просто, как fnt.PrintAt (gl, «Hello world!», 50, 160);в onDraw и, что более важно, он очень хорошо обрабатывает динамический текст. Я настоятельно советую всем, кто находится в такой же ситуации, попробовать это.

1 голос
/ 21 апреля 2012

Я только что написал целое руководство по созданию именно того, что вы ищете.

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

Учебное пособие включает в себя полный рабочий источник (который можно отброситьв любой проект).Если вам интересно, посмотрите здесь .

1 голос
/ 24 июня 2011

две вещи, которые, я думаю, вы захотите попробовать:

1) не воссоздайте число ваших кадров каждый кадр, генерируйте числа от 1 до 60 и всегда используйте их.

2) при генерации текста для моих текстур я обнаружил проблему, заключающуюся в том, что код загрузчика шрифтов Android никогда не освобождает пространство памяти, поэтому избегайте постоянной загрузки шрифта, сделайте это один раз и сохраните ссылку на него

...