2014-03-31 4 views
0

После много читать, я был в состоянии понять шаги, необходимые для загрузки текстур в OpenGL ES 2.0, но некоторые вопросы все еще не ответил:Texture Программа - OpenGL ES 2.0 Android

Что ниже код на самом деле делать?

glUniform1i(sampler2DLocation, 0); 

Если я удалю эту строку из своего кода, ничего не изменится. Некоторые книги описывают его как «Говорите текстуру равномерного пробник использовать эту текстуру в затенении, говоря его читать из текстурного блока 0»

Это называется после строки:

glActiveTexture(GL_TEXTURE0); 

Но, как указано в khronos.org активной текстурой по умолчанию является GL_TEXTURE0, поэтому я предполагаю, что строка «glActiveTexture (GL_TEXTURE0)»; код просто написан как хорошая практика?

Одна последняя вещь, когда я звоню:

glBindTexture(GL_TEXTURE_2D, genTextures[0]); 

Я говорю, что будущие вызовы, которые влияют на «GL_TEXTURE_2D» будет влиять на текстуру блок, хранящийся в genTextures [0], из-за связывания. Но существует ли какая-либо связь между «GL_TEXTURE_2D» и активной текстурной единицей? Я имею в виду, что между 03-дюймовыми компонентами существует внутренняя цепь?

genTextures [0] < ---> GL_TEXTURE_2D < ---> активный блок текстуры

Спасибо,

ответ

0

Причина, почему код продолжает работать, даже если вы удалите команду «glUniform1i (sampler2DLocation, 0); " возможно, до значения по умолчанию, назначенного драйвером, когда униформа не предусмотрена.

Чтобы лучше понять это, мне нужен пример общего кода и способ получения единообразного идентификатора, но я уверен, что инструкция должна сказать графическому процессору через шейдер, чтобы использовать блок текстуры 0.

Эффект вызова «glUniform1i (sampler2DLocation, 0);» говорит, взять блок текстуры 0. Эффект не вызывать его, равномерно устанавливает равномерность сэмплера в 0 и, следовательно, даже если формально не корректно, имеет такое же поведение.

Согласно стандарту OpenGL, вы активируете блок текстуры с glActivateTexture, для которого требуется количество единиц текстуры, а затем вы привязываете текстуру с помощью glbindtexture к этому конкретному текущему текстурному блоку.

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

Надеюсь, это поможет. Maurizio