Android opengl-es быстрый способ рендеринга текста - PullRequest
0 голосов
/ 11 февраля 2011

Я хочу показать текст в opengl ES.У меня есть 512 * 512 текстур шрифта (текстурный атлас), все буквы здесь 32 * 32 пикселей.

Моя длина текста около 400 символов.

Мой алгоритм

    opengl.setClearTransparentBGEnabled();

    float y2=0;
    float j =0;

    for (int i=0; i<text.length(); i++) {

        int ch  =(int)text.charAt(i);
        float x2=((float)j*16*scale/50);

        j++;
        if ((text.charAt(i)+"").equals("\n")) {
            y2+=(16*scale*2)/50;
            j=0;
            x2=0;
        }

        opengl.saveMatrix();
            Sprites.selectVertex("font"+name)
                    .setSprite(ch)
                    .translate(x-x2, y+y2, -9)
                    .scale(scale, scale, scale)
                    .rotate(90, 0, 0, 1)
                    .draw(true);
        opengl.loadMatrix();
    }

    opengl.setClearTransparentBGDisabled();

Моя единственная проблема, этот метод очень медленный: после этого я получаю 15-20 FPS.

Как лучше всего динамически отображать тексты в opengl-es?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

Это слишком много работы для каждого кадра.

Я бы использовал 2D API для Canvas.drawText() (или drawBitmap, если вы не используете настоящий шрифт) 400 символов до частного Bitmap, и использовал бы его в качестве моей текстуры.

0 голосов
/ 11 февраля 2011

Вы повторяете большую работу каждый кадр и для каждого символа в тексте.Вы должны вычислить все данные вершин и треугольников для данной строки, а затем отправить их в opengl в одном пакете.Повторно используйте данные, пока строка остается неизменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...