Создать новую текстуру из мультитекстуры - PullRequest
1 голос
/ 09 августа 2011

Я изо всех сил пытаюсь понять, как создать новую текстуру (с новым GLHandle, если это возможно) после объединения двух других в одной и той же концепции мультитекстурирования.Я делаю это, потому что я использую сжатые текстуры ETC1, ведьма не поддерживает альфа-канал, поэтому я хотел загрузить предварительно сгенерированный альфа-канал из другого файла и «объединить» их после распаковки.

Я знаю, что мультитекстурирование делает это, но это подразумевает полное отображение двух текстур (сжатых + альфа), верно?

Кроме того, я делаю это, потому что я видел массивныйускорение в моем конвейере рендеринга с использованием сжатых текстур.Если я воссоздаю его с альфа-каналом, предполагается, что выигрыш в производительности сохранится, верно?

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Я думаю, что вы можете сделать это с OpenGL ES 1.1, используя мультитекстурирование и среду GL_COMBINE.Сначала мы используем любое стандартное окружение, которое вы хотите для цветовой текстуры:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, rgbTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);    //or maybe GL_REPLACE

Затем для альфа-текстуры, которая привязана ко второму блоку, мы просто берем цвет с предыдущего этапа (цветовой текстуры)и используйте только альфа текстуры.

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, alphaTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTenEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);    //default
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE);    //or maybe GL_REPLACE
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE);     //default
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);  //default
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA, GL_PREVIOUS);    //default
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);  //default

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

0 голосов
/ 12 августа 2011

Вам просто нужен фрагментный шейдер.

, в котором вы будете смешивать цвет и альфа-значение из этих двух текстур.Это все.(Цвет идет как обычно, а альфа-значение напрямую выводится).

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