Войти
Мобильные платформыФорумОбщее

OpenGL ES. Надо ли отвязать текстуру после отрисовки.

Страницы: 1 2 Следующая »
#0
12:48, 25 окт. 2013

Привет.
Иногда вижу в примерах, что после Draw делают glBindTexture( GL_TEXTURE_2D, 0 );
Имеет ли это смысл?
Интересует в контексте multi-texturing. Выставили несколько текстурных блоков:

glActiveTexture( GL_TEXTURE0+Index );
glBindTexture( GL_TEXTURE_2D, pTexture->TexId );
glUniform1i( TexUniform, Index );

Отрисовали. Затем рисуется что-то с одной текстурой, т.е. нужен один текстурный блок. Выключать другие?

glActiveTexture( GL_TEXTURE0+Index );
glBindTexture( GL_TEXTURE_2D, 0 );

Или бред?


#1
14:34, 25 окт. 2013

Kroll
> Выключать другие?

У тебя гарантируется неудаляемость текстур при рендеринге ? Одно могу сказать, после рендера кадра точно нужно сделать flush с очисткой всех забайденных ресурсов. Иногда даже после прохода  и тд

#2
14:43, 25 окт. 2013

Kroll
> Выключать другие?
> glActiveTexture( GL_TEXTURE0+Index );
зачем? Если это OpenGL ES 2.0 то если из пиксельного шейдера она не будет читаться, то смысл ее отключать из API вызова?
А вот для OpenGL ES наверное нужно, ибо смешивание цветов текстур будет без шейдера,  а на FFP, поэтому текстуры могут остаться из старых вызовов в текстурных блоках.
IOS OpenGL ES Profiler кстати показывает на частые вызовы glBindTexture/glActiveTexture.

#3
14:54, 25 окт. 2013

Да, использую только пиксельный шейдер.
Жаль на мармеладе нет профайлера.

#4
20:50, 25 окт. 2013

>А вот для OpenGL ES наверное нужно, ибо смешивание цветов текстур будет без шейдера, а на FFP, поэтому текстуры могут остаться из старых вызовов в >текстурных блоках

там можно рулить вариантами на каждом stage

#5
23:04, 25 окт. 2013

innuendo
> Одно могу сказать, после рендера кадра точно нужно сделать flush с очисткой
> всех забайденных ресурсов. Иногда даже после прохода  и тд
Что?! Flush\Finish на мобильных гпу вообще никогда не надо делать.

#6
23:08, 25 окт. 2013

я написал flush, а не glFlush :)

это логическое действие, означающее, что все действия полностью commited

#7
1:20, 26 окт. 2013

innuendo
> я написал flush, а не glFlush :)
А glFlush() после отрисовки надо делать каждый кадр на "старшем" OpenGL 1.1 ?
Перед SwapBuffer если на винде.

#8
4:41, 26 окт. 2013

Riddik


With multithread applications, flush the drawing commands in any other threads drawing to the same window before calling SwapBuffers.

#9
10:15, 26 окт. 2013

innuendo
А если у меня графика вызывается только в одном потоке, всё равно надо после всех команд glFlush перед SwapBuffers?

#10
10:35, 26 окт. 2013

>А если у меня графика вызывается только в одном потоке, всё равно надо после всех команд glFlush перед SwapBuffers?

Вроде как нет. Как правило, glFlush нужно когда что-то меняем (меняется) в ресурсах и потом хочется заюзать это готовое - асинхронные вещи всякие

#11
15:55, 26 окт. 2013

StiX
> Что?! Flush\Finish на мобильных гпу вообще никогда не надо делать.
Где про это почитать? Надо комментить тогда...

#12
17:22, 26 окт. 2013

Andrey
В EGL спеках подобное описано.

#13
17:27, 26 окт. 2013

>В EGL спеках подобное описано.

Для чего тогда glFlush на мобидках ?

#14
23:10, 26 окт. 2013

Zloten
Понял. Будем читать.

Страницы: 1 2 Следующая »
Мобильные платформыФорумОбщее

Тема в архиве.