2016-05-13 2 views
0

Я хочу использовать TextureView для рисования кривых Math (много), источником данных которых является внешнее устройство.Android, Буферы в textureView

Здесь каждая зона, которую я рисую, должна добавлять линии к предыдущей.

Вплоть до визуализации TextureView с использованием 3 буферов, я бы хотел, чтобы буфер, который я рисую в каждый момент, имеет источник, который я хочу освободить.

То есть, я хочу, чтобы содержимое из буфера i освобождалось, заполните следующий буфер, прежде чем я нарисую его.

Другая возможность, будет, использовать только один буфер.

Я вижу, возможно получить битмап и setbitmap, но я бы хотел сделать это без предъявления обвинений в памяти.

Кто-нибудь знает, если это возможно.

ответ

0

Я бы рекомендовал две вещи:

  1. Предполагая, что вы рендеринга с холста, не используйте TextureView. Вместо этого используйте custom View. TextureView на самом деле не дает вам преимуществ, и вы теряете аппаратное ускорение рендеринга.
  2. Извлеките растровое изображение вне экрана, а затем разорвите растровое изображение на вид. Внеэкранная рендеринг не аппаратно ускоряется, но вы избегаете повторной рисования всей сцены. Вам нужно будет поэкспериментировать, чтобы определить, какой из них наиболее эффективен.

Если вы работаете с OpenGL ES, просто нарисуйте все на TextureView на каждом кадре (если вы не хотите играть с FBOs).

+0

Хорошо, спасибо. Я понимаю, что нет способа клонировать в gpu один буфер, содержащий следующий буфер. Но если я рисую внеэкранное растровое изображение, то в чем смысл использовать пользовательское представление вместо Textureview. Textureview с тремя буферами будет тушить, я думаю ... – titgar

+0

Пользовательский вид должен загружать Bitmap в качестве текстуры и использовать GLES для его рендеринга (при условии, что аппаратное ускорение включено, что довольно часто). IIRC код достаточно умен, чтобы не повторно загружать Bitmap, если он не изменился, хотя в вашем случае это обычно не имеет значения. При рисовании на TextureView с Canvas всегда будет задействовано программное обеспечение blit, за которым следует загрузка текстуры ... должно быть быстрее просто загрузить Bitmap напрямую, а не отображать его в программном обеспечении, а затем загружать выводимый вывод. – fadden

+0

Excuseme Fadden, я думал, что я отвечаю вам. Я проверяю ответ. Спасибо. – titgar

0

Вы можете попробовать lockCanvas (null) of Surface.

  1. использование TextureView.getSurfaceTexture получить surfaceTexture
  2. использовать новую поверхность (surfaceTexture) для создания поверхности
  3. использование Surface.lockCanvas или Canvas.lockHardwareCanvas получить холст.

Затем вы можете сделать много рисунков на текстуре с этим холстом.

Смежные вопросы