Перейти к содержанию

TextureOptions

Неизменяемая конфигурация сэмплирования текстур: min/mag фильтрация, wrap-режимы UV, mipmaps и premultiplied alpha.

Обзор и неизменяемый дизайн

TextureOptions определяет, как графический ускоритель сэмплирует текстуру при отрисовке полигонов, мешей и 9-slice панелей.

Неизменяемая семантика

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

TextureOptions base = TextureOptions.defaults();
TextureOptions linearWithRepeat = base.sampling(TextureFilter.LINEAR).wrap(TextureWrap.REPEAT);

Режимы фильтрации (Nearest против Linear)

Режимы TextureFilter управляют интерполяцией пикселей при масштабировании:

Режим Поведение Где использовать
NEAREST Выбирает ближайший пиксель без интерполяции. Pixel-art текстуры Minecraft, чёткие иконки предметов, рамки UI.
LINEAR Билинейная интерполяция между 4 соседними текселями. Высокодетализированный арт, векторная графика, плавный зум.
NEAREST_MIPMAP_NEAREST Nearest-выборка из ближайшего mipmap-уровня. Сильно уменьшенные pixel-art поверхности.
LINEAR_MIPMAP_LINEAR Трилинейная фильтрация с плавным переходом между уровнями. 3D-проекции в мире, удалённые плоскости, защита от муара.

Режимы повторения UV (TextureWrap)

Определяет поведение сэмплера при выходе UV-координат за пределы диапазона 0.0..1.0:

  • CLAMP_TO_EDGE: Прижимает координаты к крайним пикселям. Стандартный режим UniGUI; исключает паразитные цветные полосы по краям рамок.
  • REPEAT: Бесконечно повторяет текстуру плиткой (тайлинг). Идеально для фоновых узоров, бегущих текстур кабелей и полос.
  • MIRRORED_REPEAT: Повторяет текстуру с зеркальным отражением каждого второго тайла для создания симметричных паттернов.

Premultiplied Alpha и Mipmaps

Premultiplied Alpha

При билинейной фильтрации полупрозрачных текстур стандартный straight alpha может давать тёмные грязные ореолы вокруг контуров из-за смешивания RGB с чёрным цветом при alpha=0. Опция premultipliedAlpha(true) переключает шейдер бэкенда на математику premultiplied alpha (src + dst * (1 - srcAlpha)).

Mipmaps

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

10-битный сжатый ключ

Все параметры сэмплирования и wrap-режимов упакованы в компактный 10-битный целочисленный ключ (packed()):

Биты 0-1: MinFilter (NEAREST=0, LINEAR=1, NEAREST_MIP=2, LINEAR_MIP=3)
Биты 2-3: MagFilter (NEAREST=0, LINEAR=1)
Биты 4-5: WrapS (CLAMP=0, REPEAT=1, MIRRORED=2)
Биты 6-7: WrapT (CLAMP=0, REPEAT=1, MIRRORED=2)
Бит 8:    Флаг Mipmaps (0/1)
Бит 9:    Флаг Premultiplied Alpha (0/1)

Благодаря тому, что ключ занимает всего 10 бит (значения от 0 до 1023), бэкенды используют прямой массив (SamplerState[1024]) или быстрый switch, обеспечивая мгновенный поиск O(1) без выделения памяти.

Бесшовный тайлинг фона

// Настройка повторяющегося фона
TextureOptions tiledOptions = TextureOptions.defaults()
        .wrap(TextureWrap.REPEAT);

TextureHandle tiledTexture = new SimpleTextureHandle("custom:wallpaper", 32, 32, null, tiledOptions);
// Отрисовка 5x3 плиток по ширине и высоте
scope.texture(tiledTexture, x, y, width, height, 0.0f, 0.0f, 5.0f, 3.0f, Paint.NONE);

Сглаженная иконка с mipmaps

// Сглаженные трилинейные опции для иконок интерфейса
TextureOptions smoothOptions = TextureOptions.linear()
        .mipmaps(true)
        .premultipliedAlpha(true);

API

Предустановки и стандартные фабрики

Метод Описание
defaults() Возвращает стандартные настройки: nearest-фильтрация, clamp-to-edge, без mipmaps.
nearest() Возвращает настройки для pixel-perfect выборки без сглаживания.
linear() Возвращает настройки для сглаженной линейной фильтрации.
isDefault() Возвращает true, если опции совпадают со стандартными.

TextureOptions::defaults()

Получить опции по умолчанию

Возвращает стандартные настройки: nearest-фильтрация, clamp-to-edge, без mipmaps.

Возвращает TextureOptions: Кэшированный стандартный экземпляр TextureOptions..

TextureOptions::nearest()

Получить Nearest опции

Возвращает настройки для pixel-perfect выборки без сглаживания.

Возвращает TextureOptions: Экземпляр TextureOptions с nearest-фильтрацией..

TextureOptions::linear()

Получить Linear опции

Возвращает настройки для сглаженной линейной фильтрации.

Возвращает TextureOptions: Экземпляр TextureOptions с linear-фильтрацией..

TextureOptions::isDefault()

Проверить настройки по умолчанию

Возвращает true, если опции совпадают со стандартными.

Возвращает boolean: True, если идентично TextureOptions.defaults()..

Свойства сэмплера

Метод Описание
minFilter() Возвращает фильтр при отрисовке текстуры меньше её размера.
magFilter() Возвращает фильтр при отрисовке текстуры больше её размера.
wrapS() Возвращает режим повторения по горизонтали (ось U).
wrapT() Возвращает режим повторения по вертикали (ось V).
mipmaps() Возвращает true, если включены mipmaps.
premultipliedAlpha() Возвращает true, если текстура использует premultiplied alpha.

TextureOptions::minFilter()

Получить фильтр уменьшения

Возвращает фильтр при отрисовке текстуры меньше её размера.

Возвращает TextureFilter: Установленный minification TextureFilter..

TextureOptions::magFilter()

Получить фильтр увеличения

Возвращает фильтр при отрисовке текстуры больше её размера.

Возвращает TextureFilter: Установленный magnification TextureFilter..

TextureOptions::wrapS()

Получить Wrap S

Возвращает режим повторения по горизонтали (ось U).

Возвращает TextureWrap: Режим повторения TextureWrap по горизонтали..

TextureOptions::wrapT()

Получить Wrap T

Возвращает режим повторения по вертикали (ось V).

Возвращает TextureWrap: Режим повторения TextureWrap по вертикали..

TextureOptions::mipmaps()

Проверить включение Mipmaps

Возвращает true, если включены mipmaps.

Возвращает boolean: True, если mipmaps активны..

TextureOptions::premultipliedAlpha()

Проверить Premultiplied Alpha

Возвращает true, если текстура использует premultiplied alpha.

Возвращает boolean: True, если используется premultiplied alpha..

Методы конфигурации

Метод Описание
minFilter(TextureFilter) Возвращает копию TextureOptions с заданным фильтром уменьшения.
magFilter(TextureFilter) Возвращает копию TextureOptions с заданным фильтром увеличения.
sampling(TextureFilter) Устанавливает один фильтр для уменьшения и увеличения одновременно.
wrap(TextureWrap) Применяет wrap-режим одновременно к обеим осям (U и V).
wrap(TextureWrap, TextureWrap) Применяет независимые wrap-режимы для осей U (S) и V (T).
mipmaps(boolean) Включает или выключает использование mipmaps.
premultipliedAlpha(boolean) Указывает, содержат ли данные текстуры premultiplied alpha.

TextureOptions::minFilter(TextureFilter)

С фильтром уменьшения

Возвращает копию TextureOptions с заданным фильтром уменьшения.

Параметр Тип Описание
filter TextureFilter Режим интерполяции TextureFilter.

Возвращает TextureOptions: Обновлённый экземпляр TextureOptions..

TextureOptions::magFilter(TextureFilter)

С фильтром увеличения

Возвращает копию TextureOptions с заданным фильтром увеличения.

Параметр Тип Описание
filter TextureFilter Режим интерполяции TextureFilter.

Возвращает TextureOptions: Обновлённый экземпляр TextureOptions..

TextureOptions::sampling(TextureFilter)

С единым фильтром сэмплирования

Устанавливает один фильтр для уменьшения и увеличения одновременно.

Параметр Тип Описание
filter TextureFilter Режим интерполяции TextureFilter.

Возвращает TextureOptions: Обновлённый экземпляр TextureOptions..

TextureOptions::wrap(TextureWrap)

С единым режимом Wrap

Применяет wrap-режим одновременно к обеим осям (U и V).

Параметр Тип Описание
wrap TextureWrap Режим повторения TextureWrap для UV-координат.

Возвращает TextureOptions: Обновлённый экземпляр TextureOptions..

TextureOptions::wrap(TextureWrap, TextureWrap)

С независимыми режимами Wrap

Применяет независимые wrap-режимы для осей U (S) и V (T).

Параметр Тип Описание
s TextureWrap Режим TextureWrap по горизонтали (ось U).
t TextureWrap Режим TextureWrap по вертикали (ось V).

Возвращает TextureOptions: Обновлённый экземпляр TextureOptions..

TextureOptions::mipmaps(boolean)

С настройкой Mipmaps

Включает или выключает использование mipmaps.

Параметр Тип Описание
mipmaps boolean True для включения mipmaps, false для отключения.

Возвращает TextureOptions: Обновлённый экземпляр TextureOptions..

TextureOptions::premultipliedAlpha(boolean)

С настройкой Premultiplied Alpha

Указывает, содержат ли данные текстуры premultiplied alpha.

Параметр Тип Описание
premultipliedAlpha boolean True, если RGB-каналы текстуры пред-умножены на альфу.

Возвращает TextureOptions: Обновлённый экземпляр TextureOptions..

Сжатый ключ и кэширование

Метод Описание
packed() Возвращает компактный 10-битный целочисленный ключ всех параметров сэмплера.

TextureOptions::packed()

Получить сжатый ключ

Возвращает компактный 10-битный целочисленный ключ всех параметров сэмплера.

Возвращает int: 10-битный ключ для кэширования сэмплеров в бэкенде..