Буферизация Android OpenGL и glFlush - PullRequest
2 голосов
/ 02 июня 2011

Итак, я делаю приложение для Android 2.2, которое использует GLSurfaceView.Мой вопрос заключается в том, что, поскольку OpenGL имеет тенденцию буферизовать команды, означает ли это, что ему требуется связанная память (например, растровое изображение в вызове glTexSubImage2D ()), пока он не будет выполнен?Или он сам делает копию любой памяти, необходимой для буферизованных команд?

Я спрашиваю, так как этот код имеет тенденцию вызывать длительное зависание и возможный сбой на аппаратном обеспечении (HTC Desrire), но не на эмуляторе:

//bm is a Bitmap stored in a vector from previous commands
//pt is a Point stored at the same time
GLUtils.texSubImage2D(GL10.GL_TEXTURE_2D, 0, pt.x, pt.y, bm); 
bm.recycle();

Теперь, если я добавлю glFlush () примерно так:

//bm is a Bitmap stored in a vector from previous commands
//pt is a Point stored at the same time
GLUtils.texSubImage2D(GL10.GL_TEXTURE_2D, 0, pt.x, pt.y, bm); 
**AGL.glFlush();** //or glFinish
bm.recycle();

Кажется, это прекрасно работает.Теперь это актуальная функциональность для glFlush / glFinish, чтобы предотвратить очистку памяти из-под OpenGL?

1 Ответ

2 голосов
/ 02 июня 2011

Хороший вопрос. Кстати, с текстурами и объектами буфера вершин, после того, как вы вызвали методы, которые фактически загружают данные изображения для текстуры, вам не нужно держаться за буфер / массив, который есть в памяти клиента.

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

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