Рисование текста с прозрачным фоном - PullRequest
0 голосов
/ 26 сентября 2011

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

public void UpdateTexture(GL10 gl, int x, int y, int textureId, Bitmap bitmap)
{
   gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
   GLUtils.texSubImage2D(GL10.GL_TEXTURE_2D, 0, x, y, bitmap);
}

Проблема в том, что функция texSubImage2D не полностью заменяет существующие пиксели в текстуре, но сохраняет существующую информацию и рисует поверх нее новый растровый рисунок. А поскольку у нового растрового изображения есть прозрачные пиксели, старое растровое изображение отображается под ним при визуализации текстуры. Есть ли способ полностью стереть старую информацию из целевой области из текстуры перед вызовом texSubImage2D?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2011

На самом деле в другом месте кода была ошибка.
texSubImage2D фактически заменяет все данные текстуры в данном регионе. Рисование новой текстуры поверх старой происходило со стороны растрового изображения / холста.
canvas.drawColor() вызов был использован по ошибке для очистки растрового изображения, когда bitmap.eraseColor() должен был использоваться.

0 голосов
/ 27 сентября 2011

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

Сначала вы должны удалить старую текстуру ( цитата из этого документа ).


Очистка текстурных объектов

Когда вы связываете и развязываете объекты текстуры, их данные все еще находятся где-то среди ваших ресурсов текстуры. Если ресурсы текстур ограничены, удаление текстур может быть одним из способов освобождения ресурсов.

void glDeleteTextures(GLsizei n, const GLuint *textureNames):
Удаляет n объектов текстуры, названных элементами в массиве textureNames. Теперь освобожденные имена текстур можно использовать повторно (например, glGenTextures ()). Если текстура, которая в данный момент связана, удаляется, привязка возвращается к текстуре по умолчанию, как если бы glBindTexture () вызывался с нулем для значения textureName. Попытки удалить несуществующие имена текстур или нулевые имена текстур игнорируются без возникновения ошибки.

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