2009-12-25 2 views
8

В настоящее время я реализую программную клавиатуру (используя некоторое сложное предсказание), и рисовать ее с помощью холста недостаточно с точки зрения производительности. Я получаю время рисования кадра намного выше 100 мс, что явно неприемлемо.Является ли OpenGL на Android аккумулятором?

Сама клавиатура состоит из 33 клавиш, каждая из которых нарисована с использованием drawRoundRect и простого текста над этим. Никакие виджеты не используются, так что это простое исполнение. Кроме того, почти все подсказки для работы в Google Googles используются, поэтому это не причина для скорости.

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

Поскольку я не нашел достаточной документации по этой теме, я надеюсь, что кто-то здесь может указать мне в правильном направлении.

ответ

25

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

Также, как сказал предыдущий плакат, вам, вероятно, будет лучше смотреть, как оптимизировать ваш обычный рисунок. Векторы рисования довольно медленные, поэтому предварительное рендеринг их в растровое изображение, чтобы просто делать растровые блики, очень помогло бы. Также будьте осторожны, чтобы только нарисовать части окна, которые изменились. 100 мс - это довольно сумасшедшее количество времени, чтобы привлечь пользовательский интерфейс, так что вы почти наверняка сможете добиться значительной оптимизации. Возможно, вам стоит взглянуть на код KeyboardView на платформе (который используется стандартной мягкой клавиатурой и образцом IME); это уже содержит много аналогичных оптимизаций рисования.

+0

Я признаю, что для меня есть определенные способы оптимизации. На данный момент я собираюсь взглянуть на растровые блики, и что осталось сказать, кроме: спасибо и веселого Рождества (мы относимся к этому очень серьезно здесь, в Германии .. :-)) – moritz

+0

Интересная точка зрения и аспект .. Каждый день что-то новое, чтобы узнать здесь ..;) Хороший ответ! 10q – Ewoks

+0

Примечание: этот ответ с 2009 года. Современные устройства поддерживают несколько контекстов GLES, а рендеринг с Canvas на пользовательский вид может использовать GLES для ускорения работы (http://developer.android.com/guide/topics/graphics/hardware -accel.html). – fadden

4

В сторону: Вы считали, что нужно отдать ключи один раз, а затем захватить их как спрайты и блуждать? Он должен значительно превосходить рендеринг векторной графики.

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

Возможно, вам просто придется реализовать его (возможно, в упрощенном случае) и произвести измерения.

+0

благодарит за ваш ответ, но, учитывая информацию, полученную hackbod, кажется, что opengl не является решением (как это было бы приятно, как было бы). веселый рождественский, кстати. – moritz