OpenGL ES 2.0 texture2D bias / lod

Я использую функции OpenGL ES 2.0 GLSL для управления изображениями. То, что я хочу достичь, – это выбрать определенный уровень детализации (LOD) при извлечении образца из текстуры из фрагментарного шейдера. По-видимому, texture2DLod() не поддерживается для texture2DLod() шейдеров в OpenGL ES 2.0 (но есть расширение GL_EXT_shader_texture_lod которое может его опционально предоставить).

Однако функция texture2D() по умолчанию обеспечивает третий необязательный смещение параметра. Насколько я понимаю, этот параметр должен быть смещением, добавленным к текущему LOD.

В моих тестах я рисую квадрат размером экрана, и я увеличиваю текстуру, масштабируя образцы координат. Я включил mipmapping для текстуры, используя GL_LINEAR_MIPMAP_LINEAR в качестве фильтра фильтрации. Результат, когда выборка с ненулевым параметром смещения на графическом процессоре ARM Mali-400 можно увидеть на изображении ниже.

ISTM, что некоторые пиксели используют фильтр минимизации, в то время как другие используют фильтр увеличения.

Как это контролируется? И как определить начальный LOD при использовании смещения? Можно ли настроить его из вершинного шейдера?

Связанный с этим вопрос следующий:

Как сэмплер GLSL определяет минимизацию и, следовательно, уровень mipmap, текстуры?

Texture2D с параметром смещения на ARM Mali-400

Обновление: я заметил, что если я пробую текстуру так, чтобы она закрывала экран, то она, похоже, делала правильный просмотр mipmap (даже если он увеличен). Теперь, если я добавлю небольшое смещение к образцам координат, тогда Я начну видеть полосу, которая видна на приведенном выше изображении (что еще больше увеличено). Если я не использую параметр смещения, я вообще не увижу никаких обвязок.