Android GLES20 большой текстурированный квад очень медленный (на Nexus One) - PullRequest
3 голосов
/ 15 марта 2011

Я рендерил 2 треугольника, покрывающих всю поверхность, используя только контекст GLES20.Проблема в том, что рисование только одной текстуры таким образом кажется неоправданно медленным.Частота кадров снижается с 58 кадр / с до 21 кадр / с.

  • проблема, по-видимому, заключается в общей пиксельной области, составленной из всех четырехугольников вместе
  • растровые изображения изменяются до pow2 при загрузке
  • растровые изображения загружаются с правильными внутренними форматами GL
  • с использованием растрового изображения 8888 или 565 ничего не меняет
  • код вершинного и фрагментного шейдера абсолютно минимален
  • включение / отключениесмешивание ничего не меняет
  • рисование всего растрового изображения в одной или нескольких плитках не помогает
  • glDrawTexiOES, похоже, не работает с GLES20 (ошибка перечисления GL)

Я в растерянности;Я думал, что стирание одного изображения в GL должно быть, по крайней мере, таким же быстрым, как и в случае с Canvas, но, похоже, это не так.

Может ли кто-нибудь дать подсказки или объяснение этого удара по производительности?

Обновление:

Я только адаптировал свой поток рендеринга для поддержки холста вместо контекста EGL, и я делаю абсолютно то же самое;показывает текст в секунду и стирает текстуру фона.Угадайте, что: показывая только текст, я получаю 58fps, добавляя фоновое изображение, которое я получаю ... 57fps!

Теперь я официально и очень серьезно разозлен.Я надеюсь, что я не достаточно умен, чтобы хорошо использовать GLES20, иначе кажется, что если вы хотите использовать 2D-графику, вы берете Canvas;и если и ТОЛЬКО если вам нужно много треугольников в 3D, тогда вы берете OpenGL.

Разве OpenGL не должен всегда быть по крайней мере таким же быстрым, как 2D API, предоставляемый Canvas?

Ответы [ 2 ]

1 голос
/ 20 января 2012

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

Надеюсь, это поможет ...

0 голосов
/ 26 января 2012

Без обид, но переход от 58 до 57 кадров в секунду для полноэкранной текстуры не так уж и плох. Будь то 2D или 3D телефон или планшетный процессор / GPU всегда будет ограничена скорость заполнения.

...