Организация текстур

Материал из SkyXEngine wiki
Версия от 07:58, 15 декабря 2018; Byurrer (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Загрузка текстур управляется загрузчиком который находится в графическом ядре sxgcore.

Правила именования и расположения текстур

Именование текстур подчиняется общим правилам именования.

Все папки с текстурами располагаются по относительному пути /gamesource/textures/

Все текстуры должны располагаться только на одном уровне вложенности, то есть примерно так:

  • /gamesource/textures/dirname/dirname_texture.dds

Каждый файл текстуры должен иметь расширение dds.

Не допускается использование текстур находящихся непосредственно в папке /gamesource/textures/

Каждая текстура должна иметь префикс папки в которой она расположена, после чего следует символ подчеркивания "_" и далее имя текстуры. Например:

  • папка concrete
    • текстура concrete_slab.dds
    • текстура concrete_NAME.dds где NAME - имя текстуры
  • папка ui
    • текстура ui_button.dds
    • текстура ui_NAME.dds где NAME - имя текстуры

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

Это правило позволяет разделить большой объем текстур на группы (дерево/wood, металл/metal, бетон/concrete, растительность/vegetation и прочее)

Форматы текстур

Загрузка текстур осуществляется функциями DirectX 9, это значит что dx сам определит формат текстуры основываясь на том что содержит файл. Однако, дабы не вводить путаницу, настоятельно рекомендуем использовать формат текстур dds.

Рекомендуемый формат организации данных dds текстур DXT5, он хорошо сжимает и сохраняет информацию об альфа-канале.

Типы текстур

Поддерживается 2 типа загружаемых текстур:

  • 2d
  • кубические

Оба типа имеют различные хранилища и соответственно разные функции обращения для получения объектов текстур:

  • 2d - SGCore_LoadTexGetTex
  • кубические - SGCore_LoadTexGetTexCube

Загрузчик самостоятельно определяет тип загружаемой текстуры и помещает объект в соответствующее хранилище.

Типы объектов текстур

Каждый объект текстуры имеет тип. Объекты текстур могут быть следующих типов:

  • загружаемыми
  • константными
  • созданными пользователем

Тип загружаемой или константной текстуры задается при использовании функции SGCore_LoadTexAddName.

Определение типа является ответственностью программиста. В самом распространенном случае текстура является загруженной к примеру, когда текстуры загружаются для модели.В этом случае (когда объекты текстур имеют тип "загруженные") при очистке уровня все такие текстуры будут удалены.

Однако есть такие ситуации когда загружаемая текстура должна иметь константный тип, например текстуры GUI. При очистке уровня константные текстуры не будут удалены.

В случае использования функции SGCore_LoadTexCreate, текстура будет иметь пользовательский тип, и не будет удалена при очистке уровня.

Организация управления

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

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

Хранение текстур организовано поименно, то есть добавление имени уже загруженной текстуры не приведет к ее повторной загрузке и вернет идентификатор уже существующей текстуры.